Sepertinya Pak Imam akhir-akhir ini sedang giat belajar VBA ya..
gimana jika garis besar prosesnya saja dulu ya...
Tahap pertama, telaah masalah.
1. Indikator pengaturan border horizontalnya adalah Kolom 3
>> artinya, data dimulai di kolom 1 yang berarti offset 2 kolom ke kiri
dari data di kolom 3.
>> kemudian dibutuhkan loop terhadap object range yang berisi data di kolom
3 tanpa header.
>> loop akan bergerak dari range pertama (record pertama) sampai record
terakhir
2. Kemudian jika ada *sel kosong pada kolom 3*, maka *sel kosong tsb
di-merger-kan dengan sel diatasnya*.
>> perhatikan contoh data di kolom 3 ini :
111 -> loop pertama : berisi nilai
-> loop kedua : kosong
-> loop ketiga : kosong
222 -> loop keempat : berisi data
>> loop pertama menjadi cell ke-1 yang akan dimerge. loop kedua dan ketiga
menjadi cell ke-2 dan ke-3
>> artinya, saat loop pertama atau saat bertemu cell yang berisi data, maka
cell itu disimpan pada sebuah variabel range. Jadi, buat variabel range dan
dalam loop di cek jika cell yang dikerjakan oleh loop berisi data, maka
simpan cell itu ke variabel awal merge ini.
>> loop pertama menjadi data ke-1 yang di-merge. cell kosong berikutnya
akan menjadi data ke-2,3,dst... yang berarti butuh variabel penyimpan
jumlah cell yang ditemui mulai dari cell isi pertama sampai cell kosong
terakhir sebelum bertemu cell ini.
>> jadi, saat dilakukan merge blok pertama (loop pertama sampai loop
ketiga), cell kerja loop sudah ada di loop ke-empat.
>> tepat sebelum harus simpan cell di loop keempat, maka dilakukanlah merge
blok pertama, yaitu mulai cell yang masih tersimpan dalam variabel range
awal merge sebanyak isi variabel penyimpan jumlah cell yang ditemui teoat
sebelum loop ke-empat
>> setelah proses merge, dilakukan set cell awal merge yang baru, yaitu
pada loop ke-empat.
>> juga di set ulang jumlah cell yang harus di-merge kembali ke 1, karena
loop ke-empat adalah cell ke-1 yang harus di-merge untuk blok merge kedua.
>> begitu seterusnya sampai selesai proses loopnya.
>> ketika proses loop selesai, jika jumlah cell yang akan di-merge masih
lebih dari 1, maka lakukan merge terakhir tepat setelah akhir blok loop.
3. Jika baris pada kolom 3 berisi data, maka border sebelah atas dari baris
tsb diberi garis dobel (Kecuali baris pertama). Sedangkan untuk baris data
terakhir, garis dobel dibubuhi pada border bawah.
>> artinya, secara konsisten yang diberi border dobel adalah pada baris
kosong terakhir.
>> baris kosong terakhir diketahui ketika proses loop sudah masuk ke loop
ke-empat untuk blok merge pertama (dari loop pertama sampai loop ketiga).
>> berarti, setelah proses merge blok pertama (lihat nomor 2), sebelum set
cell awal merge untuk blok merge kedua, harus ada proses pemberian border
dobel.
>> karena range kerja loop adalah sebuah cell dikolom 3 dan yang perlu
diborder adalah mulai kolom ke-1 sampai kolom ke-N, maka dari kolom ke-3
sampai kolom ke-1 harus lompat (offset) sebanyak 2 kolom ke kiri (negatif),
kemudian diperluas rangenya dari kolom ke-1 sampai kolom ke-N alias
sebanyak 1 baris dan N kolom (resize).
>> proses pemberian border untuk border dibawahnya range :
range_yang_harus_diborder.Borders(xlEdgeBottom).linestyle=xldouble
range_yang_harus_diborder.Borders(xlEdgeBottom).weight=xlthick
kerena border dobel bisa dilakukan jika garisnya tebal (thick).
>> Karena baris terbawah data juga harus diborder dobel, maka setelah blok
loop selesai, bila perlu setelah proses merge terakhir (lihat nomor 2),
dilakukan border xledgebottom lagi untuk seluruh area data (mulai kolom
ke-1 sampai kolom ke-N)
Kira-kira garis besarnya demikian.
Bentuk loop disetiap object adalah dengan
For Each variabel_object IN koleksi_object
next variabel_object
misal :
for each rngDiProses IN rangenya_kolom3
next rngDiProses
Untuk garis besar di atas, kira-kira bentuknya sebagai berikut :
'loop setiap range di kolom 3
'didalam loop ada tahap cek isi range yang sedang diproses oleh loop
(pada contoh for each diatas adalah cek isi rngDiProses)
'jika ada isinya, maka lakukan :
'1. merge cell dari cell awal diperluas sebanyak variabel
jumlah cell
rngAwalMerge.resize(variabel_jumlah_cell).merge
'2. beri border dobel dibawah range yang sedang diproses oleh
loop (misal di rngDiProses),
' tetapi mulai kolom ke-1 (offset 2 kolom kekiri) yang
diperluas 1 baris x sekian kolom data
'3. set cell awal merge baru (untuk blok merge berikutnya)
set rngawalmerge=rngDiProses
'4. set ulang jumlah cell kembali ke 1 karena cell awal merge
yang baru adalah cell pertama yang dimerge untuk blok merge tersebut
'jika tidak ada isinya alias kosong, maka lakukan :
'1. penambahan jumlah cell yang harus di-merge dengan 1
'sampai akhir loop, yaitu di baris Next
'setelah selesai, lakukan merge dari cell awal merge yang ada sebanyak
jumlah cell yang tercatat
'kemudian akhiri dengan memasang border dobel untuk sisi bawah
(xledgebottom) dari seluruh area data yang ada
Kira-kira demikian garis besarnya. Silakan dicoba.
Wassalam,
Kid.
2013/5/11 Imam Sinurat <[email protected]>
> **
>
>
>
> Yth. Para pakar dan rekan2 excellers…
>
> 1. Untuk mencetak hasil kerja, telah tersedia blanko Tabel Hasil pada
> sheet tersendiri, sebut saja sheet 'kuprint' (Situasi 1.), dengan status
> sheet sdg ter-hidden.
>
> 2. Proses kalkulasi data dilakukan di sheet lain, dan hasilnya
> di-copy-paste-values-kan ke dalam Tabel Hasil yang sudah tersedia tsb
> (Situasi 2.).
>
> 3. Langkah terakhir yang perlu dilakukan adalah mengatur border horizontal
> (memberi garis dobel), sehingga hasil akhirnya tampil seperti pada Situasi
> 3., dan langsung siap untuk diprint.
>
> Pertanyaan:
>
> Indikator pengaturan border horizontalnya adalah Kolom 3.
> Jika baris pada kolom 3 berisi data, maka border sebelah atas dari baris
> tsb diberi garis dobel (Kecuali baris pertama).
> Sedangkan untuk baris data terakhir, garis dobel dibubuhi pada border
> bawah.
> Kemudian jika ada sel kosong pada kolom 3, maka sel kosong tsb
> di-merger-kan dengan sel diatasnya.
>
> Mohon dibimbing menyusun kode makronya. Terima kasih sebelumnya.
>
> Wassalam
> Imam Sinurat
>
>