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 >> >> >> >> >> > >

