Страница 1 из 1

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

Добавлено: 10 ноя 2004, 22:16
Andy
Сразу же скажу - я не сталкивался раньше программированием в MS Office. :(

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

Спасибо.

Добавлено: 11 ноя 2004, 07:45
Naeel Maqsudov
Строка довольно большая - порядка 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, которая это делает, но она кажется находится в надстройке "Пакет анализа"...

Подумаю на досуге....

Добавлено: 11 ноя 2004, 13:26
Игорь Акопян
Naeel Maqsudov, наверное вместо Target.Column надо написать Target.Row, там вроде речь шла про ввод в строку...

С уважением,
Игорь

Добавлено: 11 ноя 2004, 18:35
Andy
Naeel Maqsudov, спасибо большое :)

Добавлено: 24 ноя 2004, 04:00
pashulka
А почему Вы просто не хотите использовать формулы, типа :

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

P.S.
- Естественно без учёта праздничных и выходных дней.
- Функция на которую ссылается Naeel Maqsudov называется РАБДЕНЬ

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