对于公式:
在 A1 的另一张纸上放置所需的测试,在本例中为“红色”。在 A2 中输入这个公式:
=IF(ROW()<=COUNTIF(Sheet8!$A$1:$A$5,$A$1),$A$1,"")
并根据需要复制尽可能多的行。
在B1中放这个数组公式:
=IF(A1<>"",INDEX(Sheet8!$B$1:$B$5,LARGE(ROW($1:$5)*ISNUMBER(FIND(A1,Sheet8!$A$1:$A$5)),COUNTA($A$1:$A1))),"")
将所有Sheet8 引用更改为保存数据的工作表的名称。要扩大正在搜索的数据,请修复范围 Sheet8!$B$1:$B$5 和 Sheet8!$A$1:$A$5 以匹配大小。以及ROW($1:$5)需要包含相同行数的数据。
用Ctrl-Shift-Enter确认并向下复制。
对于可以用作函数的 UDF:
Function Avram(val As String, IRng As Range, k As Long)
Dim rng
Dim j As Long
Dim i As Long
rng = IRng.Value
j = 1
For i = LBound(rng, 1) To UBound(rng, 1)
If rng(i, 1) = val Then
If j = k Then
Avram = rng(i, 2)
Exit Function
Else
j = j + 1
End If
End If
Next i
Avram = CVErr(xlErrNA)
End Function
这将放在附加到工作簿的模块中(不是工作簿或工作表代码)
您将按照上面公式部分的说明在工作表上输入 A 列。然后在 B1 中输入:
=IFERROR(Avram(A1,Sheet8!$A$1:$B$5,COUNTA($A$1:$A1)),"")
这次唯一需要更改的是 Sheet8!$A$1:$B$5 以包含您的数据范围。这比数组公式更不挑剔,而且速度更快。
至于 Sub 来做这一切:
Sub avram2()
Dim ows As Worksheet
Dim tws As Worksheet
Dim rng
Dim Orng
Dim i As Long
Dim FndString As String
FndString = "Red" 'Change to what you want
Set ows = Sheets("Sheet8") 'Change to your sheet name with the data.
Set tws = Sheets("Sheet9") 'Change to the output sheet name
With ows
rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
For i = LBound(rng, 1) To UBound(rng, 1)
If rng(i, 1) = FndString Then
tws.Cells(tws.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 2).Value = Array(rng(i, 1), rng(i, 2))
End If
Next i
End Sub