Supportnet / Forum / Tabellenkalkulation
Zeilen bedingt löschen mittels makro
Frage
Hallo zusammen,
nachdem ihr mir schon einmal ganz prima geholfen habt, habe ich heute noch eine Frage. (Sicher kann ich mich mal revangieren...)
Ich habe folgende Excel-Tabelle:
A1: "ZU"
B1: "VB"
C1: "VS"
D1: "VB"
B1 und C1 können sich eventuell wiederholen. Jede Zeile hat außerdem noch ein Datumsfeld und ein "Schlüsselfeld" über das ich die einzelnen Zeilen als zusammengehörig identifizieren kann.
Ich möchte nun die Zeitdauer zwischen "ZU" und "VB" errechnen. Dabei stören die Zeilen mit "VB" und "VS" (Verbrauch und Verbrauchstorno), da sie sich gegeneinander aufheben.
Wie kann ich nun mittels eines Makros die störenden Zeilen löschen? Die Anweisung lautet ausgeschrieben: "Wenn für den selben Schlüssel auf ein VB ein VS folgt, lösche die beiden Zeilen."
Kann mir jemand helfen? Danke.
Viele Grüße und einen sonnigen Tag
Sven
Antwort 1 von piano
Hallo
Hier ein Versuch:
Ich nehme hier an, daß das Schlüsselfeld in Spalte 2 ("B") liegt. Die Zeile
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Hier ein Versuch:
Dim Zelle As Range
Dim Bereich As Range
Dim AnzahlZeilen As Integer
Dim i As Integer
Sheets(3).Activate
Set Bereich = Range("A1:a10")
For Each Zelle In Bereich
Adresse = Zelle.Row & ":" & Zelle.Row + 1
If Zelle.Value = "VB" Then
If Zelle.Offset(0, 1) = Zelle.Offset(1, 1) And Zelle.Offset(1, 0) = "VS" Then
Rows(Adresse).Select
Selection.Clear
End If
End If
Next Zelle
Bereich.Select
AnzahlZeilen = Selection.Rows.Count
i = 1
Do Until i = AnzahlZeilen
´Adresse = Zelle.Row & ":" & Zelle.Row
i = i + 1
If ActiveCell.Value = "" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub Ich nehme hier an, daß das Schlüsselfeld in Spalte 2 ("B") liegt. Die Zeile
Zitat:
If Zelle.Offset(0, 1) = Zelle.Offset(1, 1) And Zelle.Offset(1, 0) = "VS" Then
muß entsprechend angepaßt werden.If Zelle.Offset(0, 1) = Zelle.Offset(1, 1) And Zelle.Offset(1, 0) = "VS" Then
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von sprö
Hallo piano,
danke für Deine Hilfe.
Ich glaube, jetzt muss ich mich als völliger Visual-Basic-Beginner outen. Ich dachte zwar, dass ich mit meinen wenigen Programmierkenntnissen das schon schaffen würde, aber ...
Leider stoppt das Programm in Zeile 5 (Sheets (3)) mit der Meldung "Fehler beim Kompilieren: Außerhalb einer Prozedur ungültig" und markiert dabei die "3".
Und nun?
Viele Grüße
Sven
danke für Deine Hilfe.
Ich glaube, jetzt muss ich mich als völliger Visual-Basic-Beginner outen. Ich dachte zwar, dass ich mit meinen wenigen Programmierkenntnissen das schon schaffen würde, aber ...
Leider stoppt das Programm in Zeile 5 (Sheets (3)) mit der Meldung "Fehler beim Kompilieren: Außerhalb einer Prozedur ungültig" und markiert dabei die "3".
Und nun?
Viele Grüße
Sven
Antwort 3 von coros
Hi Sven,
die Zeile sagt aus, dass das 3. Tabellenblatt (gezählt wird von links nach rechts) aktiviert werden soll. Da ich mal davon ausgehe, dass Du kein 3. Tabellenblatt besitzt, also nur ein oder 2 Tabellenblätter in Deiner Datei vorhanden sind, erscheint dieser Fehler. Trage dort mal die Blattindexnummer (eine Zahl) des Blattes ein, beim dem der Code angewendet werden soll. Alternativ kannst Du dort auch den Realnamen des Blattes angeben. Dann muss der allerdings zwischen zwei Anführungszeichen ("")geschrieben werden.
Beispiel: Sheets("Tabelle1").Activate
Ich hoffe, Du kommst klar. Ansonsten melde DIch.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
die Zeile sagt aus, dass das 3. Tabellenblatt (gezählt wird von links nach rechts) aktiviert werden soll. Da ich mal davon ausgehe, dass Du kein 3. Tabellenblatt besitzt, also nur ein oder 2 Tabellenblätter in Deiner Datei vorhanden sind, erscheint dieser Fehler. Trage dort mal die Blattindexnummer (eine Zahl) des Blattes ein, beim dem der Code angewendet werden soll. Alternativ kannst Du dort auch den Realnamen des Blattes angeben. Dann muss der allerdings zwischen zwei Anführungszeichen ("")geschrieben werden.
Beispiel: Sheets("Tabelle1").Activate
Ich hoffe, Du kommst klar. Ansonsten melde DIch.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von sprö
Hallo Coros,
danke für Deine Erläuterung.
Ich habe das Programm noch durch
sub loeschen () und
Dim Adresse As Range
erweitert. Hoffe, das war richtig
Nun stoppt es aber mit der Meldung "Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt." Klicke ich auf debuggen, wird die erste Zeile "Adresse = Zelle . Row ((usw.))"
markiert.
Kannst Du mir noch einmal helfen? Danke.
Viele Grüße
Sven
danke für Deine Erläuterung.
Ich habe das Programm noch durch
sub loeschen () und
Dim Adresse As Range
erweitert. Hoffe, das war richtig
Nun stoppt es aber mit der Meldung "Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt." Klicke ich auf debuggen, wird die erste Zeile "Adresse = Zelle . Row ((usw.))"
markiert.
Kannst Du mir noch einmal helfen? Danke.
Viele Grüße
Sven
Antwort 5 von sprö
Hallo Coros,
ich hab´s selbst raus bekommen und außerdem auch noch um eine zweite Prüfung erweitert. Jetzt klappt´s.
Vielen Dank noch ´mal.
Sven
ich hab´s selbst raus bekommen und außerdem auch noch um eine zweite Prüfung erweitert. Jetzt klappt´s.
Vielen Dank noch ´mal.
Sven

