Excel VBA,根据具体的限制sorting

我写了一个Excel VBA代码,但由于某种原因,它不能正常工作。 我有一个特定的长度21(单元格E2)和sotred数字列表下面(图片中的列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,而不是当前范围的值(例如5)。

我可以build议下面的代码?

 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