sedikit menambahkan saja... pinjem script mas Nang :
> Sheet1.ListObjects("Data").Resize Range("A7:D" & Range("data").Rows.Count > + 7 + Range("B4")) > Dari script tersebut : 1. sheet tertentu (entah apa namanya di tab sheet yang tampak dalam workbook), memiliki nama object Sheet1 yang dikenal sebagai sheet code name. 2. sebuah excel table dalam sheet tersebut diberi nama 'Data' 3. sebuah cells inputan angka tertentu di sheet tersebut, pada range B4 (asumsinya, inputan selalu numerik) 4. excel table dengan header (1 baris) di A7:D7 berisi 4 kolom 5. excel table minimal berisi 1 record kosong, berarti area excel table (lengkap beserta header) ada di range A7:D8 Tambahannya begini : 1. Persamaan dan perbedaan ListObjects("nama excel table").Range dengan Range("nama excel table") Persamaan : keduanya menghasilkan object range Perbedaan : ListObjects("nama excel table").range menghasilkan range beserta header, sedangkan Range("nama excel table") menghasilkan range tanpa header 2. Mengubah tinggi table (jumlah baris) TIDAK mengubah isi cells a. Pengubahan jumlah baris tidak akan mengubah nilai dalam setiap cells b. Tinggi tabel yang bertambah akan membuat baris berikutnya dalam worksheet menjadi bagian dari excel table, tetapi isinya tidak ada yang diubah c. Tinggi tabel yang berkurang akan membuat baris tertentu dikeluarkan dari excel table, tetapi isinya (nilai dalam cells) tidak ada yang diubah d. Dilakukan dengan cara mendefinisikan area range baru yang minimal berisi 1 baris header + 1 record (alias minimal berisi 2 baris) e. Hati-hati dengan pendefinisian area range baru yang sampai ke baris header atau malah sebelum baris header Contoh : 2.1. *Menambah* 1 baris with sheet1.listobjects("data") 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak ' jumlah baris (termasuk header) di tabel (.range.rows.count) *ditambah 1 baris* ( *+1* ) .resize .range.resize( .range.rows.count *+ 1* ) end with 2.2 *Mengurangi* 1 baris with sheet1.listobjects("data") 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak ' jumlah baris (termasuk header) di tabel (.range.rows.count) *dikurangi 1 baris* (* -1* ) .resize .range.resize( .range.rows.count *- 1* ) end with Script di atas akan berjalan dengan baik karena .range.rows.count - 1 selalu lebih dari 1 atau jika tabelnya kosong, selalu lebih dari 0. Tetapi, jika diberi kondisi untuk memastikan bahwa .range.rows.count - 1 selalu *lebih dari 1*, maka script akan menjadi seperti ini : with sheet1.listobjects("data") if .range.rows.count - 1* > 1* then 'baris yang baru pasti lebih dari 1 baris 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak ' jumlah baris (termasuk header) di tabel (.range.rows.count) *dikurangi 1 baris* (* -1* ) .resize .range.resize( .range.rows.count *- 1* ) endif end with 2.3. *Mengubah baris sebanyak* isian user (misal isian user di range B4) [jumlah baris tabel akan menjadi bertambah atau berkurang] with sheet1.listobjects("data") if .range.rows.count *+ sheet1.range("b4").value* *> 1* then 'baris yang baru pasti lebih dari 1 baris 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak ' jumlah baris (termasuk header) di tabel (.range.rows.count) *ditambah nilai di range B4* .resize .range.resize( .range.rows.count *+ sheet1.range("b4").value* ) endif end with Script di atas akan berjalan baik jika isi range B4 adalah angka (bertipe numerik). Untuk menghindari error, bisa diberi kondisi untuk memastikan bahwa range B4 berisi nilai bertipe numerik seperti script berikut : with sheet1.listobjects("data") if isnumeric( *sheet1.range("b4").value* ) then if .range.rows.count *+ sheet1.range("b4").value* *> 1* then 'baris yang baru pasti lebih dari 1 baris 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak ' jumlah baris (termasuk header) di tabel (.range.rows.count) *ditambah nilai di range B4* .resize .range.resize( .range.rows.count *+ sheet1.range("b4").value* ) endif endif end with 2.4. *Mengubah baris menjadi* sesuai isian user (misal isian user di range B4) [jumlah baris tabel akan menjadi bertambah atau berkurang] pada kondisi ini, maka isian user *minimal **2* baris (1 baris header + 1 record) with sheet1.listobjects("data") if isnumeric( *sheet1.range("b4").value* ) then if * sheet1.range("b4").value* *>= 2* then 'baris yang baru pasti lebih dari 2 baris 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak *nilai di range B4* .resize .range.resize( *sheet1.range("b4").value* ) endif endif end with 2.5 *Mengubah* *jumlah record tabel* *menjadi* sesuai isian user (misal isian user di range B4) [jumlah baris tabel akan menjadi bertambah atau berkurang] Karena isian user adalah nilai jumlah record (bukan jumlah baris tabel lagi), maka dipastikan *jumlah record* isian user *minimal 1*, sehingga pasti *jumlah baris* yang membutuhkan *minimal 2* akan terpenuhi with sheet1.listobjects("data") if isnumeric( *sheet1.range("b4").value* ) then if * sheet1.range("b4").value* *>= 1* then 'baris yang baru pasti minimal 2 baris karena 1 header + minimal 1 record 'tinggi tabel diubah (resize) menjadi di area range tabel saat ini (.range) yang diperluas (.resize) menjadi sebanyak *nilai di range B4 + 1 header* .resize .range.resize( *sheet1.range("b4").value* *+ 1 *) endif endif end with 3. Membuang record tabel (delete, TAPI bukan pencet tombol DELETE di keyboard ya, itu sebabnya disebut membuang) *** yang ini pembahasannya adalah record, jadi header tidak akan disertakan *** a. tabel minimal punya 1 record kosong b. tabel yang hanya punya 1 record kosong lalu delete record kosong tersebut akan menghasilkan error Contoh : 3.1 Membuang *1* record terakhir with sheet1.range("data") 'pada range tabel bernama 'data' 'ubah jumlah records menjadi *1* (*1* record yang akan di-delete) 'dari record pertama, lompat ( .offset ) sebanyak jumlah records dalam tabel ( .rows.count ) [sampai baris baru di bawah tabel] ' lalu naik 1 record ( - 1 ) [sampai record terakhir] 'buang ( .delete ) record terpilih (yaitu record terakhir) dengan opsi angkat seluruh cells dibawahnya mengisi area yang di-delete ( xlshiftup ) .resize( *1* ).offset( .rows.count - 1 ).delete xlshiftup '*1* adalah jumlah record yang akan dibuang end with Script di atas akan berjalan dengan baik selama tabel masih ada isinya* minimal 1 record*. Jika tabel berisi 1 record kosong, maka jadi : on error resume next with sheet1.range("data") 'ubah jumlah records menjadi *1* (*1* record yang akan di-delete) 'dari record pertama, lompat ( .offset ) sebanyak jumlah records dalam tabel ( .rows.count ) [sampai baris baru di bawah tabel] ' lalu naik 1 record ( - 1 ) [sampai record terakhir] 'buang ( .delete ) record terpilih (yaitu record terakhir) dengan opsi angkat seluruh cells dibawahnya mengisi area yang di-delete ( xlshiftup ) .resize( *1* ).offset( .rows.count - 1 ).delete xlshiftup '*1* adalah jumlah record yang akan dibuang end with err.clear on error goto 0 '0 : angka nomor baris script bernilai nol (bukan huruf O) 3.2 Membuang N records terakhir (maksimal sejumlah records yang ada), dengan N>0. Misal N adalah inputan user di range B4 Untuk hal seperti ini, lebih disarankan menggunakan variabel, karena akan membutuhkan pengaturan maksimal nilai yang diperbolehkan dim lRecsDelete as long 'variabel jumlah records yang akan dibuang on error resume next with sheet1.range("data") if isnumeric( sheet1.range("b4").value ) then 'range B4 berisi nilai bertipe numerik 'menentukan jumlah records yang akan di-delete (max : jumlah records tabel) lrecsdelete=sheet1.range("b4").value 'jumlah records yang di-delete = isi range b4 if lrecsdelete>0 then 'jumlah records yang di-delete > 0 if lrecsdelete > .rows.count then 'isian user lebih dari jumlah records tabel lrecsdelete=.rows.count 'jumlah records yang di-delete diubah menjadi sebanyak jumlah records tabel endif 'proses delete : 'dari record pertama tabel, ke baris terakhir tabel, yaitu : ' lompat (offset) sebanyak jumlah records dalam tabel alias ke baris baru di bawah tabel (.rows.count) ' lalu lompat naik 1 records ( - 1 ) [sampailah di record terakhir] 'kemudian blok (.resize) jumlah record yang akan di-delete ( 1 ) 'lakukan delete ( .delete ) dengan opsi angkat seluruh cells dibawahnya mengisi area yang di-delete ( xlshiftup ) .resize( lrecsdelete ).offset( .rows.count - lrecsdelete ).delete xlshiftup endif endif end with err.clear on error goto 0 3.3 Membuang N records mulai record ke-X (misal N di-input di range B4, dan X di-input di range B3) (mulai min record ke-1 dan max record terkahir [sejumlah records dalam tabel], sebanyak min 1 record dan max sebanyak records sejak record mulai sampai record terkahir dalam tabel) dim lRecsDelete as long 'variabel jumlah records yang akan dibuang dim lRecStart as long 'variabel nomor record yang mulai di-delete on error resume next with sheet1 'pada sheet1 '--- proses record mulai ---' if isnumeric( .range("b3").value ) then 'si X diisi nilai bertipe numerik lrecstart= .range("b3").value 'simpan nomor record mulai isian user if lrecstart>0 then 'nomor record mulai > 0 [minimal record ke-1] if lrecstart > .range("data").rows.count then 'nomor record mulai > jumlah records dalam tabel lrecstart= .range("data").rows.count 'nomor record mulai diset maksimal sejumlah records dalam tabel endif '--- proses jumlah record yang di-delete ---' if isnumeric( .range("b4").value ) then 'si N diisi nilai bertipe numerik lrecsdelete=.range("b4").value 'simpan isian user berupa jumlah records yang akan di-delete if lrecsdelete>0 then 'jumlah records yang akan di-delete > 0 [minimal 1] 'yang akan di-delete isian user > jumlah records dari nomor record mulai sampai record terakhir dalam tabel if lrecsdelete > .range("data").rows.count - lrecstart +1 then 'jumlah records yang di-delete menjadi sebanyak jumlah records dari nomor record mulai sampai record terakhir dalam tabel lrecsdelete=.range("data").rows.count - lrecstart +1 endif '--- proses delete ---' 'range data si tabel ( .range("data") ) 'yang disesuaikan jumlah records menjadi sebanyak jumlah records yang akan di-delete ( .resize( lrecsdelete ) ) 'lompat ( .offset ) ke record setelah nomor record mulai ( lrecstart ), lalu naik 1 record (-1) agar sampai di nomor record mulai 'buang records tabel terpilih ( .delete ) dengan opsi angkat seluruh cells dibawahnya mengisi area yang di-delete ( xlshiftup ) .range("data").resize( lrecsdelete ).offset( lrecstart -1 ).delete xlshiftup endif endif endif endif end with err.clear on error goto 0 Demikianlah sekiranya. Regards, Kid 2017-09-08 7:27 GMT+07:00 nangagus nanga...@gmail.com [belajar-excel] < belajar-excel@yahoogroups.com>: > > > Walaikumsalam warahmatullah > > Dear Shenly, > > Sebagai pemula excel saya bingung nihhh, > > "membuat macro untuk mendelet colom terakhir / paling bawah"; dimanakah > tempatnya kolom paling bawah? mungkinkah yang dimaksud kolom paling kiri > atau mungkin baris paling bawah? aduhh... jadi pusing kepala berbie.... > > anggap saja menambah baris dan menghapus baris paling bawah.... wong salah > juga gak apa-apa nanti akan diralat oleh member yang lain... > > Untuk menambah baris: > Sheet1.ListObjects("Data").Resize Range("A7:D" & Range("data").Rows.Count > + 7 + Range("B4")) > (saya juga kagak ngerti apa yang dimaksud nambah baris ini, apakah > menambah data dibawahnya atau memperluas tabel? karena yang dicontohkan > adalah tabel kosong berarti dianggap saja memperluas area tabel, sedangkan > menghapus baris adalah mempersempit area tabel.) > > untuk menghapus baris: > Sheet1.ListObjects("Data").Resize Range("A7:D" & Range("data").Rows.Count > + 6) > (Untuk menghapus baris inipun hanya mengurangi ukuran tabel, kalau mau > dihapus juga tidak ada datanya, ......) > > Yang terakhir..... kalau membuat macro penyimpanannya menggunakan file > xls, xlsm, atau xlsb. file yang dikirimkan saya cari macro yang sudah > dibuat tidak ada karena file yang dikirimkan dalam format xlsx. > > Wasalamualaikum warahmatullah. > > Agus > > > > On 08/09/2017 02:25, shenly_excelma...@yahoo.co.id [belajar-excel] wrote: > > > > Assalamualaikum Wr.Wb > > haloo para master, shenly kembali meminta bantuan, > > saya mempunyai kendala dalam pembuatan macro add dan dell pada colom tabel > excel, > > sebelumnya saya sudah mencoba, tapi hanya bisa menambahkan satu kolom satu > kolom saja, sementara yg saya inginkan, ketika sya memasukn jumlah misal > 10, maka kolom pada tabel akan bertambh 10, dan stau lagi sya tidak tau > cara membuat macro untuk mendelet colom terakhir / paling bawah. > > untuk lebih jelas, file sudah sya lampirkan. > > > terimakasih sebelumnya, > > salam, Shenly ^.^ > > >