it-swarm-id.com

Hapus satu baris dalam Excel VBA

Saya memiliki bagian kode ini yang menemukan baris Excel dari suatu item dari daftar dan menghapus item dari daftar. Yang saya inginkan ... adalah menghapus baris Excel juga.

Kodenya ada di sini

Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")    
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
   If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
            ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
            gksluri.RemoveItem gksluri.ListIndex
            Exit Do
    End If
Rand = Rand + 1
Loop
End Sub

Di mana saya menambahkan ws.Range (Rand, 1) .EntireRow.Delete adalah tempat saya ingin menghapus seluruh baris tetapi saya tidak tahu bagaimana melakukannya. Apa yang saya inginkan ... jika ia menemukan nilai yang sama di dalam sel seperti di beberapa item yang dipilih dari daftar saya untuk dapat menghapus seluruh baris di Excel dan item dari listbox. Ini berfungsi untuk menghapus item dari listbox tetapi saya tidak tahu cara menghapus baris juga

35
Andrei Ion

Solusi Chris Nielsen sederhana dan akan bekerja dengan baik. Pilihan yang sedikit lebih pendek adalah ...

ws.Rows(Rand).Delete

... perhatikan tidak perlu menentukan Shift ketika menghapus baris karena, menurut definisi, tidak mungkin untuk bergeser ke kiri

Kebetulan, metode pilihan saya untuk menghapus baris adalah menggunakan ...

ws.Rows(Rand) = ""

... di loop awal. Saya kemudian menggunakan fungsi Sortir untuk mendorong baris ini ke bagian bawah data. Alasan utama untuk ini adalah karena menghapus baris tunggal bisa menjadi prosedur yang sangat lambat (jika Anda menghapus> 100). Itu juga memastikan tidak ada yang terlewatkan sesuai komentar Robert Ilbrink

Anda dapat mempelajari kode untuk menyortir dengan merekam makro dan mengurangi kode seperti yang ditunjukkan dalam video expert Excel ini . Saya memiliki kecurigaan bahwa metode yang paling rapi (Range ("A1: Z10"). Sortir Key1: = Range ("A1"), Order1: = xlSortAscending/Descending, Header: = xlYes/No) hanya dapat ditemukan pada pra- 2007 versi Excel ... tetapi Anda selalu dapat mengurangi kode setara 2007/2010

Pasangan lebih banyak poin ... jika daftar Anda belum diurutkan berdasarkan kolom dan Anda ingin mempertahankan pesanan, Anda dapat menempelkan nomor baris 'Rand' di kolom cadangan di sebelah kanan setiap baris saat Anda mengulanginya. Anda kemudian akan mengurutkan berdasarkan komentar itu dan menghilangkannya

Jika baris data Anda berisi pemformatan, Anda mungkin ingin menemukan akhir rentang data baru dan menghapus baris yang Anda hapus sebelumnya. Itu untuk menjaga ukuran file tetap rendah. Perhatikan bahwa satu penghapusan besar pada akhir prosedur tidak akan mengganggu kinerja kode Anda dengan cara yang sama seperti menghapus baris tunggal

54
Ed Bolton

Lebih baik lagi, gunakan gabungan untuk mengambil semua baris yang ingin Anda hapus, lalu hapus semuanya sekaligus. Baris tidak perlu kontinu.

dim rng as range
dim rDel as range

for each rng in {the range you're searching}
   if {Conditions to be met} = true then
      if not rng is nothing then
         set rDel = union(rng,rDel)
      else
         set rDel = rng
      end if
   end if
 next

 rDel.entirerow.delete

Dengan begitu Anda tidak perlu khawatir tentang penyortiran atau hal-hal yang berada di bawah.

4
Jordan D. Karim

Ubah jalur Anda

ws.Range(Rand, 1).EntireRow.Delete

untuk 

ws.Cells(Rand, 1).EntireRow.Delete 
3
chris neilsen

Sesuatu seperti ini akan melakukannya:

Rows("12:12").Select
Selection.Delete

Jadi dalam kode Anda akan terlihat seperti ini:

Rows(CStr(Rand) & ":" & CStr(Rand)).Select
Selection.Delete
0
Matt Wilko