Я понятия не имею, что делает ваш код, но попробуйте следующее. Это дает мне ожидаемый результат.
Option Explicit
Sub DivideSomeStuff()
Dim pair As Range, accumulator As Range
Dim findFifteen As Double
Dim remainder As Long
For Each pair In Range("B30, F30, J30")
If Right(pair, 2) = 15 Then
If pair.Offset(0, 2) <= 12 Then
remainder = 0
Else
remainder = pair.Offset(0, 2) Mod 12
End If
findFifteen = (pair.Offset(0, 2) - remainder) / 10
For Each accumulator In Range("A36, D36, G36, J36, M36, A40, D40, G40, J40, M40")
If accumulator.Offset(-1, 0) = Val(Left(pair, InStr(pair, "-") - 1)) Then
accumulator.Value = accumulator.Value + remainder
End If
accumulator.Value = accumulator.Value + findFifteen
Next accumulator
End If
Next pair
End Sub
Вам, вероятно, следует проверить другие значения в ячейке D30
, чтобы убедиться, что вывод по-прежнему правильный / как ожидалось.
Я до сих пор не знаю, что делает ваш код, но если вы измените ячейки B30
, F30
и J30
на вашем листе, чтобы они заканчивались цифрой 7 (например, какой-нибудь текст, например "1-7"
) и изменились NUMBER_TO_CHANGE
к тому же значению (7 в данном случае), тогда я думаю, что код ниже даст ожидаемый результат.
Option Explicit
Sub DivideSomeStuff()
Const NUMBER_TO_CHANGE As Long = 7 ' Change this as needed
Dim remainder As Long
Dim pair As Range
For Each pair In Range("B30, F30, J30")
If Right(pair, Len(CStr(NUMBER_TO_CHANGE))) = NUMBER_TO_CHANGE Then
If pair.Offset(0, 2) <= 12 Then
remainder = 0
Else
remainder = pair.Offset(0, 2) Mod 12
End If
Dim findFifteen As Double
findFifteen = (pair.Offset(0, 2) - remainder) / 10
Dim accumulator As Range
For Each accumulator In Range("A36, D36, G36, J36, M36, A40, D40, G40, J40, M40")
If accumulator.Offset(-1, 0) = Val(Left(pair, InStr(pair, "-") - 1)) Then
accumulator.Value = accumulator.Value + remainder
End If
accumulator.Value = accumulator.Value + findFifteen
Next accumulator
End If
Next pair
End Sub