2016-07-05 4 views
0

Я пытаюсь написать программу, которая суммирует ежедневные значения в ежемесячных значениях. Трудность, которую я обнаружил, заключалась в том, что каждый месяц имеют разные дни месяца, поэтому я решил, что должен изменить шаги в моем цикле. Моя программа работает нормально, но логика правильных шагов немного выключена.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 и т. Д.

Только что подумал об этом новом коде, проверен, но все еще не в порядке.

+0

Элементы 'To' и' Step' цикла 'For' оцениваются только один раз в начале цикла, вы не можете изменить их один раз в цикле. –

+0

Как вы вычисляете daysofthemonth? EOmonth помогло бы –

+0

Ваш 'Step' не меняет количество циклов, он меняет приращения, которые он выполняет. – Kyle

ответ

0
intDaysInMonth=DateDiff("d", DateSerial(Year(dtDate), Month(dtDate), 1), WorksheetFunction.EoMonth(dtDate, 0)) + 1