VBA如何在不循环的情况下添加单元格值
我读过关于VBA如何在不循环的情况下添加单元格值,vba,excel,Vba,Excel,我读过关于Application.WorksheetFunction.Sum的文章,但我想知道是否存在执行此任务的Range对象的特定方法或属性。我已经调查了Range的成员,但没有发现任何东西 有没有不使用工作表函数进行添加的方法?而且不必在每个细胞中循环。比如: Sub test() Range("A1") = 1 Range("A2") = 0 Range("A3") = 2 Range("A4") = Range("A1:A3").Add MsgB
Application.WorksheetFunction.Sum
的文章,但我想知道是否存在执行此任务的Range对象的特定方法或属性。我已经调查了Range的成员,但没有发现任何东西
有没有不使用工作表函数进行添加的方法?而且不必在每个细胞中循环。比如:
Sub test()
Range("A1") = 1
Range("A2") = 0
Range("A3") = 2
Range("A4") = Range("A1:A3").Add
MsgBox Range("A4")
End Sub
对于输出3.一般来说,还有第三种方法,您没有提到:
Application.Sum
它与工作表function.Sum
稍有不同,因为它更为离散—它不会向MsgBox抛出错误,即使它应该抛出错误。
类似这样的东西在MsgBox
中只会抛出2个错误,并且在即时窗口中会出现2个错误:
Option Explicit
Public Sub WaysOfSumming()
'This is Div/0 Error:
Range("A1").Formula = "=5/0"
Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5)
Debug.Print Application.Sum(Range("A1"), 3, 5)
Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5)
Debug.Print Application.Sum(Range("A1"), 3, 5)
End Sub
一般来说,还有第三种方法,您没有提到:
Application.Sum
它与工作表function.Sum
稍有不同,因为它更为离散—它不会向MsgBox抛出错误,即使它应该抛出错误。
类似这样的东西在MsgBox
中只会抛出2个错误,并且在即时窗口中会出现2个错误:
Option Explicit
Public Sub WaysOfSumming()
'This is Div/0 Error:
Range("A1").Formula = "=5/0"
Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5)
Debug.Print Application.Sum(Range("A1"), 3, 5)
Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5)
Debug.Print Application.Sum(Range("A1"), 3, 5)
End Sub
继续,第四条路:o)
继续,第四条路:o)
Range(“A4”)=Application.WorksheetFunction.Sum(Range(“A1:A3”))
是否如此不一致?如果微软已经为你量身定做了,为什么不使用它呢?我只是想知道是否有比我已经知道的更简单的东西。谢谢您的时间。是不是Range(“A4”)=Application.WorksheetFunction.Sum(Range(“A1:A3”)
太不协调了?如果微软已经为你量身定做了,为什么不使用它呢?我只是想知道是否有比我已经知道的更简单的东西。谢谢你的时间。不错,一点也不坏:DBtw,我不确定你是否真的需要转置
。类似这样的方法也应该有效:?求值(join(数组(3,44,5),“+”))
您需要从范围中转置,但不需要从定义为这样的数组中转置。您可以只说evaluate(“3+44+5”)
但如果不使用范围,似乎没有意义:)实际上,有趣的是,如果需要对同一行上的值求和,应该使用两次Application.Transpose
。这样:?evaluate(join(application.transpose(application.transpose(Range)(“G2:I2”).Value)),“+”)
还有阶乘方法的日志:)=EXP(LN(FACT(A1:A3))
不错,一点也不坏:DBtw,我不确定您是否真的需要transpose
。类似这样的方法也应该有效:?求值(join(数组(3,44,5),“+”))
您需要从范围中转置,但不需要从定义为这样的数组中转置。您可以只说evaluate(“3+44+5”)
但如果不使用范围,似乎没有意义:)实际上,有趣的是,如果需要对同一行上的值求和,应该使用两次Application.Transpose
。这样:?求值(join(application.transpose(application.transpose(Range)(“G2:I2”).Value)),“+”)
还有阶乘方法的日志:)=EXP(LN(FACT(A1:A3))