Excel - Wertvergleich in Spalte von oben nach unten laufen lassen (von unten nach oben geht, passt hier aber nicht)

  • VBScript

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von felix_gorgas.

    Excel - Wertvergleich in Spalte von oben nach unten laufen lassen (von unten nach oben geht, passt hier aber nicht)

    Guten Morgen,

    ich habe mit starker Hilfe in diesem Forum ein Script hinbekommeb, das in Excel Werte von 2 Zellen vergleicht. Das VBS läuft von unten nach oben ab. Jetzt brauche ich eine kleine Anpassung, bekomme es aber nicht hin. Das VBS soll nun von oben nach unten ablaufen. Folgender Sinn: Ich lasse eine Liste ausgeben und mit bestimmte Zellen mit Zahlen beschreiben. Es soll von oben nach unten jede Zeile gelöscht werden, die nichts oder eine Zahl kleiner 333 enthält (In Spalte T stehen die Zahlen). Lass ich unten genanntes Script ablaufen funktioniert es für den unteren Bereich super. Doch ich muss es von oben nach unten ablaufen lassen, denn dort sind die interessanten Zeilen.

    Hier der Code für den Vergleich von unten nach oben:

    Visual Basic-Quellcode

    1. Dim wsStruct5
    2. Dim yy, yy0
    3. Dim py
    4. set wsStruct5 = objExcel.Worksheets("Versandliste")
    5. For py = wsStruct5.Cells(wsStruct5.Rows.Count, 20).End(-4162).Row To 6 Step -1
    6. yy = wsStruct5.Cells(py, 20).Value
    7. If yy < 333 Then
    8. wsStruct5.Rows(py).Delete
    9. ElseIf yy = 333 Then
    10. Exit For
    11. End If
    12. next


    Ein Ändern der Zahlen -4162 , 6 , wsStruct5.Rows.Count , oder -1 brachte keine Besserung. Ich bekomme dann einen unbekannten Anweisungsfehler. Mit einer Suchfunktion könnte es auch gelöst werden, wenn dann bei 333 gestoppt wird und von oben nach unten gesucht wird.

    Ich hoffe Ihr könnt mir wieder weiter helfen :) MFG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „felix_gorgas“ ()

    Hallo,

    PUH ich habes hinbekommen. Ein sehr großes Problem war der Versprung durch die gelöschte Zeile. Wenn man da nicht eine zurück gegangen ist hat das VBS nur jede 2te Zeile erwischt. Hier der Code für alle suchenden:

    Visual Basic-Quellcode

    1. Dim wsStruct5
    2. Dim yy
    3. Dim py
    4. set wsStruct5 = objExcel.Worksheets("Versandliste")
    5. For py = 7 To wsStruct5.Cells(wsStruct5.Rows.Count, 20).End(-4162).Row Step 1
    6. yy = wsStruct5.Cells(py, 20).Value
    7. If yy < 333 Then
    8. wsStruct5.Rows(py).Delete
    9. py = py-1
    10. ElseIf yy = 333 Then
    11. Exit For
    12. End If
    13. next


    MfG

    felix_gorgas schrieb:

    Ein sehr großes Problem war der Versprung durch die gelöschte Zeile.
    Das Problem hast du nicht, wenn du die Schleife rückwärts durchläufst und ein Flag setzt.

    Visual Basic-Quellcode

    1. For py = wsStruct5.Cells(wsStruct5.Rows.Count, 20).End(-4162).Row To 7 Step -1
    2. yy = wsStruct5.Cells(py, 20).Value
    3. If yy = 333 Then MustDelete=True
    4. If MustDelete And yy < 333 Then wsStruct5.Rows(py).Delete -4162
    5. Next
    Vorausgesetzt, die 333 existiert nur einmal.

    Eleganter ist es, wenn du erst mal deine Ausstiegsbedingung suchst.

    Visual Basic-Quellcode

    1. Set LastRow=wsStruct.Columns(20).Find(333)
    2. If LastRow=Nothing Then r=wsStruct5.Cells(wsStruct5.Rows.Count, 20).End(-4162).Row Else r=LastRow.Row
    3. For py=r to 6 step -1
    4. If wsStruct5.Cells(py, 20).Value < 333 Then wsStruct5.Rows(py).Delete -4162
    5. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()