Mr Kid,
terima kasih ya Mr Kid, cuman kenapa ya saldo awal muncul angka di kolom E,
seharusnya kolom D dan E untuk saldo awal kosong. cuman kalau sebelumnya saya
beri tanda petik (") di kolom D dan E maka waktu diproses macronya baru bisa
berjalan dengan sempurna.
Mohon koreksinya Mr Kid.
terima kasih,
ASL
To: [email protected]
From: [email protected]
Date: Wed, 27 May 2015 06:07:47 +1000
Subject: Re: [belajar-excel] Menyatukan 2 atau 3 baris menjadi 1 baris data
Hai Ahmad,
Kalau dilihat dari previewnya, sepertinya pengen ada tambahan syarat pokok
kolom D (kolom dikirinya yang kasus lalu, sesuaikan dengan keadaan nyatanya
bila ada kolom kosong diantaranya yang tak tampak) yang seperti kolom E.
Coba fokus pada blok IF dalam prosedur yang lalu :
public Sub kopi() 'tambahin explicit nya scope ah supaya mudah membacanya
Dim baris As double, x As long
Dim wadah As String
For x = cells(rows.count,3).end(xlup).row To 7 Step -1
if Cells(x, 5).Value<>0 then 'poin 1
diperjelas keterangannya -> kolom E <> 0
if Cells(x, 1).Value = 0 Then
'kondisi dalam poin 1 alias poin 1.>. -> kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
baris = Cells(x, 5).Value
Cells(x, 3).Value = vbnullstring
Cells(x, 5).Value = vbnullstring
endif
elseif Cells(x, 1).Value <> 0 then 'poin 2
-> kolom E=0 DAN kolom A <> 0
Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
wadah = vbnullstring
Cells(x, 5).Value = baris
else
'poin 3 -> kolom E=0 DAN kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
Cells(x, 3).Value = vbnullstring
endif
Next x
End Sub
Kondisi baru : (poin 1.5)
Kolom D memiliki karakteristik seperti kolom E
if Cells(x, 5).Value<>0 then 'poin 1
diperjelas keterangannya -> kolom E <> 0
if Cells(x, 1).Value = 0 Then
'kondisi dalam poin 1 alias poin 1.>. -> kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
baris = Cells(x, 5).Value
Cells(x, 3).Value = vbnullstring
Cells(x, 5).Value = vbnullstring
endif
elseif Cells(x, 4).Value<>0 then 'poin
1.5 diperjelas keterangannya -> kolom D <> 0
if Cells(x, 1).Value = 0 Then
'kondisi dalam poin 1 alias poin 1.>. -> kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
baris = Cells(x, 4).Value
Cells(x, 3).Value = vbnullstring
Cells(x, 4).Value = vbnullstring
endif
elseif Cells(x, 1).Value <> 0 then 'poin 2
-> kolom E=0 DAN kolom A <> 0
Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
wadah = vbnullstring
Cells(x, 5).Value = baris
else
'poin 3 -> kolom E=0 DAN kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
Cells(x, 3).Value = vbnullstring
endif
Sampai disini terjadi masalah berikut :
a. nilai dalam variabel 'baris' tidak diketahui sumbernya, yaitu dari nilai
kolom E (akibat mengerjakan poin 1) atau dari kolom D (akibat mengerjakan poin
1.5)
b. penulisan nilai yang disimpan dalam variabel bernama 'baris' adalah ke
kolom E saja (lihat yang merah)
Solusi untuk masalah untuk kasus :
a. disediakan sebuah variabel penyimpan nomor kolom sumber nilai yang diambil.
Jadi tugasnya menyimpan nilai 5 kalau mengambil nilai kolom E karena
mengerjakan poin 1, atau menyimpan nilai 4 kalau mengambil nilai kolom D karena
mengerjakan poin 1.5. Maka diblok poin 1 dan blok poin 1.5 nantinya akan diberi
baris kode pengisian nilai 5 atau 4 tersebut.
b. karena proses penulisan menggunakan posisi nomor row dan nomor column
seperti Cells(x, 5).Value yang berarti di cells row ke-x di column 5, berarti
angka 5 pada baris tersebut bisa diganti dengan variabel penyimpan nilai sumber
kolom (5 atau 4) yang menjadi solusi poin a diatas tadi.
Proses penerapan solusi :
1. butuh sebuah variabel baru penyimpan nilai 5 atau 4
> butuh deklarasi variabel baru yang datatype untuk numerik bilangan bulat
> saja, bisa byte, integer, atau long
> misal dipilih datatype Long supaya native dengan bit applikasi office yang
> digunakan yang 32 bit
> nama variabelnya misal diberi nama lKolomSumber
> bunyi deklarasinya :
dim lKolomSumber as long
2. setiap blok poin diberi baris kode untuk set nilai 5 atau 4 sesuai kondisi
ke variabel baru tersebut
> blok poin 1 dulu -> berdasar kolom E <> 0
* poin 1 menggunakan kolom E alias kolom nomor 5 sebagai kondisi
* berarti nilai variabel lKolomSumber diblok ini harus diisi dengan nilai 5
* prosesnya ditulis tepat setelah mengambil nilai dari kolom E
* berarti, setelah kode berbunyi :
baris = Cells(x, 5).Value
diberi proses pengisian nilai 5 ke variabel lKolomSumber dengan bunyi
berikut :
lKolomSumber=5
> blok poin 1.5 -> berdasar kolom D <> 0
* poin 1 menggunakan kolom D alias kolom nomor 4 sebagai kondisi
* berarti nilai variabel lKolomSumber diblok ini harus diisi dengan nilai 4
* prosesnya ditulis tepat setelah mengambil nilai dari kolom D
* berarti, setelah kode berbunyi :
baris = Cells(x, 4).Value
diberi proses pengisian nilai 4 ke variabel lKolomSumber dengan bunyi
berikut :
lKolomSumber=4
3. Penulisan isi variabel bernama 'baris' ke suatu cells dilakukan sesuai
kolom sumbernya
> kode penulisan nilai yang sudah ada dalam prosedur berbunyi :
Cells(x, 5).Value = baris
> pada kode di atas, kolom sumbernya ditunjukkan dengan angka 5
> berarti bagian angka 5 itulah yang harus diganti dengan variabel penyimpan
> nomor kolom sumbernya (nama variabelnya lKolomSumber kan ya)
> berarti bunyi kodenya akan menjadi :
Cells(x, lKolomSumber).Value = baris
Jadi prosedur yang sudah dikembangkan akan menjadi :
public Sub kopi() 'tambahin explicit nya scope ah supaya mudah membacanya
Dim baris As double, x As long
Dim wadah As String
dim lKolomSumber as long
'private cop as object 'dumb private object
For x = cells(rows.count,3).end(xlup).row To 7 Step -1
if Cells(x, 5).Value<>0 then ''poin 1
diperjelas keterangannya -> kolom E <> 0
if Cells(x, 1).Value = 0 Then
'kondisi dalam poin 1 alias poin 1.>. -> kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
baris = Cells(x, 5).Value
lKolomSumber =5
Cells(x, 3).Value = vbnullstring
Cells(x, 5).Value = vbnullstring
endif
elseif Cells(x, 4).Value<>0 then "poin
1.5 diperjelas keterangannya -> kolom D <> 0
if Cells(x, 1).Value = 0 Then
'kondisi dalam poin 1 alias poin 1.>. -> kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
baris = Cells(x, 4).Value
lKolomSumber =4
Cells(x, 3).Value = vbnullstring
Cells(x, 4).Value = vbnullstring
endif
elseif Cells(x, 1).Value <> 0 then ''poin 2
-> kolom E=0 DAN kolom A <> 0
Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
wadah = vbnullstring
Cells(x, lKolomSumber ).Value = baris
else
''poin 3 -> kolom E=0 DAN kolom A = 0
wadah = Cells(x, 3).Value & " " & wadah
Cells(x, 3).Value = vbnullstring
endif
Next x
End Sub
;)
Wassalam,
Kid