Supportnet Computer
Planet of Tech

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:
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.

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

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.

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

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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: