Excel VBA,根据特定限制排序

时间:2015-02-21 22:42:38

标签: excel vba excel-vba

我写了一个Excel VBA代码,但由于某种原因,它不能完全正常工作。 我有一个特定长度21(单元格E2)和下面的标记数字列表(图中的E列) 代码在E列的每个单元格上运行,并将其值添加到特定总和。如果该单元格的总和较低或等于21(单元格E2),则右侧单元格的数字为“1”。如果它高于21那么我们重新启动总和并再次执行直到我们达到限制(21)并且右边的所有单元格得到数字“2”,依此类推直到列表的结尾。 从图片中可以看出它的工作除了最后一个单元格(黄色),它应该是4而不是3(因为5 + 5 + 5 + 4 + 3 = 22> 21)

enter image description here

我找不到有问题的地方。这是我的代码:

   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

任何帮助都将不胜感激。

1 个答案:

答案 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