2016-05-12 4 views
2

hallo wenn es irgendeine, die sich mit diesem Thema helfen kannExcel VBA - mein Suchen in meinem selcted Bereich funktioniert nicht

Ich habe eine Reihe von Gruppen 1 bis viele (bis zu 12 Zeilen - eine Zeile nach einer anderen pro Gruppe) der Anfangsteil des Strings als Wiederholung Ich weiß nicht, wie lange sie wiederholt werden, aber immer wenn sie sind, muss ich die relevanten Daten extrahieren, die alles nach dem wiederholten String sind. Jetzt sind nicht alle 12 Zeilen in der Gruppe, manchmal sind es 11 oder weniger, aber sie sind keine leeren Zeilen in der Gruppe von Daten, also was ich tue, sobald ich meine Kopfzeile finde, rufe ich ein Unterprogramm auf, um durch den Datenblock zu gehen und zu tun meine Extraktion, aber wenn ich zurück und verwenden sie die .findnext (v) erhalten wird es zum nächsten Kopf gehen nicht

With big_rng  ' this is column A selected 
     Set v = .Find("Submarket:", LookIn:=xlValues, LookAt:=xlPart) 
     If Not v Is Nothing Then 
      firstAddress = c.Row 
      Do 
       Call this1(need, c.Row, tech, daily_date) 
       Set v = .FindNext(v) 
       need = need + 1 
      Loop While Not c Is Nothing And c.Address <> firstAddress 
     End If 
    End With 

als ich this1 nennen, was ich tue einen anderen Bereich ist die Auswahl, weil ich meine weiß nicht, ob Daten, die ich eine weitere Auswahl in der richtigen Reihenfolge verwenden

Cells(i, 1).Select ' I know which row my group starts and I select down 

    Range(Selection, Selection.End(xlDown)).Select 

    ' check for substrings and copy across if the substring exists e.g. 

    With Selection 

    Set d = .Find("Degradation =", LookIn:=xlValues, LookAt:=xlPart) 

      If Not d Is Nothing Then 
       spos = InStrRev(Cells(d.Row, 1), "=") 

       If Mid(Cells(d.Row, 1), spos + 1, 1) = " " Then 
        output_sht.Cells(n, 5) = Right(Cells(d.Row, 1), Len(Cells(d.Row, 1)) - (spos + 1)) 
       Else 
        output_sht.Cells(n, 5) = Right(Cells(d.Row, 1), Len(Cells(d.Row, 1)) - spos) 
       End If 

      Else 
       output_sht.Cells(n, 5) = "Error in Data" 
      End If 

wenn dieses Sub Ende meiner ursprünglichen Auswahl verschwunden ist (es war Spalte A: A), und mein .findnext (v) gibt mir die letzte Zeile der vorherige Gruppe nicht die erste Zeile der nächsten Gruppe, wenn man

existiert, wie kann ich über Findnext-Schleife während meiner ursprünglichen Auswahl in Takt zu halten

Danke im Voraus

Robert

+0

Excel verwendet die letzten 'FIND'-Werte, wenn 'FINDNEXT' verwendet wird, also verwendet es die Werte in der' this1' Suche. Ich denke, du wirst ".FINDNEXT" durch ein anderes "FINDEN" ersetzen, indem du das letzte gefundene Objekt als Startpunkt verwendest, aber behalte die erste Adresse so, dass sie weiß, wann sie zum Start zurückkommt. –

Antwort

0

ich hatte Herumspielen und kam mit diesem Code.
Zeile 1 muss über dem Suchbereich liegen (d. H. Die Header), daher befinden sich die Daten in den Adressen A2: A10 und B2: B10.
Ich legte Submarket: in A2, A4, A5 & A7 und Sumarket1: in B3, B4, B5 & B7.

Der Ausgang war (auf einzelne Linien):

big - 2 $ A $ sm L - B $ $ 3 sm L - B $ $ 4 sm L - B $ $ 5 sm L - B $ $ 7 big - $ A $ 4 SML - $ B $ 3 SML - $ B $ 4 SML - $ B $ 5 SML - $ B $ 7 groß - $ A $ 5 SML - $ B $ 3 SML - $ B $ 4 SML - $ B $ 5 SML - $ B $ 7 big - 7 $ A $ SML - $ B $ 3 sm L - B $ $ 4 SML - $ B $ 5 sm L - B $ $ 7

Sub test2() 
    Dim big_rng As Range 
    Dim v As Variant 
    Dim foundrow As Long 

    Set big_rng = Sheet1.Range("A1:A10") 
    With big_rng 
     Set v = .Find("Submarket:", LookIn:=xlValues, LookAt:=xlPart) 
     If Not v Is Nothing Then 
      Do 
       foundrow = v.Row 
       Debug.Print "big - " & v.Address 
       this1 
       'Resize the search range to ignore rows already searched. 
       With big_rng.Resize(big_rng.Rows.Count - foundrow + 1).Offset(foundrow - 1) 
        Set v = .Find("Submarket:", LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext) 
       End With 
      Loop While Not v Is Nothing And v.Row <> foundrow 
     End If 
    End With 

End Sub 

Sub this1() 

    Dim sml_rng As Range 
    Dim v As Variant 
    Dim firstAddress As String 

    Set sml_rng = Sheet1.Range("B1:B10") 

    With sml_rng 
     Set v = .Find("Submarket1:", LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext) 
     If Not v Is Nothing Then 
      firstAddress = v.Address 
      Do 
       Debug.Print "sml - " & v.Address 
       Set v = .FindNext(v) 
      Loop While Not v Is Nothing And v.Address <> firstAddress 
     End If 
    End With 

End Sub 
Verwandte Themen