Hallo,
es gibt zwar hier eine Menge ähnliche ANfragen aber leider keine die ich mit meinem nicht vorhandenen Wissen zu VBA so abändern kann dass es für mich passt.
Ich habe eine Liste von Flügen. Jeden Tag müssen hieraus an die 30 herausgelöscht werden.
Nun suche ich einen Code der folgendes macht -
Spalte B beinhaltet das Kürzel der Airline, Spalte C die Flugnummer. Ich möchte das beispielsweise die Flüge 1034, 3456, 7638 und 7820 von Air Berlin (BER) herausgelöscht - heisst die gesamte Zeile entfernt wird. Allerdings kann es vorkommen, dass eine andere Airline das gleiche Zahlenkürzel nutzt und ich so sicherstellen muss dass nur die Zeilen gelöscht werden in denen in Spalte B BER steht und in Spalte C die gesuchte Zahl.
Hoffe ich habe das genau genug beschrieben und Danke im Voraus für eure Hilfe.
Gruß
natürlich können wir was in VBA machen, aber versuche doch erst mal die Filter-Funktion zu verwenden. Ich habe Dir einen kleinen Screencast unter http://www.legnar.de/excel/filmchen/ abgelegt.
Also Lösen könntest Du das ganze wie folgt:
In einer Schleife fragst Du die Werte der Spalte A ab. Hast Du den oder die Werte gefunden, und in Spalte B steht Das gewünschte Kürzel, dann wird die Zeile gelöscht.
Aussehen könnte das so:
Sub ZeilenLöschen()
Dim i As Integer
Dim lz As Integer
Dim SuBe1 As String
Dim Sube2 As String
On Error Resume Next
SuBe1 = InputBox(„Wie lautet die zu löschende Flugnummer?“)
Sube2 = InputBox(„Von welcher Airline ist der Flug? (Bitte Kürzel eingeben)“)
lz = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'letzte beschriebene Zeile in Spalte 1 = A
’ Der Indize in Sheets(1) gibt die Position von links nach rechts des Tabellenblattes an!
'Du kannst es auch Ausschreiben bsp.: Sheets(„Sheetname“)
For i = 1 To lz 'durchläuft die Schleife bis zur letzten Zeile
If Sheets(1).Cells(i, 1).Value = SuBe1 And Sheets(1).Cells(i, 1).Value = Sube2 Then 'Cells(1,1) => Indizes stehen für Cells(Zeile, Splate)
Sheets(1).Rows(i & „:“ & i).Delete Shift:=xlUp
End If
Next i
End Sub
Hallo zuallererst einmal VIELEN HERZLICHEN DANK für deine Antwort - funktioniert soweit perfekt: nur noch ein paar kleine Änderungen.
Punkt 1 - ich Habe immer um die 20-30 Flüge von einer Airline die (Air Berlin) die aus der Liste gelöscht werden müssen. Ist es möglich die Abfrage so zu gestalten, dasss ich diese 20-30 Identifikationsnummer auf einmal eingeben kann und er alle auf einmal rauslöscht?
Punkt 2 - siehe hierzu die angehängte Abb. - manchmal in zeile 359 besitzt der flug nur eine Zeile in anderen Fällen wie in 360 zwei Zeilen und ansonsten 3. kann man die schleife so einstellen, dass sie nach besttigung der zu löschenden Flüge 3 mal durchläuft.
Punkt 3 - nicht wirklich wichtig aber hilfreich - gibt es nach dem durchlaufen des Makros die möglichkeit, eine Zusammenfassung anzuzeigen wie viele gelöscht wurden oder bzw. viele von den gewollt gelöschten nicht gefunden wurden ?
Hi,
ist ja klasse danke für das kleine filmchen…mit autofilter arbeite ich auch schon. Ich habe allerdings an die 30 - 40 Flüge die jeden Tag herausgenommen werden müssen und eine Lösung in VBA scheint mir da leichter -
ein anderer User hat mir die folgende Lösung gesendet
Aussehen könnte das so:
Sub ZeilenLöschen()
Dim i As Integer
Dim lz As Integer
Dim SuBe1 As String
Dim Sube2 As String
On Error Resume Next
SuBe1 = InputBox(„Wie lautet die zu löschende Flugnummer?“)
Sube2 = InputBox(„Von welcher Airline ist der Flug? (Bitte Kürzel eingeben)“)
lz = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 'letzte beschriebene Zeile in Spalte 1 = A
’ Der Indize in Sheets(1) gibt die Position von links nach rechts des Tabellenblattes an!
'Du kannst es auch Ausschreiben bsp.: Sheets(„Sheetname“)
For i = 1 To lz 'durchläuft die Schleife bis zur letzten Zeile
If Sheets(1).Cells(i, 1).Value = SuBe1 And Sheets(1).Cells(i, 1).Value = Sube2 Then 'Cells(1,1) => Indizes stehen für Cells(Zeile, Splate)
Sheets(1).Rows(i & „:“ & i).Delete Shift:=xlUp
End If
Next i
End Sub
Klappt soweit auch super allerdings habe ich dabei noch 3 dinge die sache rund machen würden. und zwar (beziehen sich auf den oben einfügen Code:
Punkt 1 - ich Habe immer um die 20-30 Flüge von einer Airline (bspw. Air Berlin) die aus der Liste gelöscht werden müssen. Ist es möglich die Abfrage so zu gestalten, dasss ich diese 20-30 Identifikationsnummer auf einmal eingeben kann und er alle auf einmal rauslöscht?
Punkt 2 - in manchen fällen sind jedem Flug (bspw BER-3456 3 verschiedene Zeiten(in drei aufeinaderfolgenden Zeilen zugeordnet). Manchmal gibt die Datenbank aber nur 2 zeiten (2 zeilen aus) und ansonsten halt nur eine. Ist es möglich den oben genannten COde so in schleife zu setzen, dass er entweder direkt alle (falls vorhanden löscht) oder in einfach 3 mal durchlaufen zu lassen.
Punkt 3 - nicht wirklich wichtig aber hilfreich - gibt es nach dem durchlaufen des Makros die möglichkeit, eine Zusammenfassung anzuzeigen wie viele gelöscht wurden oder bzw. viele von den gewollt gelöschten nicht gefunden wurden ?
Auch an Dich nochmal ein ganz großes Dankeschön für die Hilfestellung!
Grüße
Bubu
For i = 1 To 10
SuBe1 = Sheets(1).Cells(i, 1).Value
For n = 1 To 10
If Sheets(1).Cells(i, 1).Value = SuBe1 And Sheets(1).Cells(i, 1).Value = SuBe2 Then 'Cells(1,1) Then
Sheets(1).Rows(i & „:“ & i).Delete Shift:=xlUp
End If
Next n
Next i
Muss auf Deine Bedürfnisse angepasst werden.
In einer Tabelle kannst Du dann alle Flugnummern auflisten, die in der Äusseren Schleife in die Variable SuBe1 geschrieben werden. Die Innere durchläuft dann die Tabelle mit den Flügen.
Punkt 2)
Sicher geht alles, dazu müsste man die Struktur besser kennen. Ich kann mir grade nicht so richtig vorstellen was gemeint ist.
Punkt 3)
Mit einer Einfachen Countervariable, die bei jedem Schleifendurchlauf bei dem die If-Bedingung true ist erhöht wird kannst Du am Ende z.B. die Anzahl der gelöschten Flüge ausgeben.