首页 > 解决方案 > 如何在 vba 的 sumproduct 公式中使用两个变量?

问题描述

我在一张纸上有两个表格和三个变量,如下所示

  1. LastSize 为我的第一个表的最后一列的数量
  2. LastMat 用于我的第二个表的最后一列的数量
  3. LastProduct 为我的第一个和第二个表的最后一行的数量(两者相等)

我想在 VBA 的 sumproduct 函数中使用它们,但我不知道如何编写它。

为了帮助您解决我的问题:

"=sumnproduct("LastSize"5:"LastSize""LastProduct" , "to_char(I)"5:"to_char(I)""LastProduct")

标签: vbavariablessyntaxformulasumproduct

解决方案


VBA 没有SUMPRODUCT函数。因此,您必须使用 VBA 的WorksheetFunction方法以该名称调用 Excel 的函数。这是语法。

Dim MyResult As Double
MyResult = WorksheetFunction.Sumproduct([Arg1],[Arg2],[Arg3],[etc])

Excel 要求每个参数都是一个范围,例如=SUMPRODUCT(A2:A1,C2:C15,F2:F15, [etc])您可以使用 VBA 提供的任何方式创建这些范围。这些方法中的任何一种都可以。

Dim Rng1 As Range
Dim Rng2 As Range
Dim Rng3 As Range
Set Rng1 = Range("A2:A15")
Set Rng2 = Range(Cells(2, 3), Cells(15, 3))
Set Rng3 = Range(Cells(2, "F"), Cells(15, "F))

MyResult = WorksheetFunction.Sumproduct(Rng1, Rng2, Rng3)

当然,指定范围的任何或所有参数都可以是变量。

Dim A As String, B As String
A = Cells(1, 1).Value         ' the cell holds a cell or range address or column ID
B = Cells(1, 2). Value
Set Rng1 = Range(A)
Set Rng2 = Range(Cells(2, A), Cells(15, B))
Set Rng3 = Range(Range(A), Range(B))

' or
Dim R As Long, C As Long
R = Cells(Rows.Count, "A").End(xlUp).Row
C = Cells(1, Columns.Count).End(xlToLeft).Column
Set Rng1 = Range(Cells(2, "A"), Cells(R, C))

请注意定义单元格的语法:Cells([Row], [Column]). [Row] 必须始终是一个数字,但 [Column] 可以是一个数字或一个有效的 ID(它是一个字符串)。字符串很难强制转换为地址,执行速度较慢,因为 Excel 必须将它们转换为数字,并且无法计算。因此,建议您在行和列中都使用数字。此类数字的推荐数据类型是Long


推荐阅读