Office: VBA Schleife

Helfe beim Thema VBA Schleife in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich versuche ein Makro zu schreiben, in dem ich mit einer Schleife die Spalte B auffüllen will in abhängigkeit von Spalte A. Die Werte in... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Marius82, 8. August 2012.

  1. Marius82 Erfahrener User

    VBA Schleife


    Hallo,

    ich versuche ein Makro zu schreiben, in dem ich mit einer Schleife die Spalte B auffüllen will in abhängigkeit von Spalte A.
    Die Werte in Spalte A sollen werglichen werden. Wenn die Zeile identische Zahlen enthalten, soll in Spalte B die erste identische Zeile mit einem "Y" gekennzeichnet werden, die weiteren identischen sollen mit "Z" gekennzeichnet werden, keine doppelgänger sollen mit "X" gekennzeichnet werden.
    Ich benutze Office 2010. Danke!
    Zum leichteren Verständnis, was ich meine hier eine Beispiel- Tabelle:

    [TABLE="width: 100"]
    <TBODY>[TR]
    [TD]100[/TD]
    [TD]X[/TD]
    [/TR]
    [TR]
    [TD]200[/TD]
    [TD]Y[/TD]
    [/TR]
    [TR]
    [TD]200[/TD]
    [TD]Z[/TD]
    [/TR]
    [TR]
    [TD]200[/TD]
    [TD]Z[/TD]
    [/TR]
    [TR]
    [TD]300[/TD]
    [TD]Y[/TD]
    [/TR]
    [TR]
    [TD]300[/TD]
    [TD]Z[/TD]
    [/TR]
    [TR]
    [TD]400[/TD]
    [TD]X[/TD]
    [/TR]
    [TR]
    [TD]500[/TD]
    [TD]X[/TD]
    [/TR]
    [TR]
    [TD]600[/TD]
    [TD]X[/TD]
    [/TR]
    [TR]
    [TD]700[/TD]
    [TD]X[/TD]
    [/TR]
    </TBODY>[/TABLE]
     
    Marius82, 8. August 2012
    #1
  2. schatzi Super-Moderator
    Hallo!

    Warum Makro? Hier reicht doch noch 'ne Formel!

    AB
    1100X
    2200Y
    3200Z
    4200Z
    5300Y
    6300Z
    7400X
    8500X
    9600X
    10700X
    ZelleFormel
    B1=WENN(ZÄHLENWENN(A:A;A1)=1;"X";WENN(ZÄHLENWENN(A$1:A1;A1)=1;"Y";"Z"))
    B2=WENN(ZÄHLENWENN(A:A;A2)=1;"X";WENN(ZÄHLENWENN(A$1:A2;A2)=1;"Y";"Z"))
    B3=WENN(ZÄHLENWENN(A:A;A3)=1;"X";WENN(ZÄHLENWENN(A$1:A3;A3)=1;"Y";"Z"))
    B4=WENN(ZÄHLENWENN(A:A;A4)=1;"X";WENN(ZÄHLENWENN(A$1:A4;A4)=1;"Y";"Z"))
    B5=WENN(ZÄHLENWENN(A:A;A5)=1;"X";WENN(ZÄHLENWENN(A$1:A5;A5)=1;"Y";"Z"))
    B6=WENN(ZÄHLENWENN(A:A;A6)=1;"X";WENN(ZÄHLENWENN(A$1:A6;A6)=1;"Y";"Z"))
    B7=WENN(ZÄHLENWENN(A:A;A7)=1;"X";WENN(ZÄHLENWENN(A$1:A7;A7)=1;"Y";"Z"))
    B8=WENN(ZÄHLENWENN(A:A;A8)=1;"X";WENN(ZÄHLENWENN(A$1:A8;A8)=1;"Y";"Z"))
    B9=WENN(ZÄHLENWENN(A:A;A9)=1;"X";WENN(ZÄHLENWENN(A$1:A9;A9)=1;"Y";"Z"))
    B10=WENN(ZÄHLENWENN(A:A;A10)=1;"X";WENN(ZÄHLENWENN(A$1:A10;A10)=1;"Y";"Z"))
     
    Zuletzt von einem Moderator bearbeitet: 30. November 2020
    schatzi, 8. August 2012
    #2
  3. Marius82 Erfahrener User
    Danke für die schnelle Antwort.

    Aber ich muss das Problem mit VBA lösen, da ich noch weitere Abfragen und Verknüpfungen verarbeiten muss.
     
    Marius82, 8. August 2012
    #3
  4. schatzi Super-Moderator

    VBA Schleife

    Hallo!

    Wie du meinst...
    Aber die Abfragen im Code dürften mit denen der Formel identisch sein!
     
    schatzi, 8. August 2012
    #4
  5. Marius82 Erfahrener User
    So ähnliuch stelle ich mir die Lösung vor: Aber leider hab ich noch ein Denkfehler...

    Code:
    Option Explicit
    Sub xxx()
    Dim lngZeile As Long, lngLastRow As Long, lngZähler As Long
    With Worksheets("TB1").UsedRange
        
        lngLastRow = .Rows.Count
            For lngZeile = lngLastRow To 1 Step -1
                If .Cells(lngZeile, 1) = .Cells(lngZeile + 1, 1) Then
                
                    For lngZähler = lngZeile + 1 To lngLastRow
                        .Cells(lngZeile, 2) = "Y"
                    Next lngZähler
                    .Cells(lngZeile, 2) = "X"
                    lngLastRow = lngZeile - 1
                End If
            Next lngZeile
    End With
    End Sub
    
    
     
    Marius82, 8. August 2012
    #5
  6. Hotte-Berlin Erfahrener User
    Hallo Marius,

    für den Fall, dass die Liste sortiert ist, müsste folgendes Coding Dein gewünschtes Ergebnis liefern:
    Sub Test()
    Dim lngZeile As Long, lngLastRow As Long, lngZähler As Long
    Dim Vergleich As Integer 'je nachdem, was verglichen werden soll

    'Voraussetzung: Liste ist sortiert!!!!

    Worksheets("TB1").Activate

    Vergleich = 0 'dito

    lngLastRow = ActiveSheet.UsedRange.Rows.Count

    For lngZeile = 1 To lngLastRow
    'Erster Treffer "X":
    If Cells(lngZeile, 1) <> Vergleich Then
    Cells(lngZeile, 2) = "X"
    Vergleich = Cells(lngZeile, 1)
    GoTo NextlngZeile
    End If

    'Zweiter Treffer "Y":
    Cells(lngZeile, 2) = "Y"

    'Weitere Treffer "Z":
    For lngZähler = lngZeile + 1 To lngLastRow
    If Cells(lngZähler, 1) = Vergleich Then
    Cells(lngZähler, 2) = "Z"
    Else
    lngZeile = lngZähler - 1
    Exit For
    End If
    lngZeile = lngZähler
    Next lngZähler
    NextlngZeile:

    Next lngZeile
    End Sub 'Test


    (Zugegeben, nicht gerade die kürzeste und nicht unbedingt sehr performant!)
    Gruß
    Hotte-Berlin
     
    Hotte-Berlin, 8. August 2012
    #6
  7. Marius82 Erfahrener User
    Hallo,
    leider liefert dein Code nicht das gewünschte Ergebnis.

    [TABLE]
    <colgroup><col style="width: 28ptpx"><col width="23,25pt"><col width="60pt"><col width="60pt"></colgroup><tbody>[TR="bgcolor: #cacaca"]
    [TD] [/TD]
    [TD]A[/TD]
    [TD]B[/TD]
    [TD]C[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]1[/TD]
    [TD="align: left"]a[/TD]
    [TD="align: left"]Ist[/TD]
    [TD="align: left"]Soll[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]2[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]100[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]3[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]200[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]Y[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]4[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]200[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]Y[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]5[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]200[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]Z[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]6[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]300[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]Y[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]7[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]300[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]Y[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]8[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]400[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]9[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]500[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]10[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]600[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]11[/TD]
    [TD="bgcolor: #FAFAFA, align: right"]700[/TD]
    [TD="bgcolor: #FAFAFA, align: left"]X[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    </tbody>[/TABLE]
     
    Zuletzt bearbeitet: 8. August 2012
    Marius82, 8. August 2012
    #7
  8. schatzi Super-Moderator

    VBA Schleife

    Hallo!

    Code:
    Sub xy()
    Dim letzte As Long, zeile As Long
    letzte = Cells(Rows.Count, 1).End(xlUp).Row
    Cells(1, 2) = IIf(Cells(1, 1) = Cells(2, 1), "Y", "X")
    For zeile = 2 To letzte
        If Cells(zeile - 1, 1) = Cells(zeile, 1) Then
            Cells(zeile, 2) = "Z"
        Else
            Cells(zeile, 2) = IIf(Cells(zeile, 1) = Cells(zeile + 1, 1), "Y", "X")
        End If
    Next zeile
    End Sub
     
    schatzi, 8. August 2012
    #8
  9. Marius82 Erfahrener User
    Danke für die Super Lösung!!

    Aber ich hab noch ein Neues Problem, eine Weitere Spalte muss überprüft werden.

    Die gleichen Regeln wie vorher gelten, aber hinzu kommt:
    Wenn sich die Werte in Spalte A ändern, soll der Letzte Wert in Spalte C ein "W" sein, es sei denn, die Werte in Spalte B sind identlisch, dann soll wie in der alten Regel wieder das "Z" in Spalte ausgegeben werden.
    Wenn sich die Werte in Spalte A ändern und die letzten Werte in Spalte B identisch sind, soll der erste identische Wert aus Spalte B ein "Q" in Spalte C ausgeben (in der Alten Regel wäre dort ein "Y")

    Anbei nochmal die Tabelle zum Verständnis:
    [TABLE]
    <COLGROUP><COL><COL width=12><COL width=36><COL width=29></COLGROUP><TBODY>[TR="bgcolor: #cacaca"]
    [TD][/TD]
    [TD]A[/TD]
    [TD]B[/TD]
    [TD]C[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]1[/TD]
    [TD="align: left"]A[/TD]
    [TD="bgcolor: #fafafa, align: right"]100[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]2[/TD]
    [TD="align: left"]A[/TD]
    [TD="bgcolor: #fafafa, align: right"]200[/TD]
    [TD="align: left"]Q[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]3[/TD]
    [TD="align: left"]A[/TD]
    [TD="bgcolor: #fafafa, align: right"]200[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]4[/TD]
    [TD="align: left"]A[/TD]
    [TD="bgcolor: #fafafa, align: right"]200[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]5[/TD]
    [TD="align: left"]B[/TD]
    [TD="bgcolor: #fafafa, align: right"]300[/TD]
    [TD="align: left"]Y[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]6[/TD]
    [TD="align: left"]B[/TD]
    [TD="bgcolor: #fafafa, align: right"]300[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]7[/TD]
    [TD="align: left"]B[/TD]
    [TD="bgcolor: #fafafa, align: right"]400[/TD]
    [TD="align: left"]W[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]8[/TD]
    [TD="align: left"]C[/TD]
    [TD="bgcolor: #fafafa, align: right"]500[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]9[/TD]
    [TD="align: left"]C[/TD]
    [TD="bgcolor: #fafafa, align: right"]600[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]10[/TD]
    [TD="align: left"]C[/TD]
    [TD="bgcolor: #fafafa, align: right"]700[/TD]
    [TD="align: left"]W[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]11[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]800[/TD]
    [TD="align: left"]Y[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]12[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]800[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]13[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]800[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]14[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]800[/TD]
    [TD="align: left"]Z[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]15[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]900[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]16[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]920[/TD]
    [TD="align: left"]X[/TD]
    [/TR]
    [TR]
    [TD="bgcolor: #cacaca"]17[/TD]
    [TD="align: left"]D[/TD]
    [TD="bgcolor: #fafafa, align: right"]940[/TD]
    [TD="align: left"]W[/TD]
    [/TR]
    </TBODY>[/TABLE]
     
    Marius82, 9. August 2012
    #9
Thema:

VBA Schleife

Die Seite wird geladen...
  1. VBA Schleife - Similar Threads - VBA Schleife

  2. VBA Schleife kopieren und einfügen von Spalten

    in Microsoft Excel Hilfe
    VBA Schleife kopieren und einfügen von Spalten: Hallo Zusammen, Ich habe auf einem Tabellenblatt eine variable Anzahl an Spalten mit Daten die auch eine variable Anzahl an Zeilen haben, auch mit Lücken in den Zeilen. Die Spalten mit den Infos...
  3. Eine Schleife mit zwei tebellen vba Access

    in Microsoft Access Hilfe
    Eine Schleife mit zwei tebellen vba Access: Hallo zusammen! Es gibt’s zwei Tabellen und ich wollte aus zweiter Tabelle die Daten nach einem Kriterium (FLTR=0) an erste Tabelle übertragen (kopieren). Geht aber nicht. Hier ist mein Kode,...
  4. VBA Loop : Werte suchen und löschen

    in Microsoft Excel Hilfe
    VBA Loop : Werte suchen und löschen: Hallo zusammen, ich habe folgende Ausgangslage: Im Tabellenblatt Auswahl sollen Artikel eingegeben werden und via Formel wird der zugehörige Lagerplatz ausgegeben (funktioniert soweit), sodass...
  5. VBA: Variable Anzahl Zeilen mit Suchkriterien finden und kopieren

    in Microsoft Excel Hilfe
    VBA: Variable Anzahl Zeilen mit Suchkriterien finden und kopieren: Hallo zusammen, ich konnte bislang nur bruchstückhafte Ansätze zu meinem Problem finden, jedoch keinen um mehrere Kriterien zu erfassen und anschließend zu ordnen, daher brauche ich (mal wieder)...
  6. VBA: Datum automatisch hinzufügen nach Übertrag

    in Microsoft Excel Hilfe
    VBA: Datum automatisch hinzufügen nach Übertrag: Hallo zusammen, ich habe ein Makro gebaut, welches die Daten aus dem Tabellenblatt Bestellformular kopiert und diese in ein anderes Tabellenblatt (Bestellhistorie) überträgt, wobei zusätzlich in...
  7. Excel VBA Exit aus der Schleife verhindern

    in Microsoft Excel Hilfe
    Excel VBA Exit aus der Schleife verhindern: Hallo, ich denke, ich habe ein tatsächlich einfaches Problem. Komme aber nicht auf die Lösung. In dieser Schleife x bis 507 wird eine Funktion aufgerufen, die in einer anderen Liste einen Namen...
  8. Userform Schleife

    in Microsoft Excel Hilfe
    Userform Schleife: Hallo, ich erstelle über userform eine schöne Oberfläche wo ich verschiedene Sachen abfrage. Das funktioniert auch alles, aber mein Problem jetzt ist, dass ich die Werte in einen bestimmten Excel...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden