У меня есть следующий код VBA:For Loop не выполняется должным образом
Sub Find_Max_Yearly_Precip()
Dim Year_Rng As Range
Dim rng As Range
Dim nyear As Integer
Dim nL As Integer
Dim nU As Integer
For nyear = 0 To nyear = 35
'See if its the first loop
If nyear <> 0 Then
'Decide if its a leap year
If nyear = 1 Or nyear = 5 Or nyear = 9 Or nyear = 13 _
Or nyear = 17 Or nyear = 21 Or nyear = 25 Or nyear = 29 _
Or nyear = 33 Then
nL = nU + 1
nU = nL + 366
Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1))
Year_Rng.Select
Else
nL = nU + 1
nU = nL + 365
Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1))
Year_Rng.Select
End If
Else
nL = 2
nU = 366
Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1))
Year_Rng.Select
End If
For Each rng In Year_Rng
If rng.Offset(, 2) = Application.WorksheetFunction _
.Max(Year_Rng.Offset(, 2)) Then
rng.Offset(, 3).Value = "Max"
End If
Next rng
Next
End Sub
И это, кажется, не выполняет цикл For nyear = 0 to nyear = 35
. Он правильно работает для nyear = 0
, но по каким-то причинам идет до nyear =1
, а затем заканчивает подпрограмму. Любые идеи о том, почему он не работает?
Вместо жесткого кодирования в значениях года, можно также определить leapYear путем определения if (nYear MODULUS 4 = 1), то это високосный год. –
Спасибо за подсказку. Раньше я еще не видел MODULUS. Как это работает? – dubbbdan
Модуль в основном вычисляет остаток после деления. Так что если у вас 9 MOD 4, вы получите 1 (потому что остаток 9/4 равен 1). Чтобы использовать функцию в VB, вы должны использовать «9 Mod 4». Или в случае високосного года вы бы сделали If (nYear Mod 4 = 1), то это високосный год. –