Excel-如何根据A列中的多行查找B列中的字符串,并返回C列中相应的行?
我在Excel2007+中有4列 列A包含搜索文本(我要搜索的文本)。 列B包含我要从中搜索的所有文本。 列C包含另一组不会被搜索的值,但如果存在匹配项,将输出到列D 基本上,我需要一个D列的公式,逻辑如下:Excel-如何根据A列中的多行查找B列中的字符串,并返回C列中相应的行?,excel,Excel,我在Excel2007+中有4列 列A包含搜索文本(我要搜索的文本)。 列B包含我要从中搜索的所有文本。 列C包含另一组不会被搜索的值,但如果存在匹配项,将输出到列D 基本上,我需要一个D列的公式,逻辑如下: 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 do
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
如您所见,在整个列B中执行A1搜索。对于与A1匹配的列B中的每一行,C中的对应行都输出到D。由于在B1和B2中找到字符串“dog”,C1和C2分别输出到D1和D2
B3不匹配或不包含A列中的任何文本,因此它不会输出任何内容
B4包含A2的“cat”,因此C4输出到D4
搜索结果完成后,我将根据列D筛选表。基本上,我希望排除列B不包含A列中任何行的文本的行,并基于此筛选检查列C的数据
我尝试过使用索引、匹配和搜索,但我就是无法理解公式及其输出
请帮助…这将通过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
子pSearchPart()
变暗rngColA As范围
变暗RNGCOLAS范围
Dim rngColB As范围
昏暗的RNGCOLAS海滩范围
'在A列中指定范围,并考虑表1上的数据
设置rngColA=此工作簿。工作表(“表1”)。范围(“A1:A4”)
'考虑到表1中的数据,在B列中分配范围
设置rngColB=ThisWorkbook.工作表(“Sheet1”).范围(“B1:B4”)
'在每个单元格中循环以检查B列A列中的字符串
对于每个rngColA,rngColA.Cells中的每个
如果修剪(RNGCOLEACH)“,则
对于rngColB.单元格中的每个rngColB
如果修剪(rngColBEach)“,则
如果InStr(1,rngColBEach,RNGCOLEATH)>0,则
rngColBEach.Offset(,2)=rngColBEach.Offset(,1)
如果结束
如果结束
下一个海滩
如果结束
下一步
“清除内存
设置rngColA=无
设置rngColAEach=Nothing
设置rngColB=Nothing
设置rngColBEach=无
端接头
如果您可以使用工作表公式轻松获得所需结果,我建议您不要使用VBA
将以下公式放入单元格D1并向下拖动
{=IF(SUM(IFERROR(FIND($A$1:$A$4,$B1),0)),$C1,"")}
这是一个数组公式,因此省去大括号,使用Ctrl+Shift+enter输入公式谢谢您的解决方案!不幸的是,它似乎无法处理Unicode字符。它适用于英文文本,但在涉及非英文unicode文本时失败。尽管如此,这是一个足够好的解决方案。我会调整这个并解决一些问题。谢谢你的回复!我试图避免VBA,因为工作表公式是最可移植和适应性最强的。如果我需要调整代码,我不想继续打扰你。