小编pla*_*lie的帖子

ROW()函数在SUM()和SUMPRODUCT()中的行为不同

问题定义:

在单元格中输入任意数量A1.现在在第一行的任何地方尝试以下公式.

=SUM(INDIRECT("A"&ROW()))
Run Code Online (Sandbox Code Playgroud)

=SUMPRODUCT(INDIRECT("A"&ROW()))
Run Code Online (Sandbox Code Playgroud)

第一个公式计算,第二个公式给出#VALUE错误.这是由ROW()函数内部表现不同引起的SUMPRODUCT().

在第一个公式中,ROW()返回1.在第二个公式中,行返回{1}(一个长度的数组),即使公式尚未作为CSE公式输入.

为什么会这样?

背景

我需要评估一种类型的公式

=SUMPRODUCT(INDIRECT(*range formed by concatenation and using ROW()*)>1)
Run Code Online (Sandbox Code Playgroud)

这样可以解决错误.作为这个问题的解决方法,我现在计算ROW()在另一个单元格中(显然在同一行中)并在我的内部连接INDIRECT().或者,我也尝试将它封装在sum函数中,就像SUM(ROW())它一样.

如果有人可以解释(或指向一个可以解释的资源),为什么ROW()SUMPRODUCT()没有输入CSE的情况下返回一个数组,我当然会感激.

excel excel-2007 excel-2003 excel-formula

8
推荐指数
1
解决办法
1万
查看次数

VBA - UDF以不同方式处理数组

这段代码是我工作的一小部分.我已将问题缩小到以下部分.我有这个UDF SampleFunction,我需要传递一个数组,{3; 4}作为唯一的参数.

Function SampleFunction(InputVar As Variant) As Integer
    SampleFunction = InputVar(LBound(InputVar))
End Function
Run Code Online (Sandbox Code Playgroud)

我用两种不同的方式称之为UDF.首先,通过VBA

情况1:

Sub testSF()
    MsgBox SampleFunction(Array(3, 4))
End Sub
Run Code Online (Sandbox Code Playgroud)

其次,通过我的excel工作表作为

案例2:

={SampleFunction(ROW(3:4))} - >即作为数组函数.

问题:

UDF适用于案例1,即通过VBA调用#VALUE,当我通过excel工作表调用它时,它为案例2 提供了错误.

我在案例2中使用F8逐步执行该函数.Lbound(InputVar)计算结果为1(这与从案例1中的子句调用不同,它的计算结果为0),但InputVar(Lbound(InputVar))在案例2中显示"下标超出范围"错误.

我想知道的是如何从工作表中调用SampleFunction函数,即Case 2,使其具有与上面显示的Case 1相同的行为.作为奖励,如果有人可以解释为什么Lbound(InputVar)在上述情况下进行不同的评估会很好.

一些其他细节:

我正在构建一个UDF来执行一些正则表达式操作.InputVar上面的论点将是一个数组{x; y; z; ...},指定xth,yth,zth ......出现.数据类型InputVar保留为Variant,因为我希望能够将任意数字(作为一个长度数组),数组或范围(接收并转换为数组)传递给函数.

提前致谢!!

arrays excel vba excel-2003 excel-vba excel-formula

5
推荐指数
1
解决办法
1235
查看次数

标签 统计

excel ×2

excel-2003 ×2

excel-formula ×2

arrays ×1

excel-2007 ×1

excel-vba ×1

vba ×1