web-dev-qa-db-de.com

So löschen Sie eine Zeile basierend auf dem Zellenwert

Ich habe ein Arbeitsblatt, ich muss Zeilen basierend auf dem Zellenwert löschen.

Zu überprüfende Zellen sind in Spalte A angegeben.

Wenn die Zelle "-" enthält .. Zeile löschen

Ich kann keinen Weg finden, dies zu tun. Ich öffne eine Arbeitsmappe, kopiere den gesamten Inhalt in eine andere Arbeitsmappe und lösche dann ganze Zeilen und Spalten, aber es gibt bestimmte Zeilen, die basierend auf dem Zellenwert entfernt werden müssen.

Brauchen Sie Hilfe hier.

UPDATE

Beispieldaten, die ich habe

Sample

15
sikas

Der Screenshot war sehr hilfreich - der folgende Code erledigt die Arbeit (vorausgesetzt, die Daten befinden sich in Spalte A und beginnen mit A1):

Sub RemoveRows()

Dim i As Long

i = 1

Do While i <= ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count

    If InStr(1, ThisWorkbook.ActiveSheet.Cells(i, 1).Text, "-", vbTextCompare) > 0 Then
        ThisWorkbook.ActiveSheet.Cells(i, 1).EntireRow.Delete
    Else
        i = i + 1
    End If

Loop

End Sub

Beispieldatei ist freigegeben: https://www.dropbox.com/s/2vhq6vw7ov7ssya/RemoweDashRows.xlsm

12
Peter L.

Am einfachsten wäre dies mit einem filter .

Sie können entweder nach Zellen in Spalte A filtern, die nicht über ein "-" verfügen, und die Option "Kopieren/Einfügen" verwenden, oder (meine bevorzugte Methode) für alle Zellen, die über ein "-" verfügen, und dann alles auswählen und - Einmal löschen Wenn Sie den Filter entfernen, bleibt Ihnen alles übrig, was Sie brauchen.

Hoffe das hilft.

18
John Bustos

Sie können eine Formel wie die folgende in eine neue Spalte kopieren ...

=IF(ISNUMBER(FIND("-",A1)),1,0)

... dann sortieren Sie diese Spalte, markieren Sie alle Zeilen, in denen der Wert 1 ist, und löschen Sie sie.

9
weir

Wenn Ihre Datei nicht zu groß ist, können Sie immer nach der Spalte sortieren, in der - steht. Wenn sie alle zusammen sind, markieren Sie einfach und löschen Sie sie. Dann sortiere zurück zu dem, was du willst.

4
Jorjo Peralta

wenn Sie Zeilen löschen möchten, die auf einem bestimmten Zellenwert basieren . Nehmen wir an, wir haben eine Datei mit 10000 Zeilen und Felder mit dem Wert NULL . und basierend auf diesem Nullwert möchten alle diese Zeilen und löschen Aufzeichnungen.

hier ein paar einfache Tipps: Öffnen Sie zuerst den Dialog Suchen, und legen Sie auf der Registerkarte Ersetzen alle Zellen mit NULL-Werten mit Leer .. fest. Drücken Sie dann die Taste F5 und wählen Sie die Option Leer. Klicken Sie nun mit der rechten Maustaste auf das aktive Blatt , und wählen Sie "Löschen" und dann die Option "Ganze Zeile".

alle diese Zeilen werden basierend auf dem Zellenwert von Word NULL gelöscht.

2
zaheer

Sie können jede Zelle in Ihrem Bereich durchlaufen und mit der Funktion InStr prüfen, ob eine Zelle in Ihrem Fall eine Zeichenfolge enthält. ein Bindestrich.

Sub DeleteRowsWithHyphen()

    Dim rng As Range

    For Each rng In Range("A2:A10") 'Range of values to loop through

        If InStr(1, rng.Value, "-") > 0 Then 'InStr returns an integer of the position, if above 0 - It contains the string
            rng.Delete
        End If

    Next rng

End Sub
1
Francis Dean

Dies ist das AutoFilter-Makro, dem Sie eine Funktion zugrunde legen könnten:

Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:="=*-*", Operator:=xlAnd
Selection.AutoFilter

Ich verwende diese Autofilter-Funktion, um übereinstimmende Zeilen zu löschen:

Public Sub FindDelete(sCol As String, vSearch As Variant)
'Simple find and Delete
Dim lLastRow As Integer
Dim rng As Range
Dim rngDelete As Range
    Range(sCol & 1).Select
    [2:2].Insert
    Range(sCol & 2) = "temp"
    With ActiveSheet
        .usedrange
            lLastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
        Set rng = Range(sCol & 2, Cells(lLastRow, sCol))
            rng.AutoFilter Field:=1, Criteria1:=vSearch, Operator:=xlAnd
        Set rngDelete = rng.SpecialCells(xlCellTypeVisible)
            rng.AutoFilter
            rngDelete.EntireRow.Delete
        .usedrange
    End With
End Sub

nenne es wie:

call FindDelete "A", "=*-*"

Es hat mir viel Arbeit erspart. Viel Glück!

1
BeachBum68