2012-09-05 46 views
0

我想修改下面VBA代码搜索文本

代码我想findwhat从范围(“A1:20”)挑文本 - 它包含我想寻找

文本列表

如果它发现在B中的描述文字,我希望它返回其描述它旁边发现如郭沫若的文字范围C

感谢

Option Explicit 

Sub x() 
    Dim FindWhat, rngCell As Range, i As Integer 

    FindWhat = Array("Jo", "oa", "of", "koo") 
    For i = 0 To 3 
     For Each rngCell In Range("B2", Range("B" & Rows.Count).End(xlUp)) 
      If InStr(rngCell, FindWhat(i)) <> 0 Then 
       rngCell.Offset(0, 1) = rngCell 
       rngCell.Offset(, 1).Resize(, 2).Copy 
      End If 
     Next rngCell 
    Next i 

End Sub 
+0

我不明白这个问题。请尝试再解释一遍。我假设你在Excel中工作?什么版本?你想做什么?你如何调用x()? –

+0

是的 - 我在Excel 2003中工作。示例 - 我有范围a1:a20其中包含文本Jo,ja,爱,比萨等列表我想在列b2:b400(这有说明)中搜索此列表。如果我在B2:B40中搜索比萨,它会在b2:b400中的任何单元格中找到它,我想返回它在列c中找到的文本,就在旁边的描述 – user1649932

+0

好的,谢谢,现在我明白了。 –

回答

1

试试这个:

Option Explicit 

Sub x() 
    Dim findRng As Range, _ 
     targetRng As Range, _ 
     findCell As Range, _ 
     found As Range 
    Dim i As Integer 
    Dim firstFound As String, _ 
     columnName As String 

    columnName = "B" 
    Set findRng = Range("A1:A20") 
    For Each findCell In findRng 
     Set targetRng = Range(columnName & "2", Range(columnName & Rows.Count).End(xlUp)) 
     With targetRng 
      Set found = .Find(findCell.Value, LookIn:=xlValues, lookat:=xlPart) 
      If Not found Is Nothing Then 
       firstFound = found.Address 
       Do 
        found.Offset(0, 1).Value = found.Offset(0, 1).Value & findCell.Value & ", " 
        Set found = .FindNext(found) 
       Loop While Not found Is Nothing And found.Address <> firstFound 
      End If 
     End With 
    Next findCell 

End Sub 

请注意,除非您所做的比这更复杂一点,否则可以使用单元格公式实现此结果。阅读索引,匹配和VLookup函数的帮助,了解如何实现这一点。

+0

感谢它的工作,但需要更多的帮助 - 例如说在A1栏中的男孩a2女孩a3猫 - 在列b1我是女孩b2我是猫b3我是猫和狗我希望代码只选择文本它现在做的旁边的b,但它似乎复制了很多次,并添加了IN。 thanks – user1649932

+0

@ user1649932我已经对代码进行了修改,再次尝试 - 看看它是否更接近你想要的。我假设你有能力修改它以删除最后的逗号,如果情况并非如此,请告诉我。但是,这可能是一个很好的学习练习。 – mkingston

+0

你好,它现在工作正常!这是因为我在A列中有5次男孩。谢谢你,万分感谢,你是最好的!!!!!!!!!!!!!!!!!!!!!!! 111111 – user1649932