Daten als Teil eines VBA-Makros herausfiltern

Daten als Teil eines VBA-Makros herausfiltern

Ich versuche, ein Makro zu erstellen, das einen Bericht automatisiert. Das Problem ist, dass die Quelldaten Daten liefern, die wir nicht benötigen, und dass der Bericht selbst viele Berechnungen auf der Grundlage der gesamten Tabelle durchführt. Auf der Grundlage der Tabelle werden Hunderte von Berechnungen durchgeführt, sodass das Hinzufügen eines Einschlussparameters zu jeder Formel im Bericht unverhältnismäßig viel Zeit in Anspruch nehmen wird.

Dies lässt sich leicht umgehen, wenn Sie den Bericht manuell aktualisieren, indem Sie den Filter verwenden, Daten herausfiltern und die relevanten Daten löschen. Ich versuche jedoch, die Datei zu automatisieren, sodass wir einfach auf eine Schaltfläche klicken und sie aktualisieren können, ohne dafür 20 bis 30 Minuten aufwenden zu müssen.

Was ich daher tun möchte, was mir bisher aber nicht gelungen ist, ist, dass VBA jede Zeile löscht, deren Spalte eine bestimmte Zeichenfolge enthält.

Dies ist Teil eines größeren Makros, das Daten aktualisiert, eine Datumsspalte mithilfe von Text in Spalten korrigiert, einen Datenabschnitt löscht, die Formeln im KPI-Blatt berechnet und sie dann als Datum dieser Woche speichert.

Ich kann alle anderen Schritte problemlos automatisieren, da ich bereits mehrere Makros zum Aktualisieren anderer Berichte erstellt habe, aber das hier hat mich ratlos gemacht! Mein Google-Fu hat mich auch im Stich gelassen.

Antwort1

Dieses Sub löscht die gesamte(n) Zeile(n) eines Blattes, wenn ein durch die Variabledie Saitebefindet sich in der Spalte, die durch die Variable definiert istdie Kolumne

Sub deleterows()
    Dim a As Application
    Dim wkb As Workbook
    Dim wks As Worksheet
    Dim DataRange As Range
    Set a = Application
    Set wkb = ThisWorkbook
    Set wks = wkb.ActiveSheet
    wks.Application.ScreenUpdating = False
    thecolumn = 2 'this have to be changed to the desired column
    thestring = "some text" ' this have to be changed too
    reviewing = True
    visitrow = 1
    While reviewing = True
        visitrow = visitrow + 1
        If wks.Cells(visitrow, 1) = "" Then
            reviewing = False
        End If
        celldata = wks.Cells(visitrow, thecolumn)
        If IsNumeric(celldata) = True Then
            celldata = Trim(Str(celldata))
        End If
        If celldata = thestring Then
            wks.Rows(visitrow).Delete
            visitrow = visitrow - 1
        End If
    Wend
   wks.Application.ScreenUpdating = True
   Message = MsgBox("Finished!", vbOKOnly)
End Sub

verwandte Informationen