2016-04-20 10 views
1

Ich habe eine Tabelle, die Hauptbuchinformationen für bestimmte Konten enthält, die als so strukturiert ist:VBA .FindNext() - Überspringen der nächste Wert

Data Structure

ich ein einfaches Makro entwerfen wollte, die finden Zelle, die "Total" enthält und entfernen Sie es, dann in die rechte Spalte und "Total:" in die Zelle (Spalte b).

Das Problem, auf das ich mit meinem Makro stoße, ist, wenn ich es auf .FindNext() setze, nimmt es die Zelle "Total:" auf, die gerade als nächster Fund aufgefüllt wurde. Ich weiß, dass ich das wahrscheinlich mit einer if-Funktion handhaben könnte, aber ich wollte wissen, ob es eine Methode gibt, mit der .FindNext() das nächste Ergebnis überspringen und entsprechend weitergehen kann.

Hier ist das Makro in seiner aktuellen Form. Hinweis: Dies ist mein erster Versuch, ein eigenes VBA-Makro zu erstellen.

Sub Macro2() 

    With Worksheets("Sheet3").Cells 
     Set c1 = .Find("TOTAL", After:=.Range("A1"), LookIn:=xlValues) 
      If Not c1 Is Nothing Then 
     firstOne = c1.Address 
     Do 
      c1.Select 
      ActiveCell.ClearContents 
      c1.Offset(0, 1).Value = "Totals:" 
      Set c1 = .FindNext(c1) 

     Loop While Not c1 Is Nothing And c1.Address <> firstOne And c1.Value <> "Grand Total" 
      End If 
    End With 
End Sub 

Wenn jemand mit mir helfen konnte, entweder bekommt es den nächsten Wert oder richtig es Verrechnung zu überspringen, so dass es in dem gewünschten Effekt ergibt würde ich mich sehr dankbar. Ich habe auch versucht, andere Beiträge zu diesem Thema zu finden, aber keine mit speziell diesem Thema gefunden, ich schätze Ihre Hilfe!

+0

Die 'If' Aussage ist wahrscheinlich die beste Wahl. Sie könnten jedoch versuchen, den Anfang Ihrer nächsten Suche mit 'set c1 = .FindNext (c1.offset (0,1) .Range)' zu vergleichen, um zu sehen, wie das funktioniert. Ich bin unsicher, wenn der 'Find'-Algorithmus von links nach rechts, von oben nach unten oder in einer anderen Richtung arbeitet. – PeterT

Antwort

0

Grenze Ihre Suche auf nur Spalte A:

Sub Macro2() 

    With Worksheets("Sheet3").Range("A:A") 
     Set c1 = .Find("TOTAL", After:=.Range("A1"), LookIn:=xlValues) 
      If Not c1 Is Nothing Then 
       firstOne = c1.Address 
       Do 
        With c1 
         .ClearContents 
         .Offset(0, 1).Value = "Totals:" 
        End With 
        Set c1 = .FindNext(c1) 

       Loop While Not c1 Is Nothing And c1.Address <> firstOne And c1.Value <> "Grand Total" 
      End If 
    End With 
End Sub 
+0

Das hat perfekt funktioniert, danke für den Tipp! Ich kann nicht glauben, dass es so einfach war! – Lampsh4de

Verwandte Themen