2013-07-17 4 views
1

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

Что мне нужно (но наборы из десяти, а не из трех):

3/1/2013 
3/1/2013 
3/1/2013 
3/2/2013 
3/2/2013 
3/2/2013 
3/3/2013 
3/3/2013 
3/3/2013 

код у меня есть:

Sub Macro1() 

Dim v&, MyDate As Date, Cell As Range 

For i = DateValue("3/01/2013") To DateValue("3/31/2013") 
    Set Cell = [A1] 
    For v = 0 To 9 ' 9 means 10 cells 
     Cell.Offset(v, 0).Value = i 
    Next v 
Next i 

End Sub 

Любые предложения того, что мне нужно использовать в коде?

+1

Я пытаюсь понять это. Итак, вы хотите в общей сложности 3 * 31 = 93 строки? – PowerUser

+0

На самом деле это будет 10 * 31 = 310 строк. Я пытался не быть лишним с информацией, объясняя, но забыл включить это. Сожалею. – mnp

ответ

1
Sub Macro1() 
    Dim v&, MyDate As Date, Cell As Range 

    Range("A1").Select 
    Set Cell = [A1] 

    For i = DateValue("3/01/2013") To DateValue("3/31/2013") 
     For v = 0 To 9 
      ActiveCell.Value = i 
      ActiveCell.Offset(1, 0).Select 
     Next v 
    Next i 
End Sub 

Хотя 1/3/13 и 31/3/13 работают лучше для меня.

+1

Отлично! Благодаря! – mnp

1

Не нужно контура.

Sub test() 
    Range("A1") = #3/1/2013# 
    Range("A1:A10").DataSeries 
End Sub 

Обновлено после комментариев

Sub test() 

    Range("A1") = #3/1/2013# 

    For i = 1 To 31 
     lastRow = Range("A" & Rows.Count).End(xlUp).Row + 1 
     If i = 1 Then 
      Range("A1:A" & i * 10) = DateAdd("d", i - 1, #3/1/2013#) 
     Else 
      Range("A" & lastRow & ":A" & i * 10) = DateAdd("d", i - 1, #3/1/2013#) 
     End If 
    Next 

End Sub 
+0

Это определенно хорошо для будущей справки для меня, но есть ли способ для его вывода, чтобы каждая дата появлялась 10 раз подряд, а следующая дата 10 раз подряд (вроде как пример но с 10 вместо 3)? – mnp

+0

@mnp Я обновил ответ в соответствии с вашими требованиями. Пожалуйста, обновите страницу. – Santosh

+0

Лично я считал, что требование к повторению всегда было ясно из OP (хотя я согласен с тем, что x3 или x10 я не вижу очевидного до дальнейших комментариев), но ваша вторая версия работает, поэтому «утешение» +1 от меня. – pnuts

1

Ваш Set Cell = [A1] находится внутри внешнего контура For.

+0

У меня есть еще два правильных ответа, так что считайте здесь еще одну ярмарку. – pnuts

1

Это было отвечено уже, но только потому, что это немного отличается:

Range("A1:A310").Formula = "=DATE(2013,3,1)+INT(ROW()/10.01)" 
    Range("A1:A310").Copy 
    Range("A1").PasteSpecial xlPasteValues 
    Application.CutCopyMode = False 

Он даже может быть сделано в одном шаге (благодаря некоторой помощи со стороны моего коллеги Ханса):

Range("A1:A310").Value = Evaluate("=INDEX(DATE(2013,3,1)+INT(ROW(A1:A310)/10.01),0)") 
+0

+1 Один лайнер интересен. – pnuts