Vba 为什么这个程序应该对每一列求和,只在一列之后停止?

Vba 为什么这个程序应该对每一列求和,只在一列之后停止?,vba,excel,excel-2010,Vba,Excel,Excel 2010,该程序创建一个数字表,然后尝试逐行求和。我正在使用IsBlank()测试最上面的单元格是否为空。如果为空,则应结束循环,如果为空,则循环应继续。但是,它在第一次通过循环后继续结束。为什么呢 我觉得这很明显 编辑:我应该注意到,整个“计数器”的东西都在那里,因为如果这起作用的话,我将开始玩它。但它不起作用,所以我在这里 Option Explicit Dim Counter As Long Dim i As Long Dim col As Long Dim row As Long Sub Sum

该程序创建一个数字表,然后尝试逐行求和。我正在使用
IsBlank()
测试最上面的单元格是否为空。如果为空,则应结束循环,如果为空,则循环应继续。但是,它在第一次通过循环后继续结束。为什么呢

我觉得这很明显

编辑:我应该注意到,整个“计数器”的东西都在那里,因为如果这起作用的话,我将开始玩它。但它不起作用,所以我在这里

Option Explicit
Dim Counter As Long
Dim i As Long
Dim col As Long
Dim row As Long

Sub SumRange()
    For col = 1 To 8
        For row = 1 To 6
            Cells(row, col) = Rnd
        Next row
    Next col
    Counter = 6
    For i = 1 To 9
        If IsEmpty(Cells(1, i)) = False Then
            Cells(Counter + 1, i) = Application.WorksheetFunction.Sum(Range(Cells(1, i), Cells(Counter, i)))
        Else
            End If
        End
    Next
    MsgBox Cells(4, 5)
End Sub

有两个问题:

  • End
    语句不正确。如果我没记错的话,
    End
    表示结束程序。您必须明确说明要结束的内容(
    End If
    End With
    ,…)。在这种情况下,您的意思是如果,则结束

  • 您需要使用
    Exit For
    跳出For循环。我想你的意思是,如果语句是正确的,那么它就是你当前的
    结束的地方


  • 我不确定你想做什么,但是你也可以考虑使用条件为<代码>的while循环,而Not IsEmpty(单元格(1,i))< /代码>,然后从循环中增加计数器<代码> i>代码>。对我来说,这感觉比跳转的for循环好一点。

    从代码(只包含这些语句的行)中删除
    Else
    End
    ,循环执行九次

    End
    语句指示VBA。。。结束你的代码。所以它只是存在

    我强烈建议重构您的代码,这样可以提高效率:

    Sub SumRange()
    
      Dim values(1 To 6, 1 To 8) As Double
      Dim i As Long, j As Long
    
      ' populate array
      For i = LBound(values) To UBound(values)
        For j = LBound(values, 2) To UBound(values, 2)
          values(i, j) = Rnd
        Next j
      Next i
    
      ' blast array onto worksheet in one go
      Range("A1").Resize(UBound(values), UBound(values, 2)).value = values
    
      ' add sum formulas in one go
      Range("A1").Resize(, UBound(values, 2)).Offset(UBound(values)).FormulaR1C1 = _
      "=SUM(R[-" & UBound(values) & "]C[0]:R[-1]C[0])"
    
      MsgBox Cells(4, 5)
    End Sub
    

    你的意思是不是说退出而不结束,或者我遗漏了什么?我觉得如果不是空的话(单元格(1,I))
    感觉比如果是空的(单元格(1,I))=False要好。当我将其更改为退出以查看是否已修复时,出现了一个错误。“编译错误:下一步不带For”。它突出显示了程序中的最后一个。是的,我想你的意思是
    End If
    ,而不仅仅是
    End
    <代码>结束意味着如果我没记错的话就终止程序。这只是几个我没有发现的愚蠢错误。我们现在都好了。如果你把这个作为答案,我会检查你的!