Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Schleife mit zwei Bedingungen?

VBA Schleife mit zwei Bedingungen?
21.07.2015 13:37:40
Michael
Hallo Forum,
ich suche die Möglichkeit mittels einer Schleife oder dergleichen mir aus einer Tabelle Werte in eine andere kopieren zu können wenn zwei Bedingungen erfüllt sind. Einmal soll in einer Spalte geprüft werden ob der Wert <0 ist und dann in einer anderen ob das Wort "False" drin steht. Wenn Beides erfüllt ist sollen bestimmte Zellinhalte in eine andere Arbeitsmappe kopiert werden. Darüber mache ich mir jedoch erst später Gedanken.
Wie müsste man das im Code umsetzen?
Ich bin für jeden Tipp dankbar!
Gruß
Michael

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 13:55:47
Daniel
Hi
prinizpell macht man das in Excel ohne Schleife.
man filtert mit dem Autofilter in den entsprechenden Spalten und kopiert dann die Zellen in die andere Arbeitsmappe.
Hierbei nutzt man aus, dass in gefilterten Tabellen nur die sichtbaren Zeilen kopiert werden.
In VBA funktioniert das genauso.
Schleifen über einzelne Excelzellen sind in VBA recht langsam.
Daher sollter man sie vermeiden und versuchen, wenn möglich die Zellen als Block in einem Schritt zu bearbeiten. in diesm Fall hilft dir hierbei der Autofilter.
Gruß Daniel

Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:02:07
Rolf
Hallo Michael,
Falls du doch VBA willst:
Sub roro()
For i = 1 To 10
If Cells(i, 1) > 4 And Cells(i, 2) = "wert" Then
Cells(i, 4) = "Prima!"
End If
Next
End Sub

Gruß Rolf

AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:09:54
Michael
Danke erstmal für den Tipp Daniel.
Ich weiß jedoch nicht ob das mit dem Filter in meinem Fall so eine gute Lösung ist, denn:
-ich will nicht ganze Blöcke zwischen Arbeitsmappen kopieren sondern nur bestimmte Zellen, denn die Formatierung unterscheidet sich deutlich.
-Ich will nicht alles kopieren sondern nur bestimmte Zellen innerhalb einer Zeile wo die Bedingungen erfüllt sind und diese in bestimmte Zellen in der anderen Arbeitsmappe einfügen.
-Das größte Problem sehe ich jedoch darin, dass ich das Einfügen in der neuen Arbeitsmappe fest definieren will. D.h. ich will zB sagen, Wenn die Bedingung erfüllt ist kopiere mir aus dieser Zeile die Zelle XYZ in die Zelle XYZ der anderen Mappe. Doch was mache ich wenn die Bedingungen in mehreren Zeilen erfüllt werden. Diese sollen nacheinander kopiert und in die neue Arbeitsmappe eingefügt werden, die Zellen in der neuen Arbeitsmappe sind aber nicht zwingend untereinander, sondern vielleicht 3 Zellen unter der wo der erste Eintrag rein kopiert wurde. Vielleicht geht das mit Offset?
Das ist ein größeres Projekt, ich will mich quasi von Problem zu Problem hangeln.
Gruß

Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:07:04
UweD
Hallo
wenn doch Makro, dann so..
Sub kopieren()
Dim SP1, SP2, ZE As Integer
Dim LR1, LR2, i As Double
Dim TB1, TB2, WB
Set TB1 = ActiveSheet
'muss geöffnet sein; Name anpassen
Set TB2 = Workbooks("Test.xlsx").Sheets(1)
SP1 = 1 'Spalte A Erste Spalte, die berücksichtigt werden soll
SP2 = 3 'Spalte C
ZE = 2 'Erste Zeile, wegen Überschrift
LR1 = TB1.Cells(Rows.Count, SP1).End(xlUp).Row 'letzte Zeile der Spalte
For i = ZE To LR1
If TB1.Cells(i, SP1) > 0 And TB1.Cells(i, SP2) = "False" Then
LR2 = TB2.Cells(Rows.Count, SP1).End(xlUp).Row
'Kopieren
TB1.Rows(i).Copy TB2.Rows(LR2 + 1)
End If
Next i
End Sub

Gruß UweD

Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:24:44
Michael
Danke Uwe!
Ich blicke jedoch nicht ganz durch:
Sub kopieren()
Dim SP1, SP2, ZE As Integer
Dim LR1, LR2, i As Double
Dim TB1, TB2, WB
Set TB1 = ActiveSheet
Set TB2 = Workbooks("Test.xlsx").Sheets(1)
SP1 = 15 'Spalte O
SP2 = 33 'Spalte AG
ZE = 3 'Erste Zeile die bei mir mit Werten beginnt, da Tabelle erst ab Zeile 2 beginnt
LR1 = TB1.Cells(Rows.Count, SP1).End(xlUp).Row 'letzte Zeile der Spalte
For i = ZE To LR1
If TB1.Cells(i, SP1) > 0 And TB1.Cells(i, SP2) = "False" Then
LR2 = TB2.Cells(Rows.Count, SP1).End(xlUp).Row 'Was genau macht dieser Code in der  _
anderen Mappe?
TB1.Rows(i).Copy TB2.Rows(LR2 + 1) 'das verstehe ich auch nicht ganz. Ich sehe  _
nirgends ein paste und auch keine vorher definierten Zellen wo das ganze rein kopiert werden soll?
End If
Next i
End Sub
Du kopierst ganze Zeilen in deinem Code, geht das auch mit bestimmten Zellen aus der selben Zeile?
Gruß
Michael

Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:43:06
UweD
Hallo
LR2 = TB2.Cells(Rows.Count, SP1).End(xlUp).Row 'Was genau macht dieser Code in der _
anderen Mappe?

=> findet die Letzte benutze Zeile in der Sammeldatei, und würde in die Nächste Zeile die Daten reinkopieren
TB1.Rows(i).Copy TB2.Rows(LR2 + 1) 'das verstehe ich auch nicht ganz. Ich sehe _
nirgends ein paste und auch keine vorher definierten Zellen wo das ganze rein kopiert werden soll?

TB1.Rows(i).Copy TB2.Rows(LR2 + 1)
von____________| |______nach______

nur einzelne Zellen geht auch so...
z.B.
TB1.Range("A" & i).Copy TB2.cells(LR2 + 1,1)

hier mal eine Mischung aus Range() und Cells(Zeile,Spalte)
Gruß UweD

Anzeige
AW: VBA Schleife mit zwei Bedingungen?
21.07.2015 14:49:13
Michael
Danke Uwe, ich versuche das Ganze mal umzusetzen!
Gruß
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Schleife mit zwei Bedingungen


Schritt-für-Schritt-Anleitung

Um eine Excel VBA Schleife zu erstellen, die zwei Bedingungen überprüft, kannst du den folgenden Code verwenden. Dieser Code kopiert bestimmte Zellinhalte in eine andere Arbeitsmappe, wenn die Bedingungen erfüllt sind.

Sub kopieren()
    Dim SP1, SP2, ZE As Integer
    Dim LR1, LR2, i As Double
    Dim TB1, TB2
    Set TB1 = ActiveSheet
    Set TB2 = Workbooks("Test.xlsx").Sheets(1)
    SP1 = 1 'Spalte A
    SP2 = 3 'Spalte C
    ZE = 2 'Erste Zeile, wegen Überschrift
    LR1 = TB1.Cells(Rows.Count, SP1).End(xlUp).Row 'letzte Zeile der Spalte

    For i = ZE To LR1
        If TB1.Cells(i, SP1) < 0 And TB1.Cells(i, SP2) = "False" Then
            LR2 = TB2.Cells(Rows.Count, SP1).End(xlUp).Row + 1
            TB2.Cells(LR2, 1).Value = TB1.Cells(i, SP1).Value 'kopiere Wert aus Spalte A
            TB2.Cells(LR2, 2).Value = TB1.Cells(i, SP2).Value 'kopiere Wert aus Spalte C
        End If
    Next i
End Sub

In diesem Beispiel wird eine For-Schleife verwendet, um durch die Zeilen der aktiven Tabelle zu iterieren. Die Bedingungen werden mit einer If-Anweisung überprüft. Stelle sicher, dass die Arbeitsmappe "Test.xlsx" bereits geöffnet ist.


Häufige Fehler und Lösungen

  • Problem: Arbeitsmappe nicht gefunden

    • Lösung: Stelle sicher, dass die Arbeitsmappe "Test.xlsx" geöffnet und der Name korrekt ist.
  • Problem: Schleife läuft nicht wie erwartet

    • Lösung: Überprüfe die Bedingungen in der If-Anweisung. Stelle sicher, dass die Zellreferenzen korrekt sind.
  • Problem: Falsche Daten kopiert

    • Lösung: Achte darauf, dass du die richtigen Spalten und Zeilen in den Cells-Methoden verwendest.

Alternative Methoden

Wenn du keine Schleifen verwenden möchtest, kannst du auch den Autofilter nutzen, um Daten zu filtern und dann zu kopieren. Das funktioniert schneller, wenn du mit großen Datensätzen arbeitest.

Sub autofilterKopieren()
    Dim TB1 As Worksheet, TB2 As Worksheet
    Set TB1 = ActiveSheet
    Set TB2 = Workbooks("Test.xlsx").Sheets(1)

    TB1.Range("A1:C1").AutoFilter Field:=1, Criteria1:="<0"
    TB1.Range("A1:C1").AutoFilter Field:=3, Criteria1:="False"

    TB1.Range("A2:C" & TB1.Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
    TB2.Cells(TB2.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial Paste:=xlPasteValues
    TB1.AutoFilterMode = False
End Sub

Praktische Beispiele

  1. Kopieren von Werten basierend auf Bedingungen

    • Verwende die oben genannten Codes, um Werte aus einer Tabelle zu kopieren, wenn der Wert in Spalte A kleiner als 0 ist und der Wert in Spalte C "False" ist.
  2. Daten in bestimmte Zellen einfügen

    • Du kannst die Cells-Methode nutzen, um gezielt in bestimmte Zellen zu kopieren. Zum Beispiel:
      TB2.Cells(5, 1).Value = TB1.Cells(i, 1).Value 'Kopiere in Zelle A5

Tipps für Profis

  • Vermeide Schleifen, wenn du mit großen Datenmengen arbeitest. Nutze stattdessen den Autofilter oder Blockoperationen, um die Effizienz zu steigern.
  • Teste immer deinen Code in einer Kopie deiner Arbeitsmappe, um Datenverluste zu vermeiden.
  • Nutze Debug.Print, um Variablen während der Ausführung zu überwachen und Fehler zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um mehr als zwei Bedingungen zu überprüfen? Du kannst das If-Statement erweitern, indem du weitere Bedingungen mit And oder Or hinzufügst.

2. Kann ich die Schleife auch mit einer Do While-Schleife verwenden? Ja, du kannst eine Do While-Schleife verwenden, um die gleichen Bedingungen zu überprüfen. Achte darauf, dass du die Z

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige