excel - Excel如何根据列A 在列B 中查找列,并返回列中对应的行?

  显示原文与译文双语对照的内容
0 0

Excel 2007 + 中有 4列。

Col包含搜索文本( 要搜索的文本) 。 Col包含我要搜索的所有文本。 ,C 包含另一组不会被搜索的值,但如果有匹配,则将输出到D 列。

基本上,我需要一个在Col中的公式,这样逻辑就像这样:


FOR EACH row in Col A,
IF (a row in B) contains text from each row in A, D = C.

例如:


 A B C D
1 dog dog bone dog woof dog woof
2 cat dog bait dog meow dog meow
3 bird wolf asd
4 pig cat we we

可以看到,在整个列中执行了对A1的搜索。 对于匹配A1中的每一行,在C 中对应的行输出为D 。 由于字符串"dog"在B1和B2中找到,C1和C2分别输出为D1和 D2.

B3不匹配或者包含来自Col的任何文本,因此没有输出。

B4包含来自A2的"cat",所以C4输出为 D4.

搜索结果完成后,我将根据Col过滤表。 基本上我想排除行,它的中列B 不包含任何行中的任何文本,而且基于这个过滤器检查c 数据。

我试图使用索引和匹配和搜索,但是我只是不能绕过公式和它的输出。

请帮助。

时间: 原作者:

0 0

如果你可以轻松使用工作表公式实现所需的结果,则建议不要使用 VBA

将以下公式放入单元格 D1 并向下拖动


{=IF(SUM(IFERROR(FIND($A$1:$A$4,$B1),0)),$C1,"")}

it公式,省略大括号,然后使用 Ctrl + + Shift + 输入公式输入。

0 0

这将通过VBA宏实现。 使用下面的代码,应该能满足你的需要。


Sub pSearchPart()

 Dim rngColA As Range
 Dim rngColAEach As Range
 Dim rngColB As Range
 Dim rngColBEach As Range

 'Assign range in Column A Considering data to be on Sheet1
 Set rngColA = ThisWorkbook.Worksheets("Sheet1").Range("A1:A4")
 'Assign range in Column B Considering data to be on Sheet1
 Set rngColB = ThisWorkbook.Worksheets("Sheet1").Range("B1:B4")

 'Loop in each cells to check string in Column A on Column B
 For Each rngColAEach In rngColA.Cells
 If Trim(rngColAEach) <>"" Then
 For Each rngColBEach In rngColB.Cells
 If Trim(rngColBEach) <>"" Then
 If InStr(1, rngColBEach, rngColAEach)> 0 Then
 rngColBEach.Offset(, 2) = rngColBEach.Offset(, 1)
 End If
 End If
 Next rngColBEach
 End If
 Next rngColAEach

 'Clear Memory
 Set rngColA = Nothing
 Set rngColAEach = Nothing
 Set rngColB = Nothing
 Set rngColBEach = Nothing

End Sub

...