Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

vba zum löschen
#1

.xlsx   Mappe1.xlsx (Größe: 14,88 KB / Downloads: 14) Hallo,

ich habe eine Tabelle, in der 2 Blätter sind.

Blatt 1 = Daten
Blatt 2 = Zusammenfassung


In Blatt 1 stehen in Spalte  A Nummern, die ich brauche
In Blatt 2 stehen in Spalte B ebenfalls Nummern, allerdings auch welche, die ich nicht benötige

Wie muss das Makro aussehen, dass es die Zeile löscht, wenn keiner der Referenzwerte aus der Liste in Blatt 1 steht?

Ich bedanke mich im Voraus für die Unterstützung.

Viele Grüße
Andreas
Antwortento top
#2
Hallo Andreas,
teste mal das nachfolgende Makro, ob es Deinen Wünschen entspricht.

Code in die Zwischenablage
Option Explicit

Sub ZeilenLoeschen()
'Zeilen löschen, die nicht in der Referenzliste stehen
 Dim oDict As Object, vArr As Variant, WSh As Worksheet
 Dim iRow As Long, sKey As String, sBer As String
 
 Set oDict = CreateObject("Scripting.Dictionary")
'Benötigte Items aus Referenzliste ermitteln
 Set WSh = Sheets("Daten")                      'Referenzblatt
 sBer = "$A$1:$A$" & WSh.Cells(WSh.Rows.Count, "A").End(xlUp).Row
 vArr = WSh.Range(sBer)                         'Eingangsdaten ins Array übertragen
 With oDict
  For iRow = 1 To UBound(vArr)                  'Alle Zeilen durchgehen
    sKey = vArr(iRow, 1)
    If Not .Exists(sKey) Then                   'Item einmalig ins Dictionary
       oDict(sKey) = oDict(sKey) + vArr(iRow, 1)
    End If
  Next iRow
'Abgleich mit Zusammenfassung durchführen
  Set WSh = Sheets("Zusammenfassung")           'Ausgabeblatt
  For iRow = WSh.Cells(WSh.Rows.Count, "B").End(xlUp).Row To 1 Step -1
    If Not .Exists(WSh.Cells(iRow, "B").Value) Then
       Rows(iRow).Delete Shift:=xlUp
    End If
  Next iRow
 End With
End Sub
viele Grüße
Karl-Heinz
[-] Folgende(r) 1 Benutzer sagt Danke an volti für diesen Beitrag:
  • ari-2001
Antwortento top
#3
@Karl-Heinz: Ist das nicht mit Atombomben auf Amöben schießen?

Code:
Sub Loeschen()
Dim i As Long

For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
    If WorksheetFunction.CountIf(Sheets("Daten").Columns(1), Cells(i, 2)) = 0 Then
        Rows(i).Delete shift:=xlUp
    End If
Next i
End Sub
Schöne Grüße
Berni
[-] Folgende(r) 1 Benutzer sagt Danke an MisterBurns für diesen Beitrag:
  • ari-2001
Antwortento top
#4
Hallo Andreas,

probier mal:

Code:
Sub Andreas()
    Dim a As Range, b As Range
    Set a = Sheets("Daten").Range("A1:A9")
    'oder
    Set a = Sheets("Daten").Range("A1").CurrentRegion

    With Sheets("Zusammenfassung").Range("A1").CurrentRegion
        For Each b In .Columns(2).Cells
            If Not a.Find(b, lookat:=xlWhole) Is Nothing Then .Rows(b.Row).Clear
        Next b
    End With
End Sub

Sorry, muss weg. Arbeit wartet.

Gruß, Raoul
[-] Folgende(r) 1 Benutzer sagt Danke an Raoul21 für diesen Beitrag:
  • ari-2001
Antwortento top
#5
Hallo zusammen und vielen Dank.

Leider löscht er mir die Zeilen, in denen die Werte vorkommen,
er soll aber die Zeilen löschen, in denen die Werte NICHT vorkommen.

Wie fange ich das an?

Viele Grüße
Andreas
Antwortento top
#6
Kann ich zwar nicht nachvollziehen, aber dann schreibe im Code halt statt
= 0 Then
eben
> 0 Then

Auf Fragen in privaten Nachrichten antworte ich grundsätzlich nicht.
Schöne Grüße
Berni
[-] Folgende(r) 1 Benutzer sagt Danke an MisterBurns für diesen Beitrag:
  • ari-2001
Antwortento top
#7
Hallo Benni,

vielen lieben Dank, ich war einfach nur zu dösig Smile 

Je nachdem auf welchen Blatt ich grade aktiv bin, geht dein Code natürlich einwandfrei.
Wenn ich allerdings auch so blöd bin und das Makro auf dem Datenblatt auszuführen, darf ich mich nicht
wundern, wenn es nicht funktioniert!

Hab vielen lieben Dank und ein schönes Wochenende!

Andreas
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste