Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA如何在不循环的情况下添加单元格值_Vba_Excel - Fatal编程技术网

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))