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

Forumthread: Zeilen verschieben wenn Bedingung erfüllt

Zeilen verschieben wenn Bedingung erfüllt
16.02.2017 10:37:06
Georg
Liebe Mitglieder:
Folgender code macht nicht exakt, das was ich möchte. Es scheitert an meinen wenigen VBA Kenntnissen:
1. Es soll ein bestimmter Wert abgefragt werden(gleich oder kleiner): momentan w, es handelt sich eig. um einen Zeitwert von 10 Sekunden, ich hab es in eine Zahl umgewandelt. Lieber wäre mir aber wenn eine bestimmte Zelle, wo der Wert drin steht abgefragt wird.
2. Die Zeilen sollen nicht kopiert werden, sondert verschoben z. B. nach Tabellenblatt "Kleiner"
3. Wenn der Code durchläuft, werden vier Zeilen kopiert, es müssten aber 192 Zeilen gefunden werden, die diesen wert oder kleiner haben. (Hab ich über Filterfunktion überprüft. Ursache mir nicht klar?)
4. Schön wäre - aber kein MUSS - wenn man das dynamisch gestalten könnte mit rows.Count oder so. Momentan sind es immer 2000 Zeilen, aber das kann sich ändern.
Sub test()
Dim a As Long
Dim i As Long
Dim w As Long
w = 1.15740740740741E-04
Application.ScreenUpdating = False
a = 2
For i = 1 To 2001
With Worksheets(1)
If .Cells(i, "D") 

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen verschieben wenn Bedingung erfüllt
16.02.2017 11:14:56
Werner
Hallo Georg,
als erstes: Lass die Schleife mal rückwärts laufen. Vermutlich liegt es daran, dass mehrere Zeile verschoben werden sollen, die unmittelbar nacheinander stehen. Deshalb Schleife rückwärts.
For i = 2001 To 1 Step -1
Zur Dynamik: Da solltest du mitteilen, in welcher Spalte die letzte belegte Zeile ermittelt werden soll.
Gruß Werner
Anzeige
AW: Zeilen verschieben wenn Bedingung erfüllt
16.02.2017 11:37:55
Georg
Leider keine Verbesserung, ich hab nochmals es überprüft:
Der Code kopiert im momentanen Zustand nur die Zeilen, die den Wert 00:00:00 enthalten, das sind genau vier Stück, die anderen ignoriert er aus mir nicht erklärlichen Gründen.
Die Spalte, über die gezählt wird, kann gleich Spalte A sein.
Anzeige
falscher Datentyp
16.02.2017 12:19:49
Rudi
Hallo,
du hast w as Long deklariert. Long kann nur Ganzahlen aufnehmen. Ergo ist w = 0.
Dim w as Double
w = timeserial(0,0,Range("A1"))
Gruß
Rudi
AW: falscher Datentyp
16.02.2017 12:32:57
Georg
Hallo Rudi, schon viel besser (hätte ich auch selbst drauf kommen können...)
Wie kann ich die Zeilen verschieben - nicht kopieren?
Anzeige
AW: falscher Datentyp
16.02.2017 12:43:36
Rudi
Hallo,
Sub test()
Dim i As Long
Dim w As Double
Dim r As Range
w = TimeSerial(0, 0, Range("A1"))
Application.ScreenUpdating = False
With Worksheets(1)
For i = 1 To .Cells(Rows.Count, 4).End(xlUp).Row
If .Cells(i, 4) 

Gruß
Rudi
AW: falscher Datentyp
16.02.2017 14:41:36
Georg
Alles besten, vielen Dank Rudi!!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen verschieben in Excel bei erfüllten Bedingungen


Schritt-für-Schritt-Anleitung

Um in Excel Zeilen automatisch zu verschieben, wenn eine bestimmte Bedingung erfüllt ist, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen und dann auf Modul.
  3. Füge den folgenden Code ein:

    Sub ZeilenVerschieben()
       Dim i As Long
       Dim w As Double
       w = TimeSerial(0, 0, Range("A1")) ' Wert aus Zelle A1 abfragen
       Application.ScreenUpdating = False
       With Worksheets(1)
           For i = .Cells(Rows.Count, 4).End(xlUp).Row To 1 Step -1
               If .Cells(i, 4) <= w Then
                   .Rows(i).Cut Destination:=Worksheets("Kleiner").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
               End If
           Next i
       End With
       Application.ScreenUpdating = True
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus:

    • Drücke ALT + F8, wähle ZeilenVerschieben aus und klicke auf Ausführen.

Mit diesem Code werden die Zeilen, die den Wert in Zelle A1 erfüllen, in ein anderes Tabellenblatt namens "Kleiner" verschoben.


Häufige Fehler und Lösungen

  • Fehler: Zeilen werden nicht verschoben:

    • Stelle sicher, dass der Wert in Zelle A1 korrekt ist und dass Du die richtige Spalte überprüfst. Der Code verwendet Spalte D.
  • Fehler: Falscher Datentyp:

    • Wenn Du Long für w verwendest, kann das zu Problemen führen. Verwende stattdessen Double, um auch Zeitwerte korrekt zu erfassen.

Alternative Methoden

Falls Du keine VBA-Lösung verwenden möchtest, kannst Du auch die Filterfunktion in Excel verwenden, um die Zeilen, die die Bedingung erfüllen, anzuzeigen und manuell zu verschieben.

  1. Filter aktivieren:

    • Markiere die Daten und gehe zu Daten > Filter.
  2. Bedingung festlegen:

    • Wähle die Spalte aus, die Du filtern möchtest, und setze die Filterkriterien.
  3. Zeilen manuell verschieben:

    • Kopiere die gefilterten Zeilen und füge sie in das gewünschte Tabellenblatt ein.

Praktische Beispiele

  • Beispiel 1: Du möchtest alle Zeilen verschieben, bei denen der Zeitwert in Spalte D kleiner oder gleich dem Wert in Zelle A1 ist.

  • Beispiel 2: Du kannst den Code anpassen, um andere Bedingungen zu verwenden, wie z.B. If .Cells(i, 4) = "erledigt" Then um die Zeilen zu verschieben, die als "erledigt" markiert sind.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms während des Makroablaufs zu reduzieren.
  • Füge Fehlerbehandlungsroutinen hinzu, um das Makro robuster zu gestalten.
  • Teste den Code in einer Kopie Deiner Excel-Datei, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Bedingungen zu berücksichtigen? Du kannst die If-Bedingung erweitern, indem Du logische Operatoren wie And oder Or verwendest.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in Excel 2010 und neueren Versionen funktionieren. Achte darauf, dass die Makros aktiviert sind.

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