执行直到使用定义的函数

Do until with a defined function

我正在尝试为我的工作学习一些 VBA。不幸的是,我没有时间学习课程,所以我希望通过执行一些任务来学习逻辑。

我在一个单元格中有 StockOH (D2),我想知道我可以完成多少天的销售。销售天数记录在 E 列中(从单元格 E2 开始 - E1 是标题)。

我正在使用 "Do Until" 循环,当 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

只需遍历 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

在第一个问题之后,我尝试添加另一个循环来遍历列 D 中 StockOh 的所有值。基本上之后,它找到了 D2 中第一个数字的 i,我想重复迭代D3、D4 中的值...我认为问题出在使用 "Exit loop" 的某个地方,但会看到。

这是一个附加问题,让我知道是否应该打开一个新线程。

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