[belajar-excel] Jagged Array

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[belajar-excel] Jagged Array

Hilman
JAGGED ARRAY (Nested
Array)
 
Apaan tuh... Jagged array ??
Bentar ya... sebelum saya menjelaskan apa itu Jagged array, sy minta, bagi yg
ilmunya lebih tinggi, tolong jangan mengganggu ya..... sekali lagi sy minta
sebelum sy ber-atraksi, bagi yg ilmunya lebih tinggi jangan mengganggu ya...
he.he.. just kidding, sy soalnya teringat waktu masih jaman kuda gigit besi
dulu, waktu jaman bolos sekolah hanya untuk pergi ke pasar untuk ngeliat
atraksi si penjual obat jalanan, yg atraksinya itu kalo dibandingkan dengan
atraksi sulap jaman sekarang, keliatan  sekali kelasnya amatiran., he ... he. tp biar pun amatiran, waktu jaman
dulu... tetap aja sangat menghibur.  Jadi
si penjual obat tsb sebelum mulai atraksinya selalu bilang "Bagi yang
ilmunya lebih tinggi, tolong jangan mengganggu ya.." 
 
Lho...  ini kok malah ngelantur kemana-mana, katanya
mau jelasin "JAGGED ARRAY"... Apaan tuh Jagged Array??  Iya.. iya... sori deh, malah jadi ngelantur
nih... Jagged Array itu... apa ya..?  Gampangnya ... Jagged Array itu adalah Array yang mempunyai elemen yang
berupa Array juga. Nah Elemen yg berupa Array ini, mempunyai elemen juga  berupa Array, dan seterusnya... array
ber-elemen aray. Seperti halnya Nested IF, yaitu IF yang didalamnya terdapat
fungsi IF... Sekarang pertanyaanya ... sampai berapa level yg bisa diijinkan
Jagged Array dalam VBA  ???? Wah... kalo
itu sy sih ngga tau....  tapi kalo
menurut perkiraan saya... banyak.. sangat banyak..., sebanyak memory usage yg
diijinkan pada Excel.. untuk yg versi 2007 kayaknya memory-nya sampai dengan 2
Giga ya... cmiiw (lihat Task Manager, Tab Process, cari pada Image Name nya
"EXCEL", kemudian liat Memory Usage).
 
Kalo cuma begitu, mah tidak
perlu di jelasin... semua orang juga sudah bisa ngebayangin kalo Jagged array
atau Nested Array itu…ya... seperti itu tadi... ya... seperti yg sudah
dijelasin itu tadi... he..he..  Berikut
ini contoh Jagged Array.
 
     MuridKelas(2)(3)
= “Tukul Arwana”
 
Artinya,
Murid ke 3 dari MuridKelas2 adalah “Tukul Arwana”
 
Sekarang,....pertanyaannya,
gimana caranya kita men-Declare array tersebut, gimana caranya kita mau
mengisi/mengganti nilainya, dan yang paling penting apa sih gunanya Jagged Array
tadi atau lebih tepatnya apa sih aplikasi nyata dari Jagged Array?????
 
Declare Jagged Array.
Untuk men-declare Jagged Array, terlebih
dahulu variablenya dideclare sabagai variant.
 
    Dim  MuridKelas as Variant
 
Lho, kok cuma
begini.???  Kalau bagini mah... sama aja
dengan men-deklarasikan variable biasa. Yes.... persis... yang terpenting dalam
array adalah gimana kita menentukan dimensinya. Karena sebelum array tsb
ditentukan dimensinya variable array tsb tidak bisa digunakan. Lantas,.. gimana
dong cara menentukan dimensinya??
 
Untuk menentukan dimensi array, diperlukan
sedikit trik,  sebagai contoh, variable MuridKelas  mempunyai 3 elemen, dimana masing-masing dari
keempat elemen ini, memilki 5 elemen lagi. Kodenya adalah...
  
    Dim
MuridKelas As Variant
    Dim
arrBantu As Variant
    Dim
i As Integer
   
    ReDim MuridKelas (1 to 3)
    ReDim arrBantu(1 to 5)
   
    For
i = LBound(MuridKelas) To UBound(MuridKelas)
        MuridKelas (i) = arrBantu
    Next i
 
Sekarang Jagged Array MuridKelas  tsb, baru bisa digunakan. Lho… kalo cuman
kaya gitu, kok repot-repot amat sih, kan bisa menggunakan Two Dimensional Array
seperti berikut ini…
 
            Dim
MuridKelas(1 to 3, 1 to 5) as String
 
Betul betul betul ? Ya… memang betul, jika jumlah elemen sub
array tsb sama, lebih baik menggunakan Two Dimensional Array, tetapi jika
jumlah elemen sub array nya tidak sama, ya… mau ngga mau kita harus menggunakan
Jagged Array. Berikut contoh untuk menentukan dimensi, jika misalanya
MuridKelas 1 jumlahnya 5 orang, Murid Kelas 2 jumlahnya 6 orang, Murid Kelas 3
jumlahnya 7 orang.
 
    Dim
MuridKelas As Variant
    Dim
arrBantu As Variant
    Dim
i As Integer
   
    ReDim MuridKelas (1 to 3)
   
    ReDim arrBantu(1 to 5)
    MuridKelas
(1) = arrBantu
 
    ReDim arrBantu(1 to 6)
    MuridKelas
(2) = arrBantu
   
    ReDim arrBantu(1 to 7)
    MuridKelas
(3) = arrBantu
 

Mengisi/Mengganti Nilai Jagged Array
 
Setelah dimensi Jagged Array sudah terdefinisi dengan jelas,
sekarang tinggal mengisi nilai dari elemen Jagged Array tsb.
           
            MuridKelas(1)(1) = “Miing Bagito”
            MuridKelas(1)(2) = “Didin Bagito”
            MuridKelas(1)(3) = “Unang Bagito”
            MuridKelas(1)(4) = “Eko Patrio”
            MuridKelas(1)(5) = “Parto Patrio”
 
MuridKelas(2)(1) = “Ajiz Gagap”
            MuridKelas(2)(2) = “Andre Taulani”
            MuridKelas(2)(3) = “Tukul Arwana”
            MuridKelas(2)(4) = “Nunung”
            MuridKelas(2)(5) = “Komeng”
            MuridKelas(2)(6) = “Adul”
 
MuridKelas(3)(1) = “Narji”
            MuridKelas(3)(2) = “Tarzan”
            MuridKelas(3)(3) = “Jojon”
            MuridKelas(3)(4) = “Mali”
            MuridKelas(3)(5) = “Bolot”
            MuridKelas(3)(6) = “Omas”
            MuridKelas(3)(7) = “Akri Patrio”
 
Untuk lebih jelasnya silahkan dicoba contoh pada prosedur
Example_01.
 
Aplikasi Jagged Array
Pada sheet Test, terdapat 200 item string yang tersusun secara
acak mulai dari cell A1 s/d A200. Tugas kita adalah mengelompokkan data string
tersebut pada kolom B dan seterusnya berdasarkan abjad (huruf pertama). Jadi
pada kolom B akan berisi data string yang berawalan A, kolom C berawalan huruf
B, dan seterusnya. Untuk lebih jelasnya lihat sub prosedur “Example_02”
 
Sub Example_02()
   
    'strHuruf           >>  Variable JaggedArray untuk mengisi data
string
    '                       yang sudah dikelompokkan
berdasarkan abjad
    'arrBantu           >>  Variable array untuk trik definisi dimensi
array
    'JumlahString       >>  Variable untuk menyimpan data Jumlah Seluruh
    '                       String yg akan
dikelompokkan
    'NoElemen           >>  Variable array (1 s/d 26 atau A s/d Z) untuk
    '                        menghitung jumlah
string yang diawali huruf
    '                       A s/d Z. Misalnya
NoElemen(2) = 5, berarti string
    '                        yang diawali
dengan hrf B jumlahnya ada 5.
    'sht                >>  variable object workhseet. Memudahkan
penulisan.
    'Huruf              >>  variable 1 s/d 26, yg menggambarkan abjad A
s/d Z
    'i, j               >>  Variable untuk membantu iterasi array
   
    Dim strHuruf As Variant
    Dim arrBantu As Variant
    Dim JumlahString As Long
    Dim NoElemen() As Long
    Dim sht As Worksheet
    Dim Huruf As Long
    Dim i As Long, j As Long
   
    Set sht = ThisWorkbook.Worksheets("Test")
       
    JumlahString =
WorksheetFunction.CountA(sht.Range("A:A"))
   
    'menetapkan dimensi array strHuruf mulai
dari huruf awal A s/d Z (1 s/d 26)
    ReDim strHuruf(1 To 26)
    ReDim NoElemen(1 To 26)
   
    'menetapkan dimensi sementara masing-masing
sub array
    ReDim arrBantu(1 To JumlahString)
    For i = 1 To 26
        strHuruf(i) = arrBantu
    Next i
   
    'mengelompokkan string sesuai abjad
    For i = 1 To JumlahString
        'huruf A=1, huruf B=2, dst
        Huruf = Asc(UCase(Left(sht.Cells(i, 1),
1))) - 64
        'menghitung jumlah abjad A, abjad B dst
        NoElemen(Huruf) = NoElemen(Huruf) + 1
        'mengelompokkan string sesuai abjad
        strHuruf(Huruf)(NoElemen(Huruf)) =
sht.Cells(i, 1)
    Next i
   
    'menetapkan dimensi akhir masing-masing sub
array
    For i = 1 To 26
        arrBantu = strHuruf(i)
        If NoElemen(i) = 0 Then NoElemen(i) = 1
        ReDim Preserve arrBantu(1 To
NoElemen(i))
        strHuruf(i) = arrBantu
    Next i
   
    'iterasi elemen-elemen array
    For i = LBound(strHuruf) To
UBound(strHuruf)
        For j = LBound(strHuruf(i)) To
UBound(strHuruf(i))
            sht.Cells(j, i + 1) =
strHuruf(i)(j)
        Next j
    Next i
   
End Sub
 
Untuk
menjalankan sub prosedur ini, bisa langsung dengan meng-klik tombol Test pada
sheet Test atau dengan menekan tombol F5 dari Visual Basic Editor Window.
 
Aplikasi
yang kita buat ini, adalah cikal bakal dari Algoritma Bucket Sort (Sorting
Array), karena dengan tinggal sedikit effort lagi, hanya tinggal men-sort
strHuruf(1) s/d strHuruf(26), misalnya dengan algoritma Selection Sort,  maka kita sudah bisa mendapatkan data array
yang sudah disort. Algoritma Bucket Sort ini jauh lebih cepat dibanding dengan
Algoritma Selection Sort, Bubble Sort bahkan Quick Sort untuk jumlah data yang
banyak (lebih dari 1000). Nanti cerita mengenai sorting array ini akan kita
lanjutkan dilain waktu dan kesempetan ya…
 
Sekali
lagi, sebenarnya fungsi Jagged Array pada contoh diatas, masih tetap dapat
digantikan dengan Two Dimensional Array. Pemanfaatannya sesuai selera.
 
 Regards
Hilman

Array Explanation 2.xlsm (88K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [belajar-excel] Jagged Array

HerrSoe
Terima kasih pak Hilman atas "bagi-bagi ilmu" nya..

Beberapa kali kami mempraktekkan cara ini tanpa mengetahui bahwa inilah
yg disebut 'jagged array',
Waktu itu hanya terpikir bahwa jika array diberi ELEMEN berupa Array maka
Arrray yg dijadikan elemen itu hanyalah menambah DIMENSI array induknya saja...

Ketika kami melihat "cara /pola" penulisannya di LocalWindow, kok spt itu
(index) (index) (index);  barulah kami bertanya tanya dlm hati..
tetapi karena masih dapat mengakses tiap elemen array dengan baik (dengan
meniru pola yg tampak di lokal windows) maka belum sempat lagi mencari
kejelasannya.

Dan sekarang, tiba-tba datang penjelasan pak Hilman itu.
Terima kash....

salam hormat
HerrSoe



2011/4/30 Hilman <[hidden email]>
>
> JAGGED ARRAY (Nested Array)
>
> Apaan tuh... Jagged array ?? Bentar ya... sebelum saya menjelaskan apa itu Jagged array,
> sy minta, bagi yg ilmunya lebih tinggi, tolong jangan mengganggu ya.....
'-----------------------