我写了一个Excel VBA代码,但由于某种原因,它不能完全正常工作。 我有一个特定长度21(单元格E2)和下面的标记数字列表(图中的E列) 代码在E列的每个单元格上运行,并将其值添加到特定总和。如果该单元格的总和较低或等于21(单元格E2),则右侧单元格的数字为“1”。如果它高于21那么我们重新启动总和并再次执行直到我们达到限制(21)并且右边的所有单元格得到数字“2”,依此类推直到列表的结尾。 从图片中可以看出它的工作除了最后一个单元格(黄色),它应该是4而不是3(因为5 + 5 + 5 + 4 + 3 = 22> 21)
我找不到有问题的地方。这是我的代码:
Length = Range("E2").Value
Range("E3").Select
i = 1
sumOfLen = 0
Do Until Selection.Offset(1, 0).Value = Empty
Do Until sumOfLen > Length Or Selection.Value = Empty
Selection.Offset(0, 1).Value = i
sumOfLen = sumOfLen + Selection.Value
Selection.Offset(1, 0).Select
Loop
Selection.Offset(-1, 0).Select
sumOfLen = 0
i = i + 1
Loop
任何帮助都将不胜感激。
答案 0 :(得分:1)
这是因为您将总和重置为0而不是当前Range的值(例如5)。
我可以建议以下代码吗?
Option Explicit
Public Sub doIt()
Dim i As Long
Dim curSum As Long
Dim maxSum As Long
Dim curRange As Range
maxSum = Range("E2").Value
Set curRange = Range("E3")
i = 1
Do While (curRange.Value <> "")
curSum = curSum + curRange.Value
If (curSum > maxSum) Then
i = i + 1
curSum = curRange.Value
End If
curRange.Offset(0, 1).Value = i
Set curRange = curRange.Offset(1, 0)
Loop
End Sub
如果您想保留代码,则需要更改此代码:
sumOfLen = 0
到这个
sumOfLen = Selection.Value