2012-09-05 159 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