Hehehe...
Sepertinya dah keduluan pak Anton. Cm sayang, blm masuk email saya (tahunya
lihat ke website milis).

Btw,
Untuk option base 0 yg sudah jadi default vba, deklarasi array bisa :
Dim arr(99999,0) as long

Wassalam,
Kid.
On Aug 26, 2013 9:54 AM, "Jan Raisin" <[email protected]> wrote:

> **
>
>
> mr Kid.. izin untuk nge-tes dan modifikasi skripnya ya ^_^
> biar ketularan pinternya xixixixi ^_^
>
> Public Sub Ikutan()
>     Dim rng As Range
>     Dim lArr(0 To 99999, 0 To 0) As Long, lLoop As Long
>     Dim dblTime As Double
>     dblTime = Timer
>      Set rng = Range("z1:z100000")
>     For lLoop = 1 To 100000
>           lArr(lLoop - 1, 0) = lLoop
>     Next lLoop
>     rng.Value = lArr
>     dblTime = Timer - dblTime
>     MsgBox "Waktu proses : " & dblTime & " detik"
> End Sub
>
> skrip yang Jan edit ditandai dengan warna merah dan menghasilkan nilai
> yang tepat untuk 100k data
>
> skrip dari mr. Kid ini memberikan pencerahan kepada Jan bahwa:
> 1. setiap cell pada dasarnya tersusun sebagai array multi dimensi
> 2. cara menghindari proses transpose array saat akan menulis data ke cel
> sehingga bisa menghemat waktu komputasi dan menghindari batasan jumlah data
> yang bisa ditranspose.
>
> skrip dari mr Kid adalah yang tercepat dari semua cara yang sudah Jan
> coba.. Superb..
>
> terima kasih, untuk pak De Premor yang sudah bersedia mengetes For Each vs
> For To.. hasil tesnya memberikan wawasan baru untuk Jan.. biasanya Jan
> selalu memilih For Each.. tapi sekarang akan melihat kondisi kasusnya
> dulu.. karena ternyata For To lebih cepat dari For Each..
>
> terima kasih untuk pak Hendrik.. dengan adanya thread seperti ini sangat
> membantu sekali untuk mengembangkan pengetahuan Be-Exceller.. biasanya
> newbie yang bertanya tapi sekarang masternya yang langsung memberikan
> kasus.. ^_^
>
> salam,
>
>
> -Miss Jan Raisin-
>
>
> Pada 25 Agustus 2013 01.02, hendrik karnadi <[email protected]>menulis:
>
>> **
>>
>>
>> Terima kasih Mr Kid.
>> Untuk Looping 100000 waktunya hanya 0,063 detik, tapi angkanya 0 semua,
>> bukan 1 s/d 100000.
>>
>> Salam,
>> HK
>>
>>   ------------------------------
>>  *From:* Mr. Kid <[email protected]>
>> *To:* BeExcel <[email protected]>
>> *Sent:* Sunday, 25 August 2013, 0:44
>>
>> *Subject:* Re: [belajar-excel] Tes Looping For ... Next dan For each ...
>> Next
>>
>>
>> Coba :
>> Public sub Ikutan()
>>     dim rng as range
>>     dim lArr(1 to 60000,1) as long, lLoop as long
>>     dim dblTime as double
>>     dbltime=timer
>>     set rng=range("z1:z60000")
>>     for lLoop=1 to 60000
>>          larr(lLoop,1)=lLoop
>>     next lLoop
>>     rng.value=lArr
>>     dblTime=timer-dbltime
>>     msgbox "Waktu proses : " & dbltime & " detik"
>> end sub
>>
>> Katanya fungsi transpose Excel terbatasi array-nya sebanyak 2^16, ada
>> yang bilang 2^24. Mungkin yang 2^16 di Office 32 bit dan 2^24 di Office 64
>> bit (tapi gak yakin juga kalau begitu). Yang jelas, tidak ada dokumentasi
>> resmi tentang hal ini.
>>
>> Sebuah cell pada dasarnya dibentuk sebagai array 2 dimensi (1 to 1,1 to 1)
>>
>> Walaupun topik ini menggunakan baris kode seperti membuat nomor urut,
>> sebaiknya setiap pembuatan nomor urut tidak terpaku pada proses loop
>> seperti ini saja. Untuk proses komputasi yang tidak sekedar membuat nomor
>> urut, maka topik ini bisa menjadi sebuah wacana untuk menyusun solusi
>> masalah yang dihadapi pada dunia nyata.
>>
>> Wassalam,
>> Kid.
>>
>> 2013/8/24 hendrik karnadi <[email protected]>
>>
>> **
>>
>>  Terima kasih Miss Jan atas variasi codenya.
>>
>> Hasil tes terakhir dengan looping 60000 adalah sebagai berikut:
>> 16.81  detik <--TES1 'For ... Next dengan formula
>> 1.24  detik <--TES2 'For ... Next tanpa formula
>> 1.37  detik <--TES3 'For each ... Next tanpa formula (For each r in Rng)
>> 1.34  detik <--TES4 'For each ... Next dengan formula (For each Rng in
>> Rng)
>> 0.05  detik <--TES5 (MJR) 'Tranpose Array
>>
>> Code Miss Jan saya modifikasi sbb:
>> Sub Tes5()
>>     Dim TStart As Single
>>     Dim myArray(0 To 59999) As Long 'sebelumnya 9999
>>     Dim i As Long
>>     Dim rng As Range
>>
>>     TStart = Timer
>>     For i = 1 To 60000 'sebelumnya 10000
>>         myArray(i - 1) = i
>>     Next i
>>     Set rng = Range("o1:o60000") 'sebelumnya 10000
>>     rng.Value = Application.WorksheetFunction.Transpose(myArray)
>>     Range("E5").Value = Format(Timer - TStart, "#,##0.0000")
>> End Sub
>>
>>   Jadi code Miss Jan is the best.
>>
>> Kesimpulannya:
>> - Tes2 lebih cepat dari Tes3 dan Tes4 (saya sependapat dengan Miss Jan)
>> karena ada proses pencarian r atau Rng pada       code: Range("C" &
>> r.Row) = r.Row atau Range("D" & Rng.Row) = Rng.Row
>> - Proses Array jauh lebih cepat, namun menyisakan satu pertanyaan ....
>> (mengapa 100k atau bahkan 70k selalu gagal         dengan pesan kesalahan 
>> "Type
>> mismatch" pada code:
>> rng.Value = Application.WorksheetFunction.Transpose(myArray)
>>
>> Salam,
>> HK
>>
>>
>> ------------------------------
>>  *From:* Jan Raisin <[email protected]>
>> *To:* [email protected]
>> *Sent:* Saturday, 24 August 2013, 14:10
>> *Subject:* Re: [belajar-excel] Tes Looping For ... Next dan For each ...
>> Next
>>
>>
>> boleh jawab kan pak Hendrik..
>>
>> sepengetahuan Jan, For Each - Next bekerja lebih cepat dibandingkan
>> dengan For To - Next, karena pada For Each tidak ada proses menghitung
>> lebih dahulu
>> ilustrasinya adalah begini:
>>
>> Di atas meja makan ada combro (kenapa combro? karena Jan senang makan
>> combro xixixixi ^_^)
>>
>> perintah 1: Untuk setiap combro yang ada, makan sampai habis >> for each
>> akan lebih cepat prosesnya jika dibandingkan dengan
>>
>> perintah 2: Untuk combro ke 1 sampai ke sekian makan sampai habis >> for
>> to
>> karena pada perintah ke-2 ada proses menghitung dahulu sebelum
>> Be-Exceller memakan combro yang ada di atas meja
>>
>> Tetapi hal ini akan akan berbeda jika ada pekerjaan yang harus dijalankan
>> lagi di dalam blok for each
>> pekerjaannya mana? bisa dilihat dari setiap titik yang ada dalam script
>> 1 buah titik mewakili 1 buah pekerjaan atau proses
>>
>> misal:
>> range("a1").select
>>  selection.value = 1
>>
>> akan diproses lebih lama dibandingkan script
>> range("a1").value = 1
>>
>> walau pun perbedaannya di komputer sekarang hampir tidak terasa
>>
>> coba lihat di prosedur Tes3 dan Tes4 saat akan memasukan nilai ada 1 buah
>> pekerjaan yang harus dilakukan dahulu yaitu mencari nilai barisnya terlebih
>> dahulu
>> sedangkan di prosedur Tes2 tidak ada pekerjaan tersebut
>>
>> oia.. Jan mau nyumbang script.. tapi minta tolong semua batasannya
>> diturunin dari 100k baris menjadi 10k baris
>> karena pada saat proses transpose untuk 100k selalu gagal.. mungkin nanti
>> mr Kid atau pak Anton bisa memberikan penjelasan penyebab gagalnya
>> transpose tersebut.
>>
>> prosesnya memanfaatkan array, karena proses baca tulis ke range lebih
>> lambat dibandingkan proses baca tulis melalui array
>>
>> Sub Tes5()
>>     Dim TStart As Single
>>     Dim myArray(0 To 9999) As Long
>>     Dim i As Long
>>     Dim rng As Range
>>
>>     TStart = Timer
>>     For i = 1 To 10000
>>         myArray(i - 1) = i
>>     Next i
>>     Set rng = Range("o1:o10000")
>>     rng.Value = Application.WorksheetFunction.Transpose(myArray)
>>     Range("E5").Value = Format(Timer - TStart, "#,##0.0000")
>> End Sub
>>
>> silakan coba dibandingkan hasilnya, di komputer Jan script tersebut
>> berjalan 32 x lebih cepat dibandingkan Tes2
>>
>> salam,
>>
>>
>> -Miss Jan Raisin-
>>
>>
>> Pada 24 Agustus 2013 11.25, hendrik karnadi 
>> <[email protected]>menulis:
>>
>> **
>>
>>  Dear Be Excellers,
>> Terlampir adalah hasil uji coba (tes) Looping For ...  Next dan For each
>> ...  Next pake timer.
>>
>> Pertanyaan:
>> Mengapa dengan menggunakan For ...  Next (Tes2, tanpa formula) hasilnya
>> lebih cepat dibandingkan dengan For each ... Next (Tes3 dan Tes 4).
>>
>> Salam,
>> HK
>>
>>
>>
>>
>>
>>
>>
>  
>

Kirim email ke