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

时间:2017-04-30 16:21:16

标签: google-sheets google-sheets-api google-sheets-formula

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

enter image description here

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

1 个答案:

答案 0 :(得分: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