excel vba中的自定义函数,用于查找返回多个匹配值的范围中的单元格值,并将它们组合在一个单元格中

时间:2015-08-14 19:32:36

标签: excel-vba vba excel

我正在尝试在excel vba中编写自定义函数,该函数在返回多个匹配值的范围内查找单元格值,并将它们组合在一个单元格中。 它返回值 #VALUE 中的错误。

我正在尝试让用户使用此功能,因为写一个sub来做到这一点工作正常。

    Function LookUpMoreThanOneResult(LookUpFor As Range, LookUpAt As Range, col As Integer) As Range


Dim Findings As Range


For Each LookUpFor In LookUpFor.Cells

        For Each LookUpAt In LookUpAt.Cells

            If LookUpFor.Value = LookUpAt.Value Then

            Findings.Value = Findings.Value & vbCrLf & LookUpAt.Offset(0, col).Value
            End If


        Next LookUpAt

    Next LookUpFor

LookUpMoreThanOneResult = Findings

End Function

'below is the sub that works fine

Sub look()

Worksheets(1).Activate

Dim ref As Range

Dim arr As Range
Dim va As Range

Set ref = Range("j2:j7595")
Set arr = Worksheets(2).Range("d2:d371")

Dim r As Range
Dim a As Range


For Each r In ref.Cells

        For Each a In arr.Cells

            If r.Value = a.Value Then
            r.Offset(0, 11).Value = r.Offset(0, 11).Value & vbCrLf & a.Offset(0, 6).Value
            End If


        Next a

    Next r

End Sub

1 个答案:

答案 0 :(得分:0)

这就是答案,这里我不应该重复LookUpFor单元的循环,并且函数的返回值应该是String。 所以它现在很好,用户可以使用它。

Function LookUpMoreThanOneResult(LookUpFor As Range, LookUpAt As Range, col As Integer) As String

Dim R As Range

        For Each R In LookUpAt

            If LookUpFor.Value = R.Value Then

            LookUpMoreThanOneResult = LookUpMoreThanOneResult & vbCrLf & R.Offset(0, col).Value
            End If

        Next R


End Function