Hapus semua baris atau kolom jika memenuhi semua kondisi

1

Apa kode VB atau makro untuk melakukan ini -

pertanyaan sebelumnya dari bulan lalu

"Ke-3 kondisinya 'di bawah persentase / angka tertentu.' Itu harus memenuhi semua persyaratan. "

tampaknya tidak cukup spesifik sehingga detail diminta, jadi misalnya

jika A2 adalah <20%
jika B2 adalah> 30%
jika C2 adalah> 10
jika ketiga persyaratan di atas terpenuhi
hapus baris 2

Seluruh proses ini diulangi pada setiap baris berikutnya

bermain kittensat
sumber

Jawaban:

0

Loop akan berfungsi, tetapi autofilter akan bekerja lebih cepat. Dengan asumsi bahwa Anda memiliki header di baris (1) dan tidak ada baris kosong, ini akan menghapus baris yang memenuhi kriteria Anda:

Sub autofilterAndDelete()
dim lLastRow as long
application.screenupdating=false

lLastRow=cells(rows.count,1).end(xlup).row

With Range("A1:C1").resize(lLastRow)
    .AutoFilter field:=1, Criteria1:="<0.2"
    .AutoFilter field:=2, Criteria1:=">.3"        
    .AutoFilter field:=3, Criteria1:=">10"

    if application.worksheetfunction.subtotal(3,.columns(1))>1 then _
        .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete

    .AutoFilter
End With
application.screenupdating=true    
End Sub
gila
sumber
kira saya harus pergi dengan dan mencoba yang lebih cepat
kittensatplay
kode memberi kesalahan pada baris ini - .Resize (.Rows.Count - 1) .Offset (1) .Cell khusus (xlCellTypeVisible) .EntireRow.Delete
kittensatplay
Kesalahan akan terjadi jika tidak ada sel yang cocok dengan kriteria, atau jika Anda memiliki baris kosong di tengah data Anda. Saya menyesuaikan kode untuk memperbaikinya.
Singkatnya
yang terjadi adalah semua yang ada di sheet itu dihapus, saya akan coba lagi
kittensatplay
2

Berikut ini contoh kode untuk melakukan apa yang Anda katakan, gunakan .2 sebagai 20% dll karena itulah nilai sebenarnya. Lembar Pengganti (1) dengan lembar aktual tempat Anda melakukan ini.

Sub DeleteRows()
    Dim x As Long
    With Sheets(1)
        For x = .UsedRange.Rows.Count To 2 Step -1
            If .Cells(x, 1) < 0.2 And .Cells(x, 2) > 0.3 And .Cells(x, 3) > 10 Then
                .Rows(x).Delete
            End If
        Next
    End With
End Sub
Daniel
sumber