2012-07-16 63 views
1

假設它在A2,A4,A5,A6中發現了像「sa」這樣的特定文本,我需要分別在B2,B4,B5,B6中複製「sohail」 , 像這樣...基於另一列中的子串檢索列中的文本

ImageName     PhotographerName 
pirf_20120523_sa0001.jpg sohail 
pirf_20120523_ml0001.jpg manav 
pirf_20120523_sa0001.jpg sohail 
pirf_20120523_sa0001.jpg sohail 
pirf_20120523_sa0001.jpg sohail 
pirf_20120529_sh0005.jpg shirazi 
pirf_20120523_ml0001.jpg manav 
pirf_20120529_sh0005.jpg shirazi 

我試圖找回在那裏找到的文本addrres ...

Sub FindinTextInEachCell() 

Dim rngX As Range 


Set rngX = Worksheets("Sheet1").Range("A1:A10").Find("sa", lookat:=xlPart) 
If Not rngX Is Nothing Then 
    MsgBox "Found at " & rngX.Address 
End If 

End Sub 
+0

看到這個鏈接。 '.Find'和'.FindNext'詳細解釋。 http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ – 2012-07-16 12:34:13

回答

0

您沒有使用Find方法得當,它會只返回第一個Range它發現,你將不得不使用findnext()後續範圍的方法,但由於後續範圍將重複,因此必須將其與發現的第一個地址進行比較。

Sub foo() 
On Error Resume Next 

Dim rng As Range 
Dim prng As Range 
Dim firstAddress As String 

With Worksheets(1).Range("A1:A10") 
    Set rng = .Find("sa", LookIn:=xlValues, LookAt:=xlPart) 
    If Not rng Is Nothing Then 
     firstAddress = rng.Address 
     Do 
      Set prng = rng 
      rng.Offset(0, 1) = "Sohail" 
      Set rng = .FindNext(After:=prng) 
     Loop While Not rng Is Nothing And rng.Address <> firstAddress 
    End If 
End With 

End Sub 
+0

非常感謝@卡蒂克阿南德,讚賞 – Rahul 2012-07-16 09:54:52

+1

哇!爲什麼'在錯誤恢復下一個'? :) – 2012-07-16 12:32:37

+0

同意@SiddharthRout,'OERN'應該包裹在'Set rng = .Find'這一行,就是這樣,應該避免使用全局的'OERN'。 – JimmyPena 2012-07-16 17:32:09