你如何做一个循环,可以通过一个Excel工作簿中的整个列,并searchstring的所有实例?

我是一个实习生,在一个公司里,他们做了大量的DCR和电感读数,并具有文本文件的所有值。 我设法使用VBA导入这些文本文件到一个Excel电子表格,但现在我需要开始操纵这些数据。 我试图写一些代码,将遍历整个列,并searchstring“** DCR”,然后给我的数据,在单元格偏移量(1,3),复制,然后粘贴到在同一个工作簿中有不同的范围。 我已经写了代码在哪里searchstring的第一个实例,然后将我需要的数据复制并粘贴到范围内,但随后停止在那里。 我写的Do循环代码给了我一个无限循环,并没有工作。 这是我的代码到目前为止。

Sub Button2_Click() Dim rng1 As Range Dim strSearch As String strSearch = "**DCR" Set rng1 = Range("A:A").Find(strSearch, , xlValues, xlWhole) If Not rng1 Is Nothing Then rng1.Offset(1, 3).Copy Range("N11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("O11").Select Do Set rng1 = Range("A:A").FindNext(rng1) Loop End If End Sub 

任何人都可以告诉我我失踪和/或做错了什么。 非常感谢你!

尝试这个…

 Sub Button2_Click() Const DCR As String = "**DCR" Dim rngSearch As Range Set rngSearch = ActiveSheet.Range("A:A") Dim rngFoundFirst As Range Set rngFoundFirst = rngSearch.Find(DCR, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) ' Anything found? If Not rngFoundFirst Is Nothing Then Call ProcessDcr(rngFoundFirst) Dim rngFoundNext As Range Set rngFoundNext = rngFoundFirst Do Set rngFoundNext = rngSearch.FindNext(rngFoundNext) ' If first one is found, stop looping. If Not rngFoundNext Is Nothing Then If rngFoundNext.Address = rngFoundFirst.Address Then Exit Do End If Call ProcessDcr(rngFoundNext) End If Loop Until rngFoundNext Is Nothing End If Set rngFoundNext = Nothing Set rngFoundFirst = Nothing Set rngSearch = Nothing End Sub Sub ProcessDcr(rngFound As Range) Call rngFound.Offset(1, 3).Copy Call Range("N11").PasteSpecial(Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False) End Sub 

您需要移动Do-Loop:只要find结果就会基本循环,没有find结果时退出。 但是代码仍然会循环,导致findNext将继续查找下一个结果,即使它已经find它。 所以你必须保持跟踪你的第一个结果。

您可能需要增加您复制的位置。

请记住,复制和粘贴在Excel中是昂贵的,更好和更快的方法是复制单元格的值。

       昏暗strSearch作为string
        Dim rng1 As Excel.Range
        Dim firstrng1 As Excel.Range
        Dim rowNumber as Integer
        rowNumber = 11;
        strSearch =“** DCR”

       设置rng1 = Range(“A:A”)。查找(strSearch,xlValues,xlWhole)
       如果rng1没有那么退出子

       设置firstrng1 = rng1
       做
          范围(“N”&rowNumber).Value = rng1.Offset(1,3)
           rowNumber = rowNumber + 1   
          设置rng1 =范围(“A:A”)FindNext(rng1)
          如果rng1.Address = firstrng1.Address然后退出做
       循环