Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Schleifen Prüfung

VBA Schleifen Prüfung
30.07.2021 11:43:37
Lisa
Hallo zusammen,
ich bastle mir gerade ein Makro zusammen.
In diesem werden, in zwei verschiedenen Arbeitsblättern, zwei Spalten miteinander verglichen.
Im Zielblatt werden die gefundenen Treffer mit Ja markiert.
Das Ganze funktioniert so weit fast perfekt.
Jetzt habe ich allerdings versucht eine For-Schleife zu verschachteln, die vorab prüft, ob die Spaltenprüfung überhaupt notwendig ist, denn wenn in Zelle Q++ bereits etwas steht, kann das Makro direkt mit der nächsten leeren Zelle in Q weitermachen und ist somit schneller im Durchlauf.
Jetzt haben sich zwei Fragen ergeben, die wenig miteinander zu tun haben:
1. Was ist an meiner Verschachtelung falsch, ich sehe keinen offensichtlichen Fehler, aber es muss ja falsch sein.
2. Wie bekomme ich es hin, dass auch doppelte Werte mit "JA" markiert werden? Leider berücksichtigt die Prüfung, wie der SVerweis, nur den ersten Wert.
Über Tipps bin ich dankbar.
Hier der Code:

Sub test3()
Sheets("Tabelle2").Select
Const NameTabelle1 = "Tabelle1" 'Destination
Const NameTabelle2 = "Tabelle2" 'Source
Dim wsSource As Worksheet, wsDestination As Worksheet
Dim lngIndexS As Long, lngIndexD As Long
Dim lngZeileS As Long, lngZeileD As Long, lngZeile As Long
Dim rng As Range
Set wsSource = Worksheets(NameTabelle2)
Set wsDestination = Worksheets(NameTabelle1)
lngIndexS = Range("H2").Column
lngIndexD = Range("H2").Column
For lngZeile = 2 To Range("Q1000000").End(xlUp).Row 'Schleife 1 soll prüfen, ob Zelle in Q leer, wenn nicht vergleichen und kopieren, sonst nächste Zelle prüfen
For lngZeileS = 2 To wsSource.Cells(Rows.Count, lngIndexS).End(xlUp).Row
Set rng = wsDestination.Columns(lngIndexD).Find(What:=wsSource.Cells(lngZeileS, lngIndexS).Value, LookAt:=xlWhole)
If rng Is Nothing Then
lngZeileD = wsDestination.Cells(Rows.Count, lngIndexD).End(xlUp).Row + 1
Else
If IsEmpty(Cells(lngZeile, 17)) Then
lngZeileD = rng.Row
Cells(lngZeileD, 17) = "Ja"
End If
End If
Next lngZeileS
Next lngZeile
End Sub
Liebe Grüße
Lisa

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleifen Prüfung
30.07.2021 13:01:15
ChrisL
Hi Lisa
Ich glaube die Begriffe Source und Destination wurden verwechselt, aber ich habe es so belassen.
Ein zweite Schleife braucht es nicht. Die Wenn-Prüfung einfach gleich zu beginn der Schleife machen.

Sub test3()
Const NameTabelle1 = "Tabelle1" 'Destination
Const NameTabelle2 = "Tabelle2" 'Source
Dim wsSource As Worksheet, wsDestination As Worksheet
Dim lngIndexS As Long, lngIndexD As Long
Dim lngZeileS As Long
Dim rng As Range
Set wsSource = Worksheets(NameTabelle2)
Set wsDestination = Worksheets(NameTabelle1)
lngIndexS = Range("H2").Column
lngIndexD = Range("H2").Column
With wsSource
For lngZeileS = 2 To .Cells(Rows.Count, lngIndexS).End(xlUp).Row
If IsEmpty(.Cells(lngZeileS, 17)) Then
Set rng = wsDestination.Columns(lngIndexD).Find(What:=.Cells(lngZeileS, lngIndexS).Value, LookAt:=xlWhole)
If Not rng Is Nothing Then .Cells(lngZeileS, 17) = "Ja"
End If
Next lngZeileS
End With
End Sub
Die Aufgabe liesse sich aber m.E. mit einer einfachen Formel erledigen, was schneller sein sollte (Schleifen sind wenn möglich zu vermeiden).

=WENN(ZÄHLENWENN(Tabelle1!H:H;H2);"Ja";"")
Will man die Formel unbedingt in VBA übertragen, könnte man es z.B. wie folgt erledigen:

Sub tt()
With Worksheets("Tabelle2").Range("Q2:Q" & Worksheets("Tabelle2").Cells(Rows.Count, 8).End(xlUp).Row)
.Formula = "=IF(COUNTIF(Tabelle1!H:H,H2),""Ja"","""")"
.Value = .Value
End With
End Sub
cu
Chris
Anzeige
AW: VBA Schleifen Prüfung
30.07.2021 13:12:16
Lisa
Hallo Chris,
ich Danke Dir funktioniert wunderbar!
Liebe Grüße
Lisa
AW: VBA Schleifen Prüfung
30.07.2021 13:09:26
ChrisL
solltest du tatsächlich bis zu 1 Mio. Zeilen/Einträge haben, dann würde sich wahrscheinlich Power-Query empfehlen...
https://www.herber.de/bbs/user/147388.xlsx

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige