Help! Mengembalikan nomor urutan data yang dihapus

  1. 6 tahun lalu

    Siang master2 semua, saya membuat script hapus seluruh data cell terpilih sbb:

    Dim Ws As Worksheet
    Dim Kode As Variant
    Dim C As Range
    
        If MsgBox("Apakah Anda Yakin Akan Menghapus Data?  " & txtNama.Text, vbYesNo + 48, "Pesan") = vbYes Then
        Set Ws = Worksheets("CopyData")
        Kode = Me.txtNomorInduk.Value
        With Ws.Range("B2:B20")
            Set C = .Find(Kode, LookAt:=xlWhole)
            If Not C Is Nothing Then
            m_lRowIndex = C.Row
                Ws.Cells(m_lRowIndex, 1).Value = ""
                Ws.Cells(m_lRowIndex, 2).Value = ""
                Ws.Cells(m_lRowIndex, 3).Value = ""
                Ws.Cells(m_lRowIndex, 4).Value = ""
                Ws.Cells(m_lRowIndex, 5).Value = ""
                Ws.Cells(m_lRowIndex, 6).Value = ""
            C.EntireRow.Delete
            End If
        End With
    End Sub


    Nah yang ingin saya tanyakan, bagaimana agar nomor urut kembali berurutan sekalipun datanya sudah dihapus. (lih. Gambar berawarna merah)
    Thanks

    @Vei-Rid Siang master2 semua, saya membuat script hapus seluruh data cell terpilih sbb:

    Dim Ws As Worksheet
    Dim Kode As Variant
    Dim C As Range
    
        If MsgBox("Apakah Anda Yakin Akan Menghapus Data?  " & txtNama.Text, vbYesNo + 48, "Pesan") = vbYes Then
        Set Ws = Worksheets("CopyData")
        Kode = Me.txtNomorInduk.Value
        With Ws.Range("B2:B20")
            Set C = .Find(Kode, LookAt:=xlWhole)
            If Not C Is Nothing Then
            m_lRowIndex = C.Row
                Ws.Cells(m_lRowIndex, 1).Value = ""
                Ws.Cells(m_lRowIndex, 2).Value = ""
                Ws.Cells(m_lRowIndex, 3).Value = ""
                Ws.Cells(m_lRowIndex, 4).Value = ""
                Ws.Cells(m_lRowIndex, 5).Value = ""
                Ws.Cells(m_lRowIndex, 6).Value = ""
            C.EntireRow.Delete
            End If
        End With
    End Sub


    Nah yang ingin saya tanyakan, bagaimana agar nomor urut kembali berurutan sekalipun datanya sudah dihapus. (lih. Gambar berawarna merah)
    Thanks

    Coba ini :

    Sub ArrangeNum()
    Dim lstrow, i,
    lstrow = Range("B2:B99999").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 2 To lstrow
    Cells(i, 1).Value = i - 1
    Next i
    End Sub

    Silahkan dikembangkan sendiri ya ...

    Untuk rekan yg lain yg memiliki solusi atau ide lainnya, silahkan menambahkan

  2. Fujiansyah92

    9 Jan 2018 Terverifikasi Jawaban Terpilih + 4.131 Poin
    Di sunting 6 tahun lalu oleh Fujiansyah92

    @Vei-Rid Siang master2 semua, saya membuat script hapus seluruh data cell terpilih sbb:

    Dim Ws As Worksheet
    Dim Kode As Variant
    Dim C As Range
    
        If MsgBox("Apakah Anda Yakin Akan Menghapus Data?  " & txtNama.Text, vbYesNo + 48, "Pesan") = vbYes Then
        Set Ws = Worksheets("CopyData")
        Kode = Me.txtNomorInduk.Value
        With Ws.Range("B2:B20")
            Set C = .Find(Kode, LookAt:=xlWhole)
            If Not C Is Nothing Then
            m_lRowIndex = C.Row
                Ws.Cells(m_lRowIndex, 1).Value = ""
                Ws.Cells(m_lRowIndex, 2).Value = ""
                Ws.Cells(m_lRowIndex, 3).Value = ""
                Ws.Cells(m_lRowIndex, 4).Value = ""
                Ws.Cells(m_lRowIndex, 5).Value = ""
                Ws.Cells(m_lRowIndex, 6).Value = ""
            C.EntireRow.Delete
            End If
        End With
    End Sub


    Nah yang ingin saya tanyakan, bagaimana agar nomor urut kembali berurutan sekalipun datanya sudah dihapus. (lih. Gambar berawarna merah)
    Thanks

    Coba ini :

    Sub ArrangeNum()
    Dim lstrow, i,
    lstrow = Range("B2:B99999").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 2 To lstrow
    Cells(i, 1).Value = i - 1
    Next i
    End Sub

    Silahkan dikembangkan sendiri ya ...

    Untuk rekan yg lain yg memiliki solusi atau ide lainnya, silahkan menambahkan

  3. Di sunting 6 tahun lalu oleh Vei-Rid

    @Fujiansyah92
    saya coba ya.

    Sub ArrangeNum()
    Dim lstrow, i
    lstrow = Range("B2:B99999").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 2 To lstrow
    Cells(i, 1).Value = i - 1
    Next i
    End Sub

    Yess.... it's worked. Berhasil bang, thanks

  4. Di sunting 6 tahun lalu oleh Vei-Rid

    @Fujiansyah92
    @Caton
    dll

    Ada pertanyaan lanjutan seputar hapus-menghapus via userform, misalkan saya punya Sheet dengan cells mengandung rumus tertentu, bisakah saya menghapus valuenya tapi tidak menghilangkan rumusnya, mungkin abang2 master punya contohnya.
    thanks

  5. Caton

    9 Jan 2018 Terverifikasi Indonesia + 20.101 Poin

    Menghapus value pada sebuah sel yang merupakan hasil kalkulasi dari sebuah formula pada sel tersebut, artinya akan menghapus formula itu sendiri... :)

  6. @Caton

    Menghapus value pada sebuah sel yang merupakan hasil kalkulasi dari sebuah formula pada sel tersebut, artinya akan menghapus formula itu sendiri... :)

    Owh nooo....

    kira kira solusi apa yang bisa dilakukan agar tidak bulak balik memasukan rumus dari data yg sudah dihapus? jadipekerjaan bisa terus kontinyu. misal dalam kasus akuntansi or lainnya.
    ato bisakah rumus itu dimasukan via userform?

  7. Caton

    9 Jan 2018 Terverifikasi Indonesia + 20.101 Poin
    Di sunting 6 tahun lalu oleh Caton

    [1]. Gunakan Table Object sebagai tabel pengolahan data. Jangan gunakan range biasa. Dengan Table Object, akan lebih mudah mengisi sebuah formula oleh karena Table Object memiliki fitur AutoFill Formula. Dengan demikian, proses pengulangan untuk mengisi formula ke dalam setiap sel dapat dihindari...

    [2]. Formula dapat dibuat dengan melalui script. Bukankah setiap sel memilki property Formula atau FormulaR1C1 yang bisa digunakan untuk mengisi formula sebuah sel? Coba bermain-main dengan Macro Recording dan lihat bagaimana format formula yang dibuat oleh Excel. Modifikasi atau gunakan formula yang dibuat melalui Macro Recording tersebut ke dalam script yang mas susun.

    Demikian... ;)

  8. @Caton
    wow.....!!! ok deh dicoba dulu... diggin' the clue :D

  9. Di sunting 6 tahun lalu oleh Vei-Rid

    @Fujiansyah92 or @Caton
    saya mencoba script Sub ArrangeNum() yang dicontohkan bang Fujiansyah92, scriptnya berhasil. kemudian saya mencoba sedikit perubahan pada row di sheet data dengan cara menambah dua row diatas (maksudnya nantinya u/ judul), yang otomatis logika saya bahwa script pun harus dirubah sbb Cells(i, 1).Value = i - 3 yang awalnya i-1.
    Naaah... ketika aplikasi dijalankan, eng ing eng... ada value 0 dan -1 di row 2 dan 3 cell 1 yang tentu menghapus value/judul, jelasnya lihat gambar.

    Mohon pencerahannya, bagaimana agar 0 dan -1 tidak muncul dan menghapus data cell satu di row.

    Sub ArrangeNum()
    Dim lstrow, i
    lstrow = Range("B2:B20").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For i = 2 To lstrow
    Cells(i, 1).Value = i - 3
    Next i
    End Sub


    atau mungkin ada yg belum saya rubah atau ganti?
    dan ketika penghapusan dibatalkan value 0 dan -1 di row 2 dan 3 cell 1 tetap berjalan.
    thanks

  10. Caton

    10 Jan 2018 Terverifikasi Indonesia + 20.101 Poin
    Di sunting 6 tahun lalu oleh Caton

    Proses perulangan pada script mas @Fujiansyah92 di atas khan dimulai dari angka 2:

    For i = 2 To lstrow

    Klo i = 2 maka i - 3 = 2 - 3 = -1 ... :) Mengapa tidak mencoba mengubah indeks baris pada script Cells(i, 1) saja menjadi:

    For i = 2 To lstrow
       Cells(i + 2, 1).Value = i - 1
    Next i

    dengan demikian, jika i = 2, indeks barisnya akan menjadi i + 2 = 4 dan nilainya akan menjadi i - 1 = 1. Demikian... ;)

  11. Di sunting 6 tahun lalu oleh Vei-Rid

    @Caton

    Klo i = 2 maka i - 3 = 2 - 3 = -1 ... :) Mengapa tidak mencoba mengubah indeks baris pada script Cells(i, 1) saja menjadi:

    Iya ko logika saya ngga kesana ya, kurang teliti.. hahahaha... asli saya baca komentar bang Caton jadi ketawa... kenapa ngga kepikiran kesana hahahaha... (malu) :P :D :D thanks

    For i = 2 To lstrow
       Cells(i + 2, 1).Value = i - 1
    Next i


    it's working
    tapi ada kendala lain, setelah dieksekusi, urutan baris kosong jadi ada value nomer urutnya :)

    Setelah dicoba lagi, mungkin karena keduanya berada diluar range Table yang saya buat (blok table), mungkin ya???

  12. Caton

    10 Jan 2018 Terverifikasi Indonesia + 20.101 Poin

    Hehe... :) Iya, ini saya juga lupa. Modifikasi kembali scriptnya menjadi:

    For i = 2 To lstrow - 2
       Cells(i + 2, 1).Value = i - 1
    Next i

    Intinya, Cells(i + 2, 1) khan sudah ditambahkan 2 baris, maka batas maksimum indeks barisnya harus dikurangi 2 menjadi lstrow - 2. Demikian... ;)

  13. For i = 2 To lstrow - 2
       Cells(i + 2, 1).Value = i - 1
    Next i


    Yess berhasil.... hahahaha...
    Alhamdulillah bisa belajar yang lainnya lagi. Top markotop....

 

atau Mendaftar untuk ikut berdiskusi!