#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]结束。