查找范围内所有出现的精确字符串并列出它

问题描述 投票:-4回答:1

我想创建范围内所有出现的“x”字符串的列表。这是我的表:

enter image description here

我想搜索所有事件并列出它们并给出正确的名称:例如对于G2,我想要“Beret Gray”字符串作为结果。我认为我需要使用数组公式或类似的东西。

google-sheets google-sheets-api google-sheets-formula
1个回答
1
投票

首先让我先说明vba会更强大,但这个公式会让你到达那里。它可能很慢,因为它是一个数组类型公式,并且正在进行大量计算。这些计算只是随着它们中包含它们的细胞数量的增加呈指数地表达:

=IFERROR(INDEX(A:A,AGGREGATE(15,6,ROW($B$2:$G$7)/($B$2:$G$7="x"),ROW(1:1))) & " " & INDEX($1:$1,AGGREGATE(15,6,COLUMN(INDEX(A:G,AGGREGATE(15,6,ROW($B$2:$G$7)/($B$2:$G$7="x"),ROW(1:1)),0))/(INDEX(A:G,AGGREGATE(15,6,ROW($B$2:$G$7)/($B$2:$G$7="x"),ROW(1:1)),0)="x"),ROW(1:1)-COUNTIF($B$1:INDEX(G:G,AGGREGATE(15,6,ROW($B$2:$G$7)/($B$2:$G$7="x"),ROW(1:1)) -1),"x"))),"")

enter image description here

您需要将范围扩展到您需要的范围。将所有$B$2:$G$7更改为$B$2:$N$29。不要在我使用的那些之外使用完整的列引用。它会杀死Excel。

还要注意什么是相对引用,什么不是相对引用,它们需要保持不变,否则在拖动/复制公式时会出现错误。


作为简单的UDF来做你想要的:

Function findMatch(rng As Range, crit As String, inst As Long) As String
Dim rngArr() As Variant
rngArr = rng.Value
Dim i&, j&, k&
k = 0
If k > Application.WorksheetFunction.CountIf(rng, crit) Then
    findMatch = ""
    Exit Function
End If

For i = LBound(rngArr, 1) + 1 To UBound(rngArr, 1)
    For j = LBound(rngArr, 2) + 1 To UBound(rngArr, 2)
        If rngArr(i, j) = crit Then
            k = k + 1
            If k = inst Then
                findMatch = rngArr(i, 1) & " " & rngArr(1, j)
                Exit Function
            End If
        End If
    Next j
Next i

然后你会这样称呼它:

=findMatch($A$1:$G$7,"x",ROW(1:1))

然后拖动/复制。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.