Excel-如何根据A列中的多行查找B列中的字符串,并返回C列中相应的行?

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

我在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  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,因为工作表公式是最可移植和适应性最强的。如果我需要调整代码,我不想继续打扰你。