#VALUE错误从我的VBAfunction

所以我在VBA中写了一个简单的函数,我想在我的Excel工作簿中使用它。 我写了下面的代码:

Option Explicit Public Function KOLICINA(fiksnacena As Long, ceni() As Long, nedela() As Long) As Long Dim brojac As Integer For brojac = 1 To UBound(nedela) If Not ((IsEmpty(nedela(brojac) Or nedela(brojac) = 0) And ceni(brojac) <> fiksnacena)) Then KOLICINA = nedela(brojac) Next brojac End Function 

当我尝试在工作表单元格中使用它时(使用=KOLICINA(18;G22:G26;H22:H26) ),我得到#VALUE错误。 我不明白为什么。 该函数应该经过nedela数组,如果它发现一个非空或不同于0值,并且如果ceni数组中的匹配单元格不同于数字fiksnacena ,它应该返回nedela单元格的值。

您不能简单地将单元格区域引用传递给UDF,并将其解释为单个维度的long数组。

 Public Function KOLICINA(fiksnacena As Long, ceni As Range, nedela As Range) As Long Dim brojac As Long, vCeni As Variant, vNedela As Variant vCeni = ceni.Value2 vNedela = nedela.Value2 For brojac = LBound(vNedela, 1) To UBound(vNedela, 1) If Not ((IsEmpty(vNedela(brojac, 1) Or vNedela(brojac, 1) = 0) And vCeni(brojac, 1) <> fiksnacena)) Then KOLICINA = vNedela(brojac, 1) Exit For End If Next brojac End Function 

将范围引用的值转储到数组中时,总是以二维数组结束; 在你的例子中是1到5,1到1。

为了进一步说明这一点,如果您在转换后从范围中取值并使用CSE结束UDF,以便将值作为数组处理,那么您的原始UDF代码将起作用。

 =KOLICINA(18, VALUE(TRANSPOSE(G22:G26)), VALUE(TRANSPOSE(H22:H26))) 

用[ctrl] + [shift] + [enter]结束。