【问题标题】:Perform a search and get all of the matches执行搜索并获取所有匹配项
【发布时间】:2013-10-30 12:05:52
【问题描述】:

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

    A         B         C       D
1   Name    Gender  Subject Commentary
2   Anne    Female  Maths   
3   Anne    Female  English 
4   Anne    Female  Science whatever...
5   Anne    Female  Maths   
6   Anne    Female  English 
7   Anne    Female  Science blah, blah 
8   Kath    Female  Maths   
9   Kath    Female  English 
10  Kath    Female  Science 
11  Tony    Male    Maths   etc...
12  Tony    Male    English 
13  Tony    Male    Science blah, blah

我使用 COUNTIFS 解决了它:

=COUNTIFS(Sheet1!A1:A13,"Anne",D1:D13,"*")

但现在我需要搜索所有 Anne+Science 评论并在结果单元格中检索它们的连接方式,这样:“随便....废话,废话。”

怎么办?
如果没有办法使用公式,如何使用VBA?

【问题讨论】:

  • @pnuts answer 无需任何 VBA 即可完成。使用 VBA,您可以使用简单的范围迭代并根据条件连接字符串(Dick 的答案就是这样做的),或者使用 AutoFilter 并在 D 列中连接 SpecialCells(xlCellTypeVisible)。

标签: vba excel excel-formula pivot-table


【解决方案1】:
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(Sheet2!A1:D49,"*",M3) 的问题
  • 是的,它适用于其他工作表。我只是将“=”更改为“喜欢”,以便您可以使用星号。如前所述,它不适用于星号。
【解决方案2】:

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

编辑

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多