如何从VBA返回Arrray

时间:2019-06-09 18:34:31

标签: excel vba

我试图保存一个比较两个数据集并将任何相同数字保存在数组中的函数的结果,但是当我使用该函数时,我只会得到一个数字,而当存在多个相同数字时,将返回该数字。我尝试使用 ctrl + shift + enter 来获取数组公式,但结果是相同的。

Set 1   Set 2    Result
278       278    56
778       778    56
56       1223    56
946        56    56
Function trials(number As Range, numbe As Range)
    Dim c As Range
    Dim savearray() As Variant
    Dim d As Long
    Dim e As Range

    For Each c In Range("a3:a6")
        For Each e In Range("c3:c6")
            If c.Value = e.Value Then
                ReDim Preserve savearray(d)
                savearray(d) = c.Value
                d = d + 1
                trials = savearray
            End If
        Next e
    Next c
End Function

1 个答案:

答案 0 :(得分:0)

我可以在您的代码中看到这些问题:

  1. John Coleman提到的内容-numbernumbe应该用作参数。我建议使用一些更详细的名称,例如rng1rng2
  2. Tim Williams所说的话和引起您的问题的原因是该函数返回一个一维数组,默认情况下该数组提供一行中多个单元格的输出。您需要转置数组才能使用trials = Application.Transpose(savearray)而不是trials = savearray在一列的多个单元格中显示结果。
  3. 第2点的代码应放在End function之前,而不是放在循环中。您只希望将结果传递给函数一次。

最重要的是,为什么很多人无法使用它,是因为您必须首先选择输出单元格,然后输入公式并按 CTRL + SHIFT + ENTER ,不要将数组公式从一个单元格拖到其他单元格。

Function trials(number As Range, numbe As Range)

    Dim c As Range, e As Range
    Dim savearray() As Variant
    Dim d As Long

    For Each c In number
        For Each e In numbe
            If c.Value = e.Value Then
                ReDim Preserve savearray(d)
                savearray(d) = c.Value
                d = d + 1
            End If
        Next e
    Next c

    trials = Application.Transpose(savearray)

End Function