我想创建范围内所有“x”字符串出现的列表。这是我的表:查找范围中所有确切字符串的出现次数并列出它
我要搜索所有出现,并列出他们,并给予适当的名称: 例如,对于G2,我想“灰色贝雷帽”的字符串作为结果。我认为我需要使用数组公式或类似的东西。
我想创建范围内所有“x”字符串出现的列表。这是我的表:查找范围中所有确切字符串的出现次数并列出它
我要搜索所有出现,并列出他们,并给予适当的名称: 例如,对于G2,我想“灰色贝雷帽”的字符串作为结果。我认为我需要使用数组公式或类似的东西。
让我先说一下,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"))),"")
您将需要扩大范围到你所需要的。将所有$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))
并拖动/复制下来。
如果您正在使用[谷歌表(按照下面的评论),那么为什么地球上,你会标记这个问题[EXCEL]和[Excel的公式]没有提到实际的平台,你是工作?不要把垃圾扔到墙上看看有什么棒。轻微投票,轻微投票。 – Jeeped
但是我认为excel和谷歌表真的非常相似,但现在我发现我错了... – Jackenmen