Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Überprüfung auf Übereinstimmung
#1
Hallo, 

ich möchte gerne mit dem unten angegebenen Code Tabelle 2 auf Übereinstimmung mit der Zahl im angegebenen Feld in Tabelle 1 prüfen und bei Übereinstimmung Zahlenwerte aus der jeweiligen Zeile von Tabelle 1 in Tabelle 2 kopieren. Es sind jedoch gewisse Werte von Tabelle 2 in mehreren Zeilen von Tabelle 1 vorhanden, welche  mit dem unten angegebenen Code jedoch leider nicht kopiert werden (es wird nur immer jeweils ein übereinstimmender Eintrag kopiert). Was müsste in dem Code ergänzt werden, dass alle übereinstimmenden Werte in Tabelle 1 sowie dazugehörig die unten angegebenen Werte untereinander in Tabelle 2 kopiert werden?


Sub EleFolge_A1()

    Dim LoL_1 As Long            
    Dim LoL_2 As Long         
    Dim r1 As Long
    Dim r2 As Long
    Dim erg
    Dim ws2 As Worksheet

    Set ws2 = Worksheets("Tabelle1")  
    With Worksheets("Tabelle 2")
        LoL_1 = .Cells(Rows.Count, "K").End(xlUp).Row
        LoL_2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
    
        For r1 = 2 To LoL_1
            If .Range("K" & r1) <> "" Then
                erg = Application.Match(.Range("K" & r1), ws2.Range("A2:A" & LoL_2), 0)
                If IsNumeric(erg) Then
                    r2 = erg + 1
                    .Range("O" & r1) = ws2.Range("C" & r2)
                    .Range("M" & r1) = ws2.Range("A" & r2)
                End If
            End If
        Next r1
    End With
    
End Sub
Antworten Top
#2
Hallo,

es Weihnachtet sehr, frohes Fest.  Es ist mir zuvie Arbeit meinen Vorschlag zu testen, gib dir aber einen guten Tipp.
Baue in die For Next Schleife eine Wiederholung ein, solange r2 < LoL_2 ist.  Füge r2 in die Match Zeile für die Bereichsadresse bei "A2" ein.  Dadurch veraendert sich der Bezugs Bereich für Match.  Es kann sein das du noch eine Zeile zum Fehlerabfangen einbauen musst, wenn Match nichts mehr findet!  

Probiere zuerst mal die Version ohne Error, die mit Err > 0 Zeile wurde dıurch ' Zeichen deaktiviert.  Wenn eine Laufzeitfehler kommt probier die Variante mit Err > 0.  Ich hoffe es klappt.

mfg  Gast 123       Frohes Fest ....



Code:
       r2 = 2 '1. Zeile
       On Error Resume Next
       For r1 = 2 To LoL_1
           If .Range("K" & r1) <> "" Then
wdh:            erg = Application.Match(.Range("K" & r1), ws2.Range("A" & r2 & ":A" & LoL_2), 0)
               If IsNumeric(erg) Then
                   r2 = erg + 1
                   .Range("O" & r1) = ws2.Range("C" & r2)
                   .Range("M" & r1) = ws2.Range("A" & r2)
                   'Match mit r2 Zelle wiederholen  (mit Err ??)
                   'if Err = 0 And r2 < LoL_2 Then GoTo Wdh  
                   'if Err > 0 Then Err = 0   
                    if r2 < LoL_2 Then GoTo Wdh  
               End If
           End If
       Next r1
   End With
Antworten Top
#3
Hallo,

abgesehen davon, dass man das auch mit Formeln bewerkstelligen könnte, braucht man hier keinen Vergleich:



Code:
Sub EleFolge_A1()

    Dim LoL_1 As Long
    Dim LoL_2 As Long
    Dim r1 As Long
    Dim r2 As Long
    Dim z1 As Long
    Dim x1 As Long
    Dim erg
    Dim ws2 As Worksheet

    Set ws2 = Worksheets("Tabelle1")
    With Worksheets("Tabelle2")
        LoL_1 = .Cells(Rows.Count, "K").End(xlUp).Row
        LoL_2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
        z1 = 2
        For r1 = 2 To LoL_1
            For x1 = 1 To LoL_2
                If ws2.Range("A" & x1) = .Range("K" & r1) Then
                    .Range("O" & z1) = ws2.Range("C" & x1)
                    .Range("M" & z1) = ws2.Range("A" & x1)
                    z1 = z1 + 1
                End If
            Next
        Next
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
Hallo,

vielen Dank für die Antworten, nun habe ich noch ein Problem. Wenn ich mit dem unten angeführten Code einige Zellen aus Tabelle 1 in die Spalten O und M auslese und anschließend mit diesem Code in einem neuen Makro Zellen aus Tabelle 3 in die Spalten P und Q auslese, werden die Werte beider Abfragen nebeneinander in dieselben Zeilen eingetragen. Ich möchte die Werte der zweiten Abfrage (aus Tabelle 3) jedoch gerne in den nachfolgenden Zeilen nach den Werten von Tabelle 1 haben. Was müsste ich da im Code ergänzen?
Antworten Top
#5
Hallo,

und wie sieht Dein jetziger Code aus?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#6
Hallo,

momentan habe ich zwei Makros, welche mir aufeinanderfolgend die Werte aus den Tabellen auslesen (siehe unten). Die Werte der zweiten Abfrage sollten jedoch erst in der nächsten leeren Zeile nach den Werten der ersten Abfrage aufgelistet werden.

Sub EleFolge_A1()

    Dim LoL_1 As Long            
    Dim LoL_2 As Long         
    Dim r1 As Long
    Dim r2 As Long
    Dim erg
    Dim ws2 As Worksheet

    Set ws2 = Worksheets("Tabelle1")  
    With Worksheets("Tabelle 2")
        LoL_1 = .Cells(Rows.Count, "K").End(xlUp).Row
        LoL_2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
    
        For r1 = 2 To LoL_1
            If .Range("K" & r1) <> "" Then
                erg = Application.Match(.Range("K" & r1), ws2.Range("A2:A" & LoL_2), 0)
                If IsNumeric(erg) Then
                    r2 = erg + 1
                    .Range("O" & r1) = ws2.Range("C" & r2)
                    .Range("M" & r1) = ws2.Range("A" & r2)
                End If
            End If
        Next r1
    End With
    
End Sub


Sub EleFolge_A2()


    Dim LoL_1 As Long            
    Dim LoL_2 As Long         
    Dim r1 As Long
    Dim r2 As Long
    Dim erg
    Dim ws2 As Worksheet

    Set ws2 = Worksheets("Tabelle3")  
    With Worksheets("Tabelle 2")
        LoL_1 = .Cells(Rows.Count, "K").End(xlUp).Row
        LoL_2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
    
        For r1 = 2 To LoL_1
            If .Range("K" & r1) <> "" Then
                erg = Application.Match(.Range("K" & r1), ws2.Range("A2:A" & LoL_2), 0)
                If IsNumeric(erg) Then
                    r2 = erg + 1
                    .Range("P" & r1) = ws2.Range("C" & r2)
                    .Range("Q" & r1) = ws2.Range("A" & r2)
                End If
            End If
        Next r1
    End With
    
End Sub
Antworten Top
#7
...wie oben beschrieben
Antworten Top
#8
Hallo,

wer kennt eine Möglichkeit, mittels Makro die erste leere Zeile in einem Tabellenblatt zu ermitteln, nachdem bereits Werte über das Makro EleFolge_A1 (siehe oben) in die Tabelle eingetragen wurden. Nachfolgend sollten mittels dem Makro EleFolge_A2 (siehe oben) die zusätzlich ermittelten Werte ab der ersten ermittelten Leerzeile eingetragen werden.
Antworten Top
#9
Hallo,

zum Einen halte ich nichts von der Lösung mit Match, zum Anderen würde ich mal gerne eine Mustertabelle sehen, mit Wunschergebnis.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#10
Hallo,

was wäre die Alternative zum Code oben? Ich würde nämlich gerne Einträge aus verschiedenen Tabellen nacheinander suchen (Abstimmung über gemeinsame ID wie bei einer Datenbank) und in eine neutrale Tabelle eintragen. Die Codes oben erledigen das schon sehr zuverlässig. Das Problem ist nur, dass die von den Makros gelieferten Einträge in dieselben Zeilen geschrieben werden und somit nicht getrennt betrachtet werden können.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste