Сразу же скажу - я не сталкивался раньше программированием в MS Office. :(
Так вот. На работе у меня есть Excel таблица в которой я произвожу основные операции. В ней есть строка с указанием определенной даты (в формате день/месяц/год - i.e. 30.06.2004). Строка довольно большая - порядка 200 ячеек (и постоянно увеличивается). В строке ниже мне необходимо вводить дату на 30 дней большую (i.e. 30.07.2004). А в строке еще ниже дату + 30 банковских дней (5 дней в неделю пн.-пт.) - i.e. 12.8.2004. Вводить все вручную конечно уже задолбало :( Этот процесс можно как-нибудь атоматизировать? Т.е. чтобы я вводил только первую "основную" дату, а значения в нижних строках вносились автоматически.
Спасибо.
Вычисление даты и занесение её в таблицу
Модератор: Naeel Maqsudov
*provided AS IS
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Предел MS Excel в ширину - 256 столбцов. Пора думать о переходе на что-нибудь другое.Строка довольно большая - порядка 200 ячеек (и постоянно увеличивается).
Теперь по существу вопроса:
Код: Выделить всё
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, там вроде речь шла про ввод в строку...
С уважением,
Игорь
С уважением,
Игорь

Naeel Maqsudov, спасибо большое :)
*provided AS IS
А почему Вы просто не хотите использовать формулы, типа :
A1 30.06.04
A2 =A1+30
A3 =A2+35
P.S.
- Естественно без учёта праздничных и выходных дней.
- Функция на которую ссылается Naeel Maqsudov называется РАБДЕНЬ
A1 30.06.04
A2 =A1+30
A3 =A2+35
P.S.
- Естественно без учёта праздничных и выходных дней.
- Функция на которую ссылается Naeel Maqsudov называется РАБДЕНЬ
Так сейчас сделал.А почему Вы просто не хотите использовать формулы, типа :


*provided AS IS