Вычисление даты и занесение её в таблицу

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Сразу же скажу - я не сталкивался раньше программированием в MS Office. :(

Так вот. На работе у меня есть Excel таблица в которой я произвожу основные операции. В ней есть строка с указанием определенной даты (в формате день/месяц/год - i.e. 30.06.2004). Строка довольно большая - порядка 200 ячеек (и постоянно увеличивается). В строке ниже мне необходимо вводить дату на 30 дней большую (i.e. 30.07.2004). А в строке еще ниже дату + 30 банковских дней (5 дней в неделю пн.-пт.) - i.e. 12.8.2004. Вводить все вручную конечно уже задолбало :( Этот процесс можно как-нибудь атоматизировать? Т.е. чтобы я вводил только первую "основную" дату, а значения в нижних строках вносились автоматически.

Спасибо.
*provided AS IS
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Строка довольно большая - порядка 200 ячеек (и постоянно увеличивается).
Предел MS Excel в ширину - 256 столбцов. Пора думать о переходе на что-нибудь другое.

Теперь по существу вопроса:

Код: Выделить всё

Dim flag As Boolean

........

Private Sub Worksheet_Change(ByVal Target As Range)
  If flag Then Exit Sub
  Dim d As Date
  flag = True
  If Target.Column = 1 And IsDate(Target.Value) Then
    d = Target.Value
    Target.Offset(1, 0).Value = d + 30
    Target.Offset(2, 0).Value = d + 35
  End If
  flag = False
End Sub

Это надо добавить в модуль листа с таблицей.
Target.Column = 1 - указывает, что это будет работать только в колонке А. Установка, сброс и проверка глобальной переменной flag обеспечивает исключение рекурсии.

Тут еще вместо +35 надо придумать что-то блее продвинутое, чтобы пропускать выходные дни. Проще воспользоваться стендертной функцией Excel, которая это делает, но она кажется находится в надстройке "Пакет анализа"...

Подумаю на досуге....
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Naeel Maqsudov, наверное вместо Target.Column надо написать Target.Row, там вроде речь шла про ввод в строку...

С уважением,
Игорь
Изображение
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Naeel Maqsudov, спасибо большое :)
*provided AS IS
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

А почему Вы просто не хотите использовать формулы, типа :

A1 30.06.04
A2 =A1+30
A3 =A2+35

P.S.
- Естественно без учёта праздничных и выходных дней.
- Функция на которую ссылается Naeel Maqsudov называется РАБДЕНЬ
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

А почему Вы просто не хотите использовать формулы, типа :
Так сейчас сделал. :) Банковские дни сделал через РАБДЕНЬ. Да и вообще я тут затеял большую автоматизацию, так что вопросы еще по теме будут :)
*provided AS IS
Ответить