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

时间:2014-10-24 08:53:27

标签: excel

我在Excel 2007 +中有4列。

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

基本上,我需要在Col 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。对于Col B中与A1匹配的每一行,C中的相应行输出到D.由于字符串" dog&#34 ;在B1和B2中找到,C1和C2分别输出到D1和D2。

B3与Col A不匹配或包含任何文本,因此不输出任何内容。

B4包含" cat"从A2开始,C4输出到D4。

搜索结果完成后,我将根据Col D过滤表格。基本上我想排除Col B不包含Col A中任何行的文本的行,并检查Col C的数据基于此过滤器。

我尝试过使用INDEX,MATCH和SEARCH,但我无法绕过公式及其输出。

请帮忙......

2 个答案:

答案 0 :(得分:1)

当您使用工作表公式轻松获得所需结果时,我会建议您反对VBA

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

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

它是一个数组公式,所以省略花括号并使用 Ctrl + Shift + Enter

答案 1 :(得分: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