Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2009, 17:23   #11
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
С движком форума всё в порядке.
Ага, вчера вечером все было ОК, сегодня приехал с работы, "дыня"!!

Игорь а как мне теперь отнять назад день, что бы в С5 = 31?
Код:
Sub test()
    Дата = CDate([E1])
    НомерДняНедели = Application.Weekday(Дата, 2)
    If Application.Weekday([E1], 2) = 1 Then [C5] = Application.Weekday([E1] - 1, 2)
End Sub

Последний раз редактировалось valerij; 17.06.2009 в 17:30.
valerij вне форума Ответить с цитированием
Старый 17.06.2009, 17:58   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Код:
If Application.Weekday([e1], 2) = 1 Then [C5] = Day([e1] - 1)
Ты опять пишешь код, не пытаясь понять, что он делает?
Функция Application.Weekday возвращает номер дня в неделе (от 1 до 7)
По-моему, несложно догадаться, что если нужно получить число 31, эта функция не совсем подходит...
EducatedFool вне форума Ответить с цитированием
Старый 17.06.2009, 19:27   #13
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Код:
If Application.Weekday([e1], 2) = 1 Then [C5] = Day([e1] - 1)
.
И так я и делал, но формат этой ячейки стоял, дата, как это могло быть??? я не назначал формат, поэтому мне выводило 31.01.1900, поменял и все ок!

Последний раз редактировалось valerij; 17.06.2009 в 21:49.
valerij вне форума Ответить с цитированием
Старый 17.06.2009, 23:06   #14
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Еще вопрос, вот код
Код:
If Application.Weekday([e1].Offset(iCount& * 28), 2) = 1 Then
    [C5].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
    [C6].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
    [C7].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
Else
    [C5].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
    [C6].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
End If
Но это для С5, С6, С7, а для яч. С8, С9, С10....С22, G3, G4, G5, G8, G9, G10, G14, G15, G16 можно этот же код, как то использовать или всем яч. надо указывать?
Resize может помочь?

Последний раз редактировалось valerij; 17.06.2009 в 23:54.
valerij вне форума Ответить с цитированием
Старый 17.06.2009, 23:18   #15
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Resize может помочь?
В данном случае вряд ли.

Цитата:
для яч. С8, С9, С10....С22, G3, G4, G5, G8, G9, G10, G14, G15, G16 можно этот же код, как то использовать
Конечно можно.
В цикле перебираешь все эти ячейки, и вычисляешь значение для каждой.
Только не спрашивай, как...

PS: И скажи, пожалуйста, для чего в твоём макросе эти строки:
Код:
Дата = CDate([e1].Offset(iCount& * 28))
    НомерДняНедели = Application.Weekday(Дата, 2)
EducatedFool вне форума Ответить с цитированием
Старый 17.06.2009, 23:49   #16
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
для чего в твоём макросе эти строки:
Код:
Дата = CDate([e1].Offset(iCount& * 28))
    НомерДняНедели = Application.Weekday(Дата, 2)
В Е1 стоит дата 01.06.09
В Е29 стоит дата 03.06.09
В Е57 стоит дата 05.06.09
................................
В Е337 стоит дата 29.06.09

Да, понял, они не нужны, исправил
Игорь, я конечно о цикле знаю, но тут одним не обойдешься, а через .Offset?

Последний раз редактировалось valerij; 17.06.2009 в 23:58.
valerij вне форума Ответить с цитированием
Старый 18.06.2009, 01:17   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Вобщем так выглядит рабочий модуль, а как его упростить??
Код:
Sub даты()
Application.EnableEvents = False
        For L = 1 To 3
With Sheets(L).Select
For iCount& = 0 To 13
If Application.Weekday([e1].Offset(iCount& * 28), 2) = 1 Then
        [C5].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C6].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C7].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C8].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C9].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C10].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C11].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C12].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C13].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C14].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C15].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C16].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C17].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C18].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C19].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C20].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [C21].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C22].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        
        [G3].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [G4].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G5].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [G8].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [G9].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G10].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [G14].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 3)
        [G15].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G16].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
    Else
        [C5].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C6].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C8].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C9].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C11].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C12].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C14].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C15].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C17].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C18].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [C20].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [C21].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        
        [G3].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G4].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [G8].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G9].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
        [G14].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 2)
        [G15].Offset(iCount& * 28) = Day([e1].Offset(iCount& * 28) - 1)
    End If
    Next
End With
Next
Application.EnableEvents = True
End Sub
З. Ы.
Хотя, если упростить, хлопотно, то и так пойдет, макрос запускается один раз в три месяца

Последний раз редактировалось valerij; 18.06.2009 в 01:23.
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даты предыдущих дней Avalonix Общие вопросы Delphi 2 05.04.2009 15:40
определить день недели по заданному числу (считать в месяце 30 дней и первый день месяца понедельник dan1991 Помощь студентам 1 01.03.2009 20:59
Зависимость чисел дней месяца от месяца valerij Microsoft Office Excel 10 14.11.2008 11:01
Вычисление даты завтрашнего дня meteora Помощь студентам 3 18.01.2008 11:18
Как сделать отсчет дней от заданной даты в Excel? ru16 Microsoft Office Excel 1 22.11.2007 11:13