Arrays Excel VBA-数组公式返回#值!(错误2015)如果单元格包含255个字符以上

Arrays Excel VBA-数组公式返回#值!(错误2015)如果单元格包含255个字符以上,arrays,excel,vba,array-formulas,Arrays,Excel,Vba,Array Formulas,亲爱的各位,我正在使用数组公式并将结果传递给VBA宏,这意味着公式的结果将作为数组传递给我的宏 在某些情况下,我在数组中得到一个#值(错误2015),但我不知道为什么。当我在受影响的单元格中使用arround,从中获取数据时,当单元格中有相当多的字符(~3000个字符)时,就会发生这种情况 有人知道我能解决这个问题吗 公式: {=arrayToCSV(removeElementsFrom2DimArray(IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$20

亲爱的各位,我正在使用数组公式并将结果传递给VBA宏,这意味着公式的结果将作为数组传递给我的宏

在某些情况下,我在数组中得到一个#值(错误2015),但我不知道为什么。当我在受影响的单元格中使用arround,从中获取数据时,当单元格中有相当多的字符(~3000个字符)时,就会发生这种情况

有人知道我能解决这个问题吗

公式:

{=arrayToCSV(removeElementsFrom2DimArray(IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)))}
IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)
部分返回类似于
{FALSE,FALSE,FALSE…Value,Value,FALSE,…}的数组
。我将这个函数传递给我的mVBA函数
removeElementsFrom2DimArray
,以删除假元素

现在看来,
IF('sheet'!$G$1:$G$2000=A1;'sheet'!$F$1:$F$2000)
在某些情况下返回一些元素的值(Error 2015),即
{FALSE,FALSE,FALSE…#VALUE!,VALUE,FALSE,}

Function removeElementsFrom2DimArray(ByRef arr() As Variant, Optional value As Variant = False) As String()
    On Error GoTo ErrorHandler
    Dim coll As New Collection
    Dim i As Integer
    If (IsArray(arr)) Then
      For i = 1 To UBound(arr, 1)
            If (arr(i, 1) <> value) Then   --> Here happens the error that arr(i, 1) return #VALUE! Error 2015. Why?
                coll.Add (arr(i, 1))
            End If
      Next i
     End If
     removeElementsFrom2DimArray = collectionToArray(coll)
     Exit Function
     ErrorHandler:
        MsgBox Err.Description
        Resume
   End Function
函数removeElementsFrom2diArray(ByRef arr()作为变量,可选值作为Variant=False)作为字符串()
关于错误转到错误处理程序
Dim coll作为新系列
作为整数的Dim i
如果(IsArray(arr))那么
对于i=1至UBound(arr,1)
如果是(arr(i,1)值),则-->此处发生错误,arr(i,1)返回#值!2015年的错误。为什么?
集合添加(arr(i,1))
如果结束
接下来我
如果结束
RemoveElementsFrom2diArray=集合到阵列(coll)
退出功能
错误处理程序:
MsgBox错误说明
简历
端函数
更新

  • 我试图修改以将arr作为
    变量
    ByVal
    传递。这没有任何区别

  • 我试图修改以将arr作为数组传递
    arr()
    ,包括
    ()
    。这没有任何区别

  • 如果我减少受影响单元格中的字符数
    “sheet”$F$1:$F$2000
    到256个字符以下,它就可以工作了

  • 如果我只使用公式
    {=If(sheet!$G$1:$G$2000=A1;sheet!$F$1:$F$2000)}
    (数组公式),那么它也可以工作

所以我假设在将数组从本机公式传递到自己的函数时存在限制?因此,数组中超过255个字符的值将通过#VALUE传递!错误


有什么想法吗?我使用的是Excel 2010 Plus(v14.0.7)

我曾在某个地方读到数组只能包含350个非零数字,因此我猜这与大小限制有关。您可以在出现问题的行之前添加错误测试。请参阅以获取多个方法。测试错误,例如IsError(arr(i,1))--请参阅源代码中的注释--实际上没有帮助,因为我需要单元格中的数据进行进一步处理。跳过数组公式并在UDF中处理整件事可能更容易。有三件事。1.可能变量Byref Arr()的参数不应包含()。2.collection2Array函数是什么样子的?3.可能所讨论的单元格包含Excel错误,因此不使用值,而是根据CStr(值)进行测试