До тех пор, пока с определенной функцией
Я пытаюсь изучить VBA для своей работы. К сожалению, у меня нет времени на прохождение курса, поэтому я надеюсь изучить логику, выполнив некоторые задачи.
У меня StockOH в одной ячейке (D2
) и я хочу знать, сколько дней продаж я могу покрыть. Дни продаж записываются в столбец E (начиная с ячейкиE2
- E1
это название).
Я использую цикл "Сделать до", который должен заканчиваться, когда сумма продаж в E2:E(i)
выше чем D2
.
Sub Loop_until()
Dim i As Integer
i = 1
Dim x
Set x = Range("G2")
Range("G2") = "=SUM(R[2]C[5]:R[2+i]C[5]"
Do Until Range(D2).Value < x
Range(F2).Value = i
i = i + 1
Loop
End Sub
2 ответа
Просто зацикливайтесь E
столбец, в каждой строке проверьте, не превышает ли значение D2
ценность.
Что-то вроде этого:
' get value ine cell D2
Dim d2value As Double
d2value = Cells(2, 4).Value
' get last row in E column
Dim lastRow As Long
lastRow = Cells(Rows.Count, 5).End(xlUp).Row
' define sum
Dim sumInE As Double
sumInE = 0
' loop over E column
Dim i As Long
For i = 2 to lastRow
sumInE = sumInE + Cells(i, 5).Value
If sumInE > d2value Then
Exit For
End If
Next
MsgBox i
Следуя первой проблеме, я попытался добавить еще один цикл, чтобы просмотреть все значения для StockOh в столбце D. Обычно после этого он находит i для первого числа в D2, я хочу повторить итерацию для значений в D3, D4, ... думаю проблема где-то с использованием "выхода из цикла" но увидим.
ЭТО ДОПОЛНИТЕЛЬНЫЙ ВОПРОС. Дайте мне знать, нужно ли мне открыть новую нить.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' get last row in E column
Dim lastRow As Long
lastRow = Cells(Rows.Count, 5).End(xlUp).Row
' get last row in D column
Dim lastRow_stock As Long
lastRow_stock = Cells(Rows.Count, 4).End(xlUp).Row
Dim i, stock, y As Integer
' define sum
Dim sumInE As Double
sumInE = 0
'Define counter
y = 0
'loop over D coloumn
For stock = 2 + y To lastRow_stock
'Loop over E coloumn
For i = 2 To lastRow
'Get value in coloumn D
Dim d2value As Double
d2value = Cells(stock, 4).Value
sumInE = sumInE + Cells(i, 5).Value
If sumInE > d2value Then
Cells(stock, 6).Value = i
Exit For
End If
MsgBox (y)
y = y + 1
Next
Next stock
End Sub