Jumat, 08 September 2017

[belajar-excel] Digest Number 4294

1 Message

Digest #4294
1a
Re: Auto add & dell kolom dalam tabel ????? by "Mr. Kid" nmkid.family@ymail.com

Message

Fri Sep 8, 2017 4:01 am (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.com

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 nangagus@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_excelmania@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 ^.^
>
>
>
============================================================
Pojok Lowongan Kerja yang disediakan milis :
http://milis-belajar-excel.1048464.n5.nabble.com/Pojok-Lowongan-Kerja-f5725753.html
*** Posting lowongan kerja : ke link tersebut dan klik New Topic
============================================================
bergabung ke milis (subscribe), kirim mail kosong ke: belajar-excel-subscribe@yahoogroups.com
posting ke milis, kirimkan ke: belajar-excel@yahoogroups.com
berkunjung ke web milis : http://tech.groups.yahoo.com/group/belajar-excel/messages
melihat file archive / mendownload lampiran : http://www.mail-archive.com/belajar-excel@yahoogroups.com/
atau (sejak 25-Apr-2011) bisa juga di : http://milis-belajar-excel.1048464.n5.nabble.com/
menghubungi moderators & owners: belajar-excel-owner@yahoogroups.com
keluar dari membership milis (UnSubscribe), kirim mail kosong ke : belajar-excel-unsubscribe@yahoogroups.com
---------------------------------------------------------------------

Tidak ada komentar:

Posting Komentar