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
<代码>结束意味着如果我没记错的话就终止程序。这只是几个我没有发现的愚蠢错误。我们现在都好了。如果你把这个作为答案,我会检查你的!