sorry bagian :
dim lArr(1 to 60000,1) as long, lLoop as long

menjadi :
dim lArr(1 to 60000,*1 to* 1) as long, lLoop as long


2013/8/25 Mr. Kid <[email protected]>

> 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