2014-02-13 4 views
3

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

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Range("A1").Value 
LastDate = Range("a2").Value 

NextDate = FirstDate 
Range("B1").Select 

Do Until NextDate >= LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 

    If Day(NextDate) = 1 Then 
     NextDate = DateAdd("d", NextDate, 14) 
    Else 
     NextDate = DateAdd("d", NextDate, 20) 
     NextDate = DateSerial(Year(NextDate), Month(NextDate), 1) 
    End If 

Loop 

Предыдущий код, который я основывал мою модель на указанный выше, и мой, скорее всего, ужасный код, ниже:

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 

NextDate = FirstDate 
Range("tripdays").Select 
'selection of columns within one row 
Do Until NextDate >= LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 

    If Day(NextDate) = 1 Then 
     NextDate = DateAdd("d", NextDate, 14) 

    End If 

Loop 

End Sub 

Что мне нужно вместо этого генерировать каждый даты между учитывая даты начала и окончания, а не только 15-го и 1-го. Как это делается?

+0

Что именно вам нужно? Мы не знаем, что вы хотите сделать с его кодом. Если вы в основном настраиваете его на именованные диапазоны, вам не нужно удалять блок «Else» из его кода. Добавьте это и отрегулируйте свои диапазоны. :) – Manhattan

+0

Вместо каждой даты отделены друг от друга на 1-й и 15-я хочу выход быть каждый дата между диапазоном, так: дата Start = 1/1/2014 End Date = 1/6/2014 Выход = 1/1/2014 1/2/2014 1/3/2014 1/4/2014 1/5/2014 1/6/2014 ..... Также, как я правильно делаю седину для код, как вы там? Я буквально начал использовать VBA около недели назад, поэтому я надеюсь учиться и иметь возможность вносить вклад в других людей в будущем. – Chardo

+0

Теперь это лучше. Изменение моего ответа ниже. Подождите несколько. – Manhattan

ответ

4

EDIT:

Это, очевидно, что вам нужно, как описано в комментариях.

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 

NextDate = FirstDate 
Range("tripdays").Select 
'selection of columns within one row 
Do Until NextDate > LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 
    NextDate = NextDate + 1 

Loop 

End Sub 

В качестве альтернативы, петля For будет делать то же самое.

Скриншот:

enter image description here

ДАЛЕЕ EDIT:

Горизонтальное исполнение, в соответствии с просьбой.

Sub GenerateDatesH() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim DateOffset As Range 
Dim DateIter As Date 

FirstDate = Range("startdate").Value 
LastDate = Range("enddate").Value 
Set DateOffset = Range("tripdays") 

For DateIter = FirstDate To LastDate 
    DateOffset.Value = DateIter 
    Set DateOffset = DateOffset.Offset(0, 1) 
Next DateIter 

End Sub 

Скриншот:

enter image description here

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

+0

Большое вам спасибо! У меня еще два вопроса, которые у меня возникли, будет очень легко для вас. Есть ли способ сделать вывод горизонтальным, а не вниз? Кроме того, есть ли способ сделать последнюю дату конечной датой? – Chardo

+0

Подходит. Подождите, я добавлю вариант. :) – Manhattan

+0

@ user3297480: См. Код под ** Дальнейшее редактирование **. – Manhattan

1

Избегайте использования в коде выбора это очень неэффективно :)

Sub p() 
Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim r As Long 
FirstDate = Range("A1").Value 
LastDate = Range("a2").Value 
r = 1 
Do 
FirstDate = FirstDate + 1 
Cells(r, 2) = FirstDate 
r = r + 1 
Loop Until FirstDate = LastDate 
End Sub 

сделать это в строке заменить клетки (г, 2) клетками (1, г) и начать г = 2

Смежные вопросы