我在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,但我无法绕过公式及其输出。
请帮忙......
答案 0 :(得分:1)
当您使用工作表公式轻松获得所需结果时,我会建议您反对VBA
将以下公式放入单元格 D1 并向下拖动
{=IF(SUM(IFERROR(FIND($A$1:$A$4,$B1),0)),$C1,"")}
它是一个数组公式,所以省略花括号并使用 Ctrl + Shift + Enter 输入公式p>
答案 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