Vba 执行搜索并获取所有匹配项

Vba 执行搜索并获取所有匹配项,vba,excel,excel-formula,pivot-table,Vba,Excel,Excel Formula,Pivot Table,让我们举一个例子,问题是:“安妮有多少次科学评论”?(回答:2次) 我用COUNTIFS解决了这个问题: =COUNTIFS(Sheet1!A1:A13,"Anne",D1:D13,"*") 但现在我需要搜索所有的Anne+科学评论,并在一个结果单元格中检索它们,方式是:“随便……等等,等等。” 怎么做呢? 如果无法使用公式,如何使用VBA?您可以使用数据透视表并将结果连接到其中,如图所示: 编辑 我应该解释一下,如果有许多条目,请在I7中使用=I6&“,”&F7,向下复制以适应并选择系列中

让我们举一个例子,问题是:“安妮有多少次科学评论”?(回答:
2次)

我用COUNTIFS解决了这个问题:

=COUNTIFS(Sheet1!A1:A13,"Anne",D1:D13,"*")
但现在我需要搜索所有的Anne+科学评论,并在一个结果单元格中检索它们,方式是:“随便……等等,等等。”

怎么做呢?

如果无法使用公式,如何使用VBA?

您可以使用数据透视表并将结果连接到其中,如图所示:

编辑


我应该解释一下,如果有许多条目,请在I7中使用
=I6&“,”&F7
,向下复制以适应并选择系列中的最后一个。

您可以使用数据透视表并将结果连接到其中,如图所示:

Public Function Commentary(rSource As Range, sName As String, sSubject As String) As String

    Dim vaSource As Variant
    Dim i As Long
    Dim lCnt As Long
    Dim aOutput() As String

    vaSource = rSource.Value

    For i = LBound(vaSource, 1) To UBound(vaSource, 1)
        If vaSource(i, 1) Like sName And vaSource(i, 3) Like sSubject Then
            lCnt = lCnt + 1
            ReDim Preserve aOutput(1 To lCnt)
            aOutput(lCnt) = vaSource(i, 4)
        End If
    Next i

    Commentary = Join(aOutput, "|")

End Function

编辑


我应该解释一下,如果有许多条目,请在I7中使用
=I6&“,”&F7
,向下复制以适应并选择系列中的最后一个。

您可以使用数据透视表并将结果连接到其中,如图所示:

Public Function Commentary(rSource As Range, sName As String, sSubject As String) As String

    Dim vaSource As Variant
    Dim i As Long
    Dim lCnt As Long
    Dim aOutput() As String

    vaSource = rSource.Value

    For i = LBound(vaSource, 1) To UBound(vaSource, 1)
        If vaSource(i, 1) Like sName And vaSource(i, 3) Like sSubject Then
            lCnt = lCnt + 1
            ReDim Preserve aOutput(1 To lCnt)
            aOutput(lCnt) = vaSource(i, 4)
        End If
    Next i

    Commentary = Join(aOutput, "|")

End Function

编辑


我应该解释一下,如果有许多条目,请在I7中使用
=I6&“,”&F7
,向下复制以适应并选择系列中的最后一个。

您可以使用数据透视表并将结果连接到其中,如图所示:

Public Function Commentary(rSource As Range, sName As String, sSubject As String) As String

    Dim vaSource As Variant
    Dim i As Long
    Dim lCnt As Long
    Dim aOutput() As String

    vaSource = rSource.Value

    For i = LBound(vaSource, 1) To UBound(vaSource, 1)
        If vaSource(i, 1) Like sName And vaSource(i, 3) Like sSubject Then
            lCnt = lCnt + 1
            ReDim Preserve aOutput(1 To lCnt)
            aOutput(lCnt) = vaSource(i, 4)
        End If
    Next i

    Commentary = Join(aOutput, "|")

End Function

编辑

我应该解释一下,如果有许多条目,请在I7中使用
=I6&“,”&F7
,向下复制以适应并选择系列中的最后一个条目

Public Function Commentary(rSource As Range, sName As String, sSubject As String) As String

    Dim vaSource As Variant
    Dim i As Long
    Dim lCnt As Long
    Dim aOutput() As String

    vaSource = rSource.Value

    For i = LBound(vaSource, 1) To UBound(vaSource, 1)
        If vaSource(i, 1) Like sName And vaSource(i, 3) Like sSubject Then
            lCnt = lCnt + 1
            ReDim Preserve aOutput(1 To lCnt)
            aOutput(lCnt) = vaSource(i, 4)
        End If
    Next i

    Commentary = Join(aOutput, "|")

End Function

=Commentary(A1:D13,"Anne","Science")

=Commentary(A1:D13,"Anne","Science")

=Commentary(A1:D13,"Anne","Science")

=Commentary(A1:D13,"Anne","Science")

@pnuts答案将在没有任何VBA的情况下完成。使用VBA,您可以使用一个简单的范围迭代并根据条件连接字符串(Dick的答案会这样做),或者使用
AutoFilter
并连接D列中的
SpecialCells(xlCellTypeVisible)
。@pnuts-answer将在没有任何VBA的情况下完成此操作。使用VBA,您可以使用一个简单的范围迭代并根据条件连接字符串(Dick的答案会这样做),或者使用
AutoFilter
并连接D列中的
SpecialCells(xlCellTypeVisible)
。@pnuts-answer将在没有任何VBA的情况下完成此操作。使用VBA,您可以使用一个简单的范围迭代并根据条件连接字符串(Dick的答案会这样做),或者使用
AutoFilter
并连接D列中的
SpecialCells(xlCellTypeVisible)
。@pnuts-answer将在没有任何VBA的情况下完成此操作。使用VBA,您可以使用一个简单的范围迭代并根据条件连接字符串(Dick的答案就是这样做的),或者使用
AutoFilter
并连接D列中的
SpecialCells(xlCellTypeVisible)
。这是否适用于另一个工作表的范围?:我对=注释(Sheet2!A1:D49,“*”,M3)有问题,它将在其他纸张上工作。我刚把“=”改为“喜欢”,这样你就可以用星号了。如前所述,星号不起作用。这是否适用于其他工作表范围?:我在=注释(Sheet2!A1:D49,“*”,M3)方面遇到问题是的,它适用于其他工作表。我刚把“=”改为“喜欢”,这样你就可以用星号了。如前所述,星号不起作用。这是否适用于其他工作表范围?:我在=注释(Sheet2!A1:D49,“*”,M3)方面遇到问题是的,它适用于其他工作表。我刚把“=”改为“喜欢”,这样你就可以用星号了。如前所述,星号不起作用。这是否适用于其他工作表范围?:我在=注释(Sheet2!A1:D49,“*”,M3)方面遇到问题是的,它适用于其他工作表。我刚把“=”改为“喜欢”,这样你就可以用星号了。它不能像前面写的那样使用星号。