Excel помещает все даты в диапазон в ячейках - PullRequest
0 голосов
/ 27 февраля 2012

Я не знаю, правильное ли это место, чтобы спросить об этом, но я видел, как другие задавали вопросы по Excel здесь.

Как мне заставить Excel поместить все месяцы и годы между двумя диапазонами дат.

Как например, мой диапазон дат - март 2004 - декабрь 2008, поэтому Excel должен вернуть

March 2004
April 2004
May 2004
...
November 2008
December 2008

В каждой ячейке столбца должны быть все месяцы / годы между двумя датами.

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

В Windows Excel 2010 вы можете просто ввести «Март 2004» в ячейку и перетащить вниз, насколько это необходимо, и оно будет увеличиваться на месяц. Для меня это изменило формат так, чтобы он выглядел как «март-2004», но затем вы можете отформатировать ячейки в произвольном формате «мммм гггг», чтобы получить точный формат выше. Чтобы сделать пользовательский формат, просто щелкните правой кнопкой мыши ячейки с датами ... о, подождите, вы можете щелкнуть правой кнопкой мыши? Итак, откройте диалоговое окно «Формат ячеек», выберите вкладку «Число», затем «Пользовательский» в нижней части списка и введите формат в поле «Тип» в верхней части.

Или вы хотели что-то более автоматизированное, чем это?

1 голос
/ 27 февраля 2012

Решение Дуга, несомненно, самый простой способ получить столбец месяцев. Однако, если вы хотите решение VBA, есть одно ниже. Вы не говорите, почему не можете кодировать такую ​​процедуру самостоятельно. Я решил, что было проще написать код, чем спросить то, что вы не знали. Спросите, не понимаете ли вы, что делает этот код.

Option Explicit
Sub TestDataRange()

  Call OutputDateRange("Sheet1", 2, 2, DateValue("1 Mar 2004"), _
                                       DateValue("1 Apr 2008"))

End Sub
Sub OutputDateRange(ByVal WShtName As String, ByVal RowTop As Long, _
                    ByVal Col As Long, ByVal DateFirst As Date, _
                    ByVal DateLast As Date)

  Dim DateCrnt As Date

  DateCrnt = DateFirst

  With Sheets(WShtName)
    Do While True
      With .Cells(RowTop, Col)
        .Value = DateCrnt
        .NumberFormat = "mmmm yyyy"
      End With
      DateCrnt = DateAdd("m", 1, DateCrnt)
      If DateCrnt > DateLast Then
        Exit Do
      End If
      RowTop = RowTop + 1
    Loop
  End With

End Sub
...