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

Forumthread: zeilen einfügen nach Datums wechsel

zeilen einfügen nach Datums wechsel
chris
Hallo an alle,
ich habe eine frage und brauche eure Hilfe.
Ich habe eine exceldatei,in Spalte C stehen untereinander Datum und Uhrzeit in den Zellen.
Z.b stehen manchmal 10 oder 5 oder 20 mal das gleiche Datum.
Ich möchte jetzt erreichen das immer wieder wenn ein anderes Datum kommt zwischen den Datums 5 Leerzeilen eingefügt werden.
ich habe es mit einer For next schleife versucht zu realisieren aber das dauert bei ca 30000 Einträgen sehr lange.
Würde mich über Hilfe freuen.
VieleN dank im vorraus !
beispiel:
01.01.2006 02:24
02.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
03.01.2006 02:24
04.01.2006 02:24
04.01.2006 02:24
04.01.2006 02:24
04.01.2006 02:24
04.01.2006 02:24
Immer wenn sich die uhrzeit ändert sollen 5 neue zeilen dazwischen eingefügt werden.
Anzeige
AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:05:27
Hajo_Zi
Hallo Chris,
man hätte auf Deine Code aufbauen könen.
Hast Du die Bildschirm aktualisierung abgeschaltet?
Hast Du die Berechnung auf manuell gestellt?

AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:26:08
chris
Hallo Hajo,
aktualisierungen usw.. sind abgeschaltet.
Aber trotzdem ziemlich langsam.
Und habe noch etwas festgestellt.Wenn ich mit meiner For nextschleife arbeite geht er nicht bis zum letzten wert.
Weil ja der counter am Anfang z.b 30000 ist aber wenn immer 5 zeilen eingefügt werden ist er ja weit über 30000 aber wie fange ich das ab ?
Hier ist mein Code bis jetzt:
Option Explicit
Sub start()
Dim x As Long
Dim alt
Dim neu
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For x = 16 To Cells(Rows.Count, 3).End(xlUp).Row
neu = Cells(x, 3).Value
alt = Cells(x + 1, 3).Value
If neu  alt And x  16 Then
Rows(x + 1 & ":" & x + 6).Select
Selection.Insert Shift:=xlDown
x = x + 6
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:38:45
ChrisL
Hallo Chris
Arbeite dich von unten nach oben...
For x = Cells(Rows.Count, 3).End(xlUp).Row To 16 Step -1
cu
AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:43:06
Hajo_Zi
Hallo Chris,
Excel ist ein vielseitiges Programm und man kann viele Probleme damit lösen. Jede positive Seite hat aber auch negative Aspekte - einer davon ist im Makrorecorder enthalten.
Die Bücher, die es zu Excel VBA gibt, erklären viele Funktionen, aber ich habe bisher nur in einem gelesen, dass der vom Makrorecorder aufgezeichnete Code bereinigt werden sollte.
Der Makrorecorder zeichnet alle Aktionen auf, u. a. auch das Auswählen einer Zelle oder eines eingebetteten Objektes (Bild, Diagramm, Zeichnungsobjekt usw.) dabei wird generell Select und Activate aufgezeichnet. Diese Befehle sind in VBA zu 99,9% nicht notwendig. Sie lassen den Bildschirm flackern und senken die Geschwindigkeit bei der Ausführung des Codes. Man sollte also schon von Beginn an bei der Programmierung darauf achten, solche Befehle zu vermeiden. Meine Erfahrung mit dem Vorsatz: Das mache ich später ist, man schreibt das Programm später meist komplett neu. Also kostest es nicht nur Rechnerzeit sondern auch Deine Zeit und ist Dir Deine Zeit so wenig Wert?
Zum Vergleich mit und ohne Select schau Dir auch mal diese Beispielarbeitsmappe an: mit und ohne select Auf meiner Homepage sind alle meine Beispiele ohne Select. Da kann man sich also einige Lösungsansätze zu diesem Thema ansehen.
Gruß Hajo
Anzeige
AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:46:28
chris
Danke aber wo finde ich eine Lösung für mein problem also das einfpgen von zeilen nach datumswechsel ?
Bitte dir mir zu helfen Hajo,
Kann hier nicht so viel auf Webseiten surfen.
Hoffe das verstehst Du.
gruß Chris
AW: ohne select
01.09.2009 13:49:32
chris
Hallo Hajo ich noch einmal.
Das Problem mit dem select habe ich gelöst.
Rows(x + 1 & ":" & x + 6).Insert Shift:=xlDown
daran habe ich nicht gedacht.
Aber wie schaffe ich es bis zum ende durchzuarbeiten und so das die schleife nicht bei 30000 stoppt.?
Oder muss ich gleich von anfang an sagen for x = 16 to 56000 ?
Anzeige
AW: ohne select
01.09.2009 13:57:16
Hajo_Zi
Halo Chris,
Du solltest Deine Schleife von Hinten nach vorne laufen lassen. Die neu eingefügten Zeilen werden bei Deiner Schleife nicht beachtet.
Gruß Hajo
AW: ohne select
01.09.2009 14:09:18
chris
Danke hajo und ChrisL,
habe es jetzt so gelöst.
For x = 16 To Rows.Count
und am ende der schelife habe ich eine if abfrage:
If Cells(x, 3) = "" Then
Exit Sub
End If
So klappts.
Danke euch !!!
Anzeige
AW: ohne select
03.09.2009 08:14:30
David
Hallo Chris,
das ist definitiv nicht der Weg, um deinen Code schneller und richtiger zu machen. Warum beachtest du nicht die Lösungsvorschläge von ChrisL und Hajo? Wenn du die Antworten sowieso nicht richtig liest, brauchst du hier auch nicht zu fragen!
Gruß
David
AW: ohne select
03.09.2009 14:14:38
chris
Hallo David,
bevor du mich dumm anredest hier im Forum schau Dir doch meine beiträge einmal an.
ich habe geschrieben das die Lösungsvorschläge mit der Schleife rückwerts nicht funktionieren bei mir !
Deshalb habe ich den anderen Weg genommen.
Danke
Anzeige
AW: ohne select
03.09.2009 14:35:45
David
Normalerweise sollte ich darauf nicht antworten.
Hast du es denn wirklich probiert?
Der Code
Option Explicit
Sub insert()
Dim l_row, i
l_row = Range("A65500").End(xlUp).Row
For i = l_row - 1 To 1 Step -1
If Cells(i, 1)  Cells(i + 1, 1) Then
Rows(i + 1 & ":" & i + 7).insert shift:=xlDown
End If
Next
End Sub
macht bei mir genau das was du möchtest (im Beispiel stehen die Daten in den Zellen A1 bis A20.
Gruß
David
Anzeige
AW: noch eine Bitte
01.09.2009 14:18:00
chris
Sorry Hajo,
jetzt muss ich noch einmal aufmachen.
Ich wollte gerade noch einen Timer einbauen also eine userform die mir Anzeigt wie weit der aktuelle fortschritt ist.
Könntest du mir bitte helfen ? ich weiß nicht wie ich bei meinem Code anfangen soll.
Weil Sie ja das ganze nicht auf die for schleife bezieht weil die ja einfach abgebrochen werden kann.
So das ich nicht auf 100% gehen kann.
Könntest Du mir ein bischen helfen ?
Hier mein Code:
Option Explicit
Sub start()
Dim x As Long
Dim alt As Date
Dim neu As Date
Dim start As Date
Dim ende As Date
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
start = Timer
For x = 16 To Rows.Count
If Cells(x, 3) = "" Then
Exit Sub
End If
neu = Cells(x, 3).Value
alt = Cells(x + 1, 3).Value
If neu  alt And x  16 Then
Rows(x + 1 & ":" & x + 5).Insert Shift:=xlDown
x = x + 5
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
ende = Timer
MsgBox ("           Abgeschlossen:" & Chr(10) & "Benötigte Zeit = " & Round(ende - start, 2)  _
& " Sekunden"), vbInformation, "Info"
End Sub

Anzeige
AW: zeilen einfügen nach Datums wechsel
01.09.2009 13:44:31
chris
Danke klappt aber nicht.
?
Weil ja immer wieder 6 nach unten gerutscht werden ?
Danke für den Tipp
So habe ich es auch schon versucht.
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeilen nach Datumswechsel in Excel einfügen


Schritt-für-Schritt-Anleitung

Um in Excel zwischen Datumswechseln automatisch 5 Leerzeilen einzufügen, kannst du den folgenden VBA-Code verwenden. Dieser Code geht davon aus, dass die Daten in Spalte C ab der Zeile 16 beginnen. Stelle sicher, dass du den Code in einem VBA-Modul deiner Arbeitsmappe einfügst:

Option Explicit

Sub ZeilenEinfügen()
    Dim x As Long
    Dim alt As Date
    Dim neu As Date

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For x = 16 To Cells(Rows.Count, 3).End(xlUp).Row
        If Cells(x, 3) = "" Then Exit Sub
        neu = Cells(x, 3).Value
        alt = Cells(x + 1, 3).Value
        If neu <> alt Then
            Rows(x + 1 & ":" & x + 5).Insert Shift:=xlDown
            x = x + 5
        End If
    Next

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

Häufige Fehler und Lösungen

  1. Code läuft nicht bis zum Ende:

    • Stelle sicher, dass du die Schleife von oben nach unten laufen lässt. Wenn du Zeilen einfügst, verschiebt sich die Position.
  2. Langsame Ausführung:

    • Schalte die Bildschirmaktualisierung und die automatische Berechnung ab, bevor du die Schleife startest. Dies beschleunigt den Prozess erheblich.
  3. Falsche Zeilenanzahl:

    • Wenn der Code nicht die erwartete Anzahl an Zeilen einfügt, überprüfe, ob die Bedingungen in der If-Anweisung korrekt sind und ob die Daten in der richtigen Spalte stehen.

Alternative Methoden

Eine alternative Methode besteht darin, die Schleife rückwärts auszuführen. Dies verhindert, dass die neu eingefügten Zeilen die Schleifenlogik stören:

For x = Cells(Rows.Count, 3).End(xlUp).Row To 16 Step -1
    ' Logik hier einfügen
Next x

Praktische Beispiele

Angenommen, du hast folgende Daten in Spalte C:

01.01.2023 10:00
01.01.2023 11:00
02.01.2023 09:00
03.01.2023 14:00

Nach dem Ausführen des VBA-Codes sollten zwischen den Datumswechseln 5 Leerzeilen eingefügt werden. Das Ergebnis wird so aussehen:

01.01.2023 10:00
01.01.2023 11:00

[5 Leerzeilen]

02.01.2023 09:00

[5 Leerzeilen]

03.01.2023 14:00

Tipps für Profis

  • Vermeide die Verwendung von Select und Activate in deinem Code, da dies die Ausführungsgeschwindigkeit verringert.
  • Nutze With-Anweisungen, um den Code übersichtlicher zu gestalten und die Leistung zu verbessern.
  • Füge einen Timer hinzu, um die Ausführungszeit deines Codes zu messen. So kannst du effizientere Lösungen finden.

FAQ: Häufige Fragen

1. Warum läuft der Code nicht richtig?
Achte darauf, dass die Daten korrekt formatiert sind und dass die Schleifenbedingungen richtig gesetzt sind.

2. Kann ich den Code auch für andere Spalten verwenden?
Ja, passe einfach die Spaltenreferenz im Code an, um Daten in anderen Spalten zu verarbeiten.

3. Wie kann ich den Code anpassen, um mehr oder weniger Zeilen einzufügen?
Ändere die Zahl in der Rows(x + 1 & ":" & x + 5)-Anweisung, um die Anzahl der einzufügenden Zeilen zu erhöhen oder zu verringern.

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