Mr Kid, Mr Tobby, Mr Nang Agus dan BeExceller,

Saya pakai macronya Mr Kid, tetapi tidak pas dengan Hasil Yang Diharapkan.
terlampir file yang menjadi percobaan; buat saya sulit banget untuk memahaminya.
Mohon dilihat sheet "Hasil Macro Yang Salah" dengan "Hasil Sheet Yang 
Diharapkan".
terima kasih,

ASL.


To: [email protected]
From: [email protected]
Date: Tue, 26 May 2015 04:17:46 +1000
Subject: Re: [belajar-excel] Menyatukan 2 atau 3 baris menjadi 1 baris data












































  


tampaknya mas Nang Agus kelupaan satu kondisi.


Sub kopi()
Dim baris As Long, tinggi As Integer, x As Integer
Dim wadah As String
tinggi = Range("c1000000").End(xlUp).Row
For x = tinggi To 7 Step -1
If Cells(x, 1).Value = 0 Then
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = ""
If Cells(x, 5).Value <> 0 Then
baris = Cells(x, 5).Value
Cells(x, 5).Value = ""
End If
Else
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = wadah
wadah = ""
   if Cells(x, 5).Value<>0 then
Cells(x, 5).Value = baris
   endif
End If


Next x
End Sub


Script diatas sekaligus menyusun sebuah data teks (lihat variabel bernama 
wadah) dari beberapa baris data. Tampaknya ini dimaksudkan untuk menyusun 
record data yang baik, sehingga tabel hasil bisa mengikuti kaidah tabel 
database yang baik pula.



Catatan :
1. variabel baris tampaknya untuk menyimpan suatu nilai numerik. Pada script di 
atas, tipe data di set menampung bilangan bulat saja dengan maksimum sekitar 2 
x 10^10 lebih dikit.
> andai data yang disimpan memiliki kemungkinan berjumlah digit lebih dari 9, 
> sebaiknya tipe data variabel baris diubah menjadi double


2. variabel tinggi untuk menyimpan nomor baris Excel terakhir yang akan 
diproses. Tipe data yang digunakan adalah integer yang dibatasi sampai 32000 
sekiun.
> Andai kemungkinannya baris Excel yang digunakan oleh data mencapai lebih dari 
> 32000 sekiun, maka sebaiknya tipe datanya diubah menjadi Long


3. variabel x yang digunakan dalam loop dengan for next juga seperti variabel 
tinggi.


4. untuk mendapatkan baris excel terakhir data bisa juga dengan bunyi kode 
berikut : (lihat baris kode set nilai tinggi)
      tinggi =  cells(rows.count,3).end(xlup).row      '3 adalah kolom c        
  'Range("c1000000").End(xlUp).Row


5. berhubung loop dengan for next, maka baris berbunyi for blabla akan 
dieksekusi 1 kali saja.
> berarti, baris :
           For x = tinggi To 7 Step -1
bisa diganti dengan :
           For x =  cells(rows.count,3).end(xlup).row  To 7 Step -1
dan menjadi hemat proses eksekusi karena baris 'tinggi=blabla' bisa dihapus, 
dan bagian deklarasi 'tinggi as blabla' juga bisa dihapus


6. penggabungan data bertipe teks (string) yang ada dalam script di atas tidak 
menyertakan delimiter antar teks yang digabung
> contoh baris :
       wadah = Cells(x, 3).Value & wadahandai Cells(x, 3).Value  bernilai 'Kid' 
 dan wadah  bernilai 'juga' hasilnya akan menjadi 'Kidjuga'
> bisa jadi akan tampak lebih baik bila diberi delimiter. Misalnya 
> delimiter-nya berupa sebuah karakter spasi. Maka barisnya menjadi :
       wadah = Cells(x, 3).Value & " " & wadah
yang bisa menghasilkan teks hasil penggabungan berbunyi 'Kid juga'



7. nomor 6 juga berlaku untuk baris kode berbunyi :
           wadah = Cells(x, 3).Value & wadah


8. variabel bernama wadah dan rujukan ke kolom C dengan Cells(x, 3) bertugas 
untuk menyusun sebuah teks dari beberapa baris teks


9. katanya, set string kosong akan lebih cepat diproses dan mudah tampak dalam 
editing script jika menghindari penggunaan "" dan lebih memilih menggunakan 
vbnullstring
> contoh :
         Cells(x, 3).Value = ""
katanya bisa lebih cepat diproses dan mudah tampak saat editing ketika 
menggunakan vbnullstring :
         Cells(x, 3).Value = vbnullstring
> hal ini berlaku untuk beberapa baris yang lain, termasuk set nilai string 
> kosong pada variabel bernama wadah


10. cells yang diset nilai dengan "" atau vbnullstring akan menjadi blank 
cells. jadi proses ini setara dengan penggunaan methods clearcontents milik si 
cells atau range


11. penghematan jumlah proses bisa dilakukan dengan meringkaskan si proses itu 
sendiri
> contoh pada beberapa baris berikut : (dengan proses penggabungan teks yang 
> sudah diperbaiki mengikuti nomor 7
         wadah = Cells(x, 3).Value & " " & wadah
         Cells(x, 3).Value = wadah
         wadah = ""
"wadah (yang baru) diisi dengan nilai dari Cells(x, 3).Value yang digabung 
dengan spasi dan isi wadah (yang lama)
lalu Cells(x, 3) diubah isinya dengan nilai yang disimpan dalam wadah (yang 
sudah baru)
kemudian isi wadah (yang sudah baru tersebut) dibuang isinya."


> proses seperti di atas bisa diringkas dengan :
         Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah         
wadah=vbnullstring
" Cells(x, 3) [yang baru] diisi dengan  Cells(x, 3) [yang lama] digabung dengan 
spasi dan isi wadah
lalu isi wadah dibuang."


> setidaknya hemat 1 proses


12. prosedur di atas menggunakan rujukan ke object yang ada di sheet aktif 
(pasti di workbook yang sedang aktif)




Kalau dikumpulkan semuanya, kira-kira prosedurnya menjadi :
Sub kopi()
    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, 1).Value = 0 Then
            wadah = Cells(x, 3).Value & " " & wadah
            Cells(x, 3).Value = vbnullstring
            If Cells(x, 5).Value <> 0 Then
                  baris = Cells(x, 5).Value
                  Cells(x, 5).Value = vbnullstring
            End If
        Else
           Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
           wadah = vbnullstring
           if Cells(x, 5).Value<>0 then
                Cells(x, 5).Value = baris
          endif
       End If
   Next x
End Sub




Sampai disini, kalau dilihat-lihat berulang-ulang mengikuti si proses loop, 
kondisi proses yang akan dicapai kira-kira bunyinya :
> mengikuti script di atas :
   a. kalau isi kolom A = 0, dilakukan :
            susun teks gabungan dan simpan di sebuah variabel
            pembersihan teks dari cell di kolom C
            a.1. kalau kolom E tidak 0, dilakukan :
                        penyimpanan nilai kolom E ke suatu variabel
                        pembersihan nilai dari cell di kolom E
   b. kalau isi kolom A <> 0   (bagian Else), dilakukan :
            tulis ke cell di kolom C gabungan nilai yang ada di kolom C dengan 
teks hasil gabungan yang disimpan dalam variabel
            buang gabungan teks dari variabel
            b.1. kalau kolom E bukan 0 alias ada isinya, dilakukan :
                         tulis ke cell di kolom E suatu nilai yang disimpan 
dalam variabel nilai


> jadi berdasar jabaran tentang kondisi dalam script tersebut di atas, 
> sebenarnya ada kondisi pokok sebagai berikut :
    1. ketika kolom E bukan 0 alias ada isinya (lihat b.1.) diperlukan 
memeriksa kolom A (lihat poin a dan b)
          > pada kolom E bukan 0 ini, proses dilakukan pada saat kolom A = 0, 
yaitu melakukan :
                 - penggabungan teks kolom C dan menyimpannya ke suatu variabel
                 - menyimpan nilai kolom E ke suatu variabel nilai
                 - membuang isi kolom C dan kolom E
         * kalau kolom A tidak 0, tidak diperlukan proses apapun karena memang 
sudah demikian adanya
    2. ketika kolom E = 0 dan kolom A <> 0
         > pada kondisi ini, dilakukan proses :
              - menulis ke kolom C, yaitu suatu nilai hasil penggabungan isi 
kolom C dengan isi variabel gabungan teks yang ada
              - membuang isi variabel gabungan teks
              - menulis ke kolom E, yaitu suatu nilai yang disimpan oleh suatu 
variabel nilai
    3. ketika kolom E = 0 dan kolom A = 0
         > pada kondisi ini, dilakukan proses :
              - menggabungkan teks nilai kolom C dengan hasil penggabungan yang 
ada ke suatu variabel gabungan teks
              - membuang isi kolom C


> sepertinya susunan kondisinya bisa berbentuk :
      if Cells(x, 5).Value<>0 then                                  'poin 1
             if Cells(x, 1).Value = 0 Then                                     
'kondisi dalam poin 1 alias poin 1.>.
                    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
                  Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
                  wadah = vbnullstring
                  Cells(x, 5).Value = baris
     else                                                                   
'poin 3
              wadah = Cells(x, 3).Value & " " & wadah
              Cells(x, 3).Value = vbnullstring
     endif


Jadi, susunan prosedurnya akan menjadi :
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
             if Cells(x, 1).Value = 0 Then                                     
'kondisi dalam poin 1 alias poin 1.>.
                    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
                  Cells(x, 3).Value = Cells(x, 3).Value & " " & wadah
                  wadah = vbnullstring
                  Cells(x, 5).Value = baris
        else                                                                   
'poin 3
              wadah = Cells(x, 3).Value & " " & wadah
              Cells(x, 3).Value = vbnullstring
        endif
   Next x
End Sub




Tentang :
gimana kalau macronya berjalan untuk semua sheet yang ada> merujuk ke nomor 12 
di atas sana, berarti dibutuhkan prosedur lainnya yang bertugas melakukan loop 
ke setiap sheet lalu mengaktifkan sheet tersebut. Kalau sheetnya sudah aktif, 
panggil prosedur di atas.
dim sht as worksheet
for each sht in thisworkbook.worksheets
    sht.activate
    kopi
next sht


Biasanya kalau sudah begini, akan ada pertanyaan : bagaimana kalau ada banyak 
workbook...
> rasanya sudah pada bisa.
> buat prosedur lainnya yang bertugas buka workbook (kalau belum dibuka) loop 
> di setiap workbook, lalu panggil prosedur yang loop setiap sheet tadi dan 
> ditutup dengan save workbook yang di loop dan tutup workbook yang di loop
> sebaiknya cari-carilah di postingan lawas tentang membuka workbook lain, 
> tentang loop setiap workbook, dan sebagainya.


Wassalam,
Kid






2015-05-25 18:42 GMT+10:00 Ahmad Syaifullah Lubis [email protected] 
[belajar-excel] <[email protected]>:











































  





Dear Mr Nang Agus,ternyata data kolom E nya menjadi salah, tidak sinkron dengan 
aslinya.terima kasih,ASL


To: [email protected]
From: [email protected]
Date: Mon, 25 May 2015 13:07:02 +0700
Subject: Re: [belajar-excel] Menyatukan 2 atau 3 baris menjadi 1 baris data

















































































Mohon maaf ada yang ketinggalan untuk kolom E, mungkin cekripnya begini:


Option Explicit
Sub kopi()
Dim baris As Long, tinggi As Integer, x As Integer

Dim wadah As String
tinggi = Range("c1000000").End(xlUp).Row
For x = tinggi To 7 Step -1
If Cells(x, 1).Value = 0 Then
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = ""
If Cells(x, 5).Value <> 0 Then
baris = Cells(x, 5).Value
Cells(x, 5).Value = ""
End If
Else
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = wadah
wadah = ""
Cells(x, 5).Value = baris
End If


Next x


End Sub


2015-05-25 12:52 GMT+07:00 Nang Agus <[email protected]>:
Mungkinkah macro begini?
Option Explicit
Sub kopi()
Dim baris As Integer, tinggi As Integer, x As Integer
Dim wadah As String
tinggi = Range("c1000000").End(xlUp).Row
For x = tinggi To 7 Step -1
If Cells(x, 1).Value = 0 Then
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = ""
Else
wadah = Cells(x, 3).Value & wadah
Cells(x, 3).Value = wadah
wadah = ""
End If
Next x


2015-05-25 10:11 GMT+07:00 Ahmad Syaifullah Lubis [email protected] 
[belajar-excel] <[email protected]>:










































































     






Dear BeExceller,

















































Saya mendapatkan data yang cukup membuat saya kewalahan, di mana data2nya 
biasanya hanya 1 baris, tetapi terkadang ada 2 atau 3 baris, sehingga saya 
kerepotan dalam menyatukannya menjadi 1 baris.Mohon diberikan macro yang bisa 
mengatasi masalah saya tsb.
terima kasih,
ASL






















































































































  


























































                                          

Attachment: MR KID_3 baris menjadi 1 baris.xlsm
Description: Binary data

Kirim email ke