VBA对另一工作簿中的每列求和
你好, 我想对另一个工作簿中的每一列求和(参见示例) 我做了下面的代码:VBA对另一工作簿中的每列求和,vba,excel,Vba,Excel,你好, 我想对另一个工作簿中的每一列求和(参见示例) 我做了下面的代码: Function sumrange(rng As Range) Summ = 1 For Each cell In rng Do While cell <> "" Summ = Summ + cell.Value Loop Next sumrange = Summ End Function sub test() x = sumrange(Workbook
Function sumrange(rng As Range)
Summ = 1
For Each cell In rng
Do While cell <> ""
Summ = Summ + cell.Value
Loop
Next
sumrange = Summ
End Function
sub test()
x = sumrange(Workbooks("Clients").Worksheets("Numbers").Range("A:A"))
thisworkbook.worksheets("Result").cells(1,1)=x
MsgBox x
end sub
功能范围(rng As范围)
总和=1
对于rng中的每个单元
在单元格“”中执行此操作
总和=总和+单元格值
环
下一个
sumrange=sum
端函数
子测试()
x=sumrange(工作手册(“客户”)。工作表(“数字”)。范围(“A:A”))
此工作簿。工作表(“结果”)。单元格(1,1)=x
MsgBox x
端接头
但是我不知道如何循环遍历每一列(将有两列以上),它会阻塞,因为第一个单元格包含一个字符串:error,我如何定义它应该从第二个单元格开始到结束?您可以使用
IsNumeric
函数来决定是否将单元格的值添加到总和:
Function SumRange(rng As Range)
Dim dblSum As Double
Dim rngCell As Range
For Each rngCell In rng
If VBA.IsNumeric(rngCell.Value) Then
dblSum = dblSum + CDbl(rngCell.Value)
End If
Next rngCell
SumRange = dblSum
End Function
如果您迭代列A
中的所有单元格,并且只有少数条目,那么这可能会非常慢。以下增强功能还检查单元格是否为空,如果是空的,则退出循环-否则,空单元格的计算结果可能为零:
Function SumRange(rng As Range)
Dim dblSum As Double
Dim rngCell As Range
For Each rngCell In rng
If VBA.IsEmpty(rngCell.Value) Then
Exit For
ElseIf VBA.IsNumeric(rngCell.Value) Then
dblSum = dblSum + CDbl(rngCell.Value)
End If
Next rngCell
SumRange = dblSum
End Function
您可以使用IsNumeric
函数来决定是否将单元格的值添加到总和:
Function SumRange(rng As Range)
Dim dblSum As Double
Dim rngCell As Range
For Each rngCell In rng
If VBA.IsNumeric(rngCell.Value) Then
dblSum = dblSum + CDbl(rngCell.Value)
End If
Next rngCell
SumRange = dblSum
End Function
如果您迭代列A
中的所有单元格,并且只有少数条目,那么这可能会非常慢。以下增强功能还检查单元格是否为空,如果是空的,则退出循环-否则,空单元格的计算结果可能为零:
Function SumRange(rng As Range)
Dim dblSum As Double
Dim rngCell As Range
For Each rngCell In rng
If VBA.IsEmpty(rngCell.Value) Then
Exit For
ElseIf VBA.IsNumeric(rngCell.Value) Then
dblSum = dblSum + CDbl(rngCell.Value)
End If
Next rngCell
SumRange = dblSum
End Function
从第二个单元格开始,在函数中指定列,并按如下方式调用
Function sumrange(rng As Range, c as integer)
dim summ as integer
dim I as integer
dim cell as integer
Summ = 1
'Wouldn't you want to start at 0 for your sum?
for i = 2 to 50,000
cell = rng.cells(i,c)
Summ = Summ + cell
Next
sumrange = Summ
End Function
sub test()
x = sumrange(Workbooks("Clients").Worksheets("Numbers").Range("A:A"),'column#')
thisworkbook.worksheets("Result").cells(1,1)=x
MsgBox x
end sub
从第二个单元格开始,在函数中指定列,并按如下方式调用
Function sumrange(rng As Range, c as integer)
dim summ as integer
dim I as integer
dim cell as integer
Summ = 1
'Wouldn't you want to start at 0 for your sum?
for i = 2 to 50,000
cell = rng.cells(i,c)
Summ = Summ + cell
Next
sumrange = Summ
End Function
sub test()
x = sumrange(Workbooks("Clients").Worksheets("Numbers").Range("A:A"),'column#')
thisworkbook.worksheets("Result").cells(1,1)=x
MsgBox x
end sub
您可以使用内置的sum函数在不循环的情况下对范围求和
例如:
Sub test()
Dim LastRow As Long
'open the other workbook , clients
Set book = Workbooks.Open("clients.xlsx")
'get last raw starting from B2 down to the last filled cell
LastRow = book.Worksheets("Numbers").Range("B2").End(xlDown).Row
Debug.Print LastRow
Set range2 = book.Worksheets("sheet1").Range("B1:B" & LastRow)
sum1 = Application.WorksheetFunction.Sum(range2)
Debug.Print sum1
'write result to active sheet
ThisWorkbook.Worksheets("result").Cells(1, 1) = sum1
End Sub
您可以使用内置的sum函数在不循环的情况下对范围求和
例如:
Sub test()
Dim LastRow As Long
'open the other workbook , clients
Set book = Workbooks.Open("clients.xlsx")
'get last raw starting from B2 down to the last filled cell
LastRow = book.Worksheets("Numbers").Range("B2").End(xlDown).Row
Debug.Print LastRow
Set range2 = book.Worksheets("sheet1").Range("B1:B" & LastRow)
sum1 = Application.WorksheetFunction.Sum(range2)
Debug.Print sum1
'write result to active sheet
ThisWorkbook.Worksheets("result").Cells(1, 1) = sum1
End Sub
使用SpecialCells
对象的Range
方法仅对数字求和
如果数字仅为“常量”(例如:非公式推导),则使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
如果数字仅来自公式,则使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
最后,数字可以是常数,也可以来自公式,然后使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
使用SpecialCells
对象的Range
方法仅对数字求和
如果数字仅为“常量”(例如:非公式推导),则使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
如果数字仅来自公式,则使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
最后,数字可以是常数,也可以来自公式,然后使用:
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
End Function
Function sumrange(rng As Range) As Double
On Error Resume Next
sumrange = WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeFormulas, xlNumbers))
sumrange = sumrange + WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeConstants, xlNumbers))
End Function
在这种情况下,如何在sub中调用它?因为ig i put Range(“A:A”)它从a2开始就不起作用,你可以将它与Range(“A:A”)
一起使用,因为它将跳过标题(以及任何其他非数字单元格值),因为IsNumeric
测试。它必须转到下一行,不要退出循环,否则它只会给我0。我如何定义它呢?第一个函数的执行确实花费了很多时间。第二个解决方案是正确的,但空的条件应转到下一个单元格,而不是退出VBA。第二个示例仅退出空单元格的循环。它不会退出标题上的循环,例如错误
。你试过了吗?在这种情况下,我怎么能在潜艇里叫它?因为ig i put Range(“A:A”)它从a2开始就不起作用,你可以将它与Range(“A:A”)
一起使用,因为它将跳过标题(以及任何其他非数字单元格值),因为IsNumeric
测试。它必须转到下一行,不要退出循环,否则它只会给我0。我如何定义它呢?第一个函数的执行确实花费了很多时间。第二个解决方案是正确的,但空的条件应转到下一个单元格,而不是退出VBA。第二个示例仅退出空单元格的循环。它不会退出标题上的循环,例如错误
。你试过了吗?@JeanLo你试过这个吗?@JeanLo:你能把feedbakcs给那些想要帮助的人真是太好了you@JeanLo你试过这个吗?@JeanLo:你能把feedbakcs给那些试图帮助你的人真是太好了