Я пытаюсь написать программу, которая суммирует ежедневные значения в ежемесячных значениях. Трудность, которую я обнаружил, заключалась в том, что каждый месяц имеют разные дни месяца, поэтому я решил, что должен изменить шаги в моем цикле. Моя программа работает нормально, но логика правильных шагов немного выключена.excel vba для шага смены шага
lastrow2 = Range(Sheets("Daily").Cells(5, 3), Sheets("Daily").Cells(5, 3).End(xlDown)).Count
lastcol2 = Range(Sheets("Daily").Cells(5, 3), Sheets("Daily").Cells(5, 3).End(xlToRight)).Count
irow2 = 5
cnt = 5
Set wb = ActiveWorkbook
For j2 = 3 To lastcol1 + 3 'number of columns in the dataset
nextmo:
If Sheets("Daily").Cells(i2, 2) = 1 Or Sheets("Daily").Cells(i2, 2) = 60 Or Sheets("Daily").Cells(i2, 2) = 121 Or Sheets("Daily").Cells(i2, 2) = 182 Or Sheets("Daily").Cells(i2, 2) = 213 Or Sheets("Daily").Cells(i2, 2) = 274 Or Sheets("Daily").Cells(i2, 2) = 335 Then
daysofthemo = 31
ElseIf Sheets("Daily").Cells(i2, 2) = 91 Or Sheets("Daily").Cells(i2, 2) = 152 Or Sheets("Daily").Cells(i2, 2) = 244 Or Sheets("Daily").Cells(i2, 2) = 305 Then
daysofthemo = 30
ElseIf Sheets("Daily").Cells(i2, 2) = 32 Then
daysofthemo = 28
End If
For i2 = cnt To lastrow1 + 5 Step daysofthemo 'number of rows in the dataset
'Will now take the average of one month and paste onto worksheet called "monthly"
Set myRange2 = Range(wb.Worksheets("Daily").Cells(i2, j2), wb.Worksheets("Daily").Cells(i2 + daysofthemo - 1, j2))
If Application.WorksheetFunction.Count(myRange2) > 0 Then
wb.Worksheets("Monthly").Cells(irow2, j2).Value = Application.WorksheetFunction.Average(myRange2)
End If
irow2 = irow2 + 1
cnt = i2 + daysofthemo
goto nextmo
Next i2
Next j2
У меня есть msgbox до и после оператора if. Выход должен быть: 274, 31, 305, 30, 335, 31, 1, 31 и т. Д.
Но прямо сейчас выход: 274, 31, 305, 30, 336, 30, 2, 33 и т. Д.
Только что подумал об этом новом коде, проверен, но все еще не в порядке.
Элементы 'To' и' Step' цикла 'For' оцениваются только один раз в начале цикла, вы не можете изменить их один раз в цикле. –
Как вы вычисляете daysofthemonth? EOmonth помогло бы –
Ваш 'Step' не меняет количество циклов, он меняет приращения, которые он выполняет. – Kyle