Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с датой. VBA Excel / 9 сообщений из 9, страница 1 из 1
19.10.2009, 13:06
    #36259251
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
Моя задача такая. Мне надо создать график на любой год.
он должен начинаться с 1 числа и дня недели.
Январь - 2010 - 1 - пятница ..... 31 - воскресение
Февраль - 2010 - 1 - Понедельник ..... 28 - воскресение

Во вложенном фото, виден результат того что должно получится.
...
Рейтинг: 0 / 0
19.10.2009, 13:39
    #36259413
astatsa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
Код: plaintext
1.
2.
3.
4.
5.
6.
    Dim i As Long, d As Date
    d = CDate("01.01.2010")
    For i =  1  To  31 
        Sheets( 1 ).Cells( 1 , i) = WeekdayName(Weekday(d + i -  1 , vbMonday), True)
        Sheets( 1 ).Cells( 2 , i) = i
    Next i
...
Рейтинг: 0 / 0
19.10.2009, 14:10
    #36259532
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
lopuxi, как вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim i As Integer, dayName As String
Dim MyYear as Integer, MyMonth  as Integer ' эти переменные надо инициализировать
MyYear =  2010 : MyMonth =  1  ' например, вот так
For i =  1  to  31 
   If IsDate(CStr(MyMonth) & "/" & CStr(i) & "/" & CStr(MyYear)) Then ' проверка на существование даты
      Select Case Weekday(DateSerial(MyYear, MyMonth, i), vbMonday) 
         Case  1 : dayName = "пн"
         Case  2 : dayName = "вт"
         Case  3 : dayName = "ср"
         Case  4 : dayName = "чт"
         Case  5 : dayName = "пт"
         Case  6 : dayName = "сб"
         Case  7 : dayName = "вс"
      End Select
      Sheets( 1 ).Cells( 1 , i).Value = i
      Sheets( 1 ).Cells( 2 , i).Value = dayName
   Else
      Exit For
   End If
Next
...
Рейтинг: 0 / 0
19.10.2009, 14:32
    #36259617
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
Неплохо))
Но всегда 31 день.
Как бы сделать его гибким? Что бы он учитывал високосные год в феврале.
и чередовал остальные месяца 30 - 31 день.
...
Рейтинг: 0 / 0
19.10.2009, 14:36
    #36259629
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
.Михаил.lopuxi, как вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim i As Integer, dayName As String
Dim MyYear as Integer, MyMonth  as Integer ' эти переменные надо инициализировать
MyYear =  2010 : MyMonth =  1  ' например, вот так
For i =  1  to  31 
   If IsDate(CStr(MyMonth) & "/" & CStr(i) & "/" & CStr(MyYear)) Then ' проверка на существование даты
      Select Case Weekday(DateSerial(MyYear, MyMonth, i), vbMonday) 
         Case  1 : dayName = "пн"
         Case  2 : dayName = "вт"
         Case  3 : dayName = "ср"
         Case  4 : dayName = "чт"
         Case  5 : dayName = "пт"
         Case  6 : dayName = "сб"
         Case  7 : dayName = "вс"
      End Select
      Sheets( 1 ).Cells( 1 , i).Value = i
      Sheets( 1 ).Cells( 2 , i).Value = dayName
   Else
      Exit For
   End If
Next


воо вот это интересно.
...
Рейтинг: 0 / 0
19.10.2009, 15:31
    #36259814
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
lopuxi,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub test()
Const MyYear =  2010 : Const MyMonth =  4  ' заменить на переменные

Dim days As Integer: days = Day(DateSerial(MyYear, MyMonth +  1 ,  0 ))
    With ActiveSheet
        .Rows("1:2").ClearContents
        .Range("A2") =  1 
        .Range("A2").Resize(, days).DataSeries
        With .Range("A1").Resize(, days)
            .FormulaR1C1 = "=TEXT(DATE(" & MyYear & ", " & MyMonth & ", R[1]C),""ддд"")"  ' м.б. придется "ддд" заменить на "ddd" - для англ. версии Win
            .Value = .Value
        End With
    End With
End Sub
график будет в строках 1:2
...
Рейтинг: 0 / 0
19.10.2009, 16:11
    #36259955
astatsa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
lopuxiНеплохо))
Но всегда 31 день.
Как бы сделать его гибким? Что бы он учитывал високосные год в феврале.
и чередовал остальные месяца 30 - 31 день.

По поводу проверки даты на существование, я думал автор сам догадается или ему нужно все разжевать и выдать готовый код вплоть до мелочей?..
...
Рейтинг: 0 / 0
19.10.2009, 17:16
    #36260228
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
Microsoft Outlook уже не катит?
...
Рейтинг: 0 / 0
20.10.2009, 12:40
    #36261706
lopuxi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой. VBA Excel
astatsalopuxiНеплохо))
Но всегда 31 день.
Как бы сделать его гибким? Что бы он учитывал високосные год в феврале.
и чередовал остальные месяца 30 - 31 день.

По поводу проверки даты на существование, я думал автор сам догадается или ему нужно все разжевать и выдать готовый код вплоть до мелочей?..

Твоя идея тоже хорошая и до думать ее можно было!. Но у меня именно с этим и стояла проблема. Я не мог ни как создать такой график который сам определял високосный год в феврале и правильно определял 31 день в этом месяце или 30.
Поэтому и обратился на этот форум.

.Михаил. - молодец. Проблему решил. Вопрос в общем то можно закрыть :)
Всем большое спасибо! :))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с датой. VBA Excel / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]