Bu Jan Raisin. sudah bisa , dan terima kasih. Salam
Lukman 2013/4/12 Jan Raisin <[email protected]> > ** > > > coba ubah deklarasi fungsi-nya menjadi seperti ini: > > #If VBA7 And Win64 Then > Private Declare PtrSafe Function QueryPerformanceCounter Lib > "kernel32.dll" (ByRef lpPerformanceCount As LARGE_INTEGER) As Long > #Else > Private Declare Function QueryPerformanceCounter Lib "kernel32.dll" > (ByRef lpPerformanceCount As LARGE_INTEGER) As Long > #End If > > semoga bisa berjalan di semua versi excel baik 32-bit maupun 64-bit > > Wassalam, > > -Miss Jan Raisin- > > > Pada 11 April 2013 23.37, lkm jktind <[email protected]> menulis: > > ** >> >> >> Pak Kid. >> >> File yg bapak kirimkan di tempat . ada errornya >> >> excel yg aku gunakan ver 2010. 64bit >> OS nya : win 7 >> >> Bagaimana cara untuk memperbaikinya ? >> >> >> >> Lukman >> >> >> >> 2013/4/11 Mr. Kid <[email protected]> >> >> ** >>> >>> >>> Yup... penggunaan enum ataupun indeks akan lebih cepat dibanding inputan >>> untuk parameter yang berupa string. >>> Pada komputer sekarang, mestinya selisih ini tidak akan sampai 200 tick. >>> Perkiraannya hanya sekitar kurang dari 10 tick. >>> Jika terjadi perbedaan yang lebih dari 10 tick, bisa jadi karena proses >>> fungsinya yang bekerja lambat. >>> >>> Misal pada : >>> Columns("A:A").Find(vbNullString).Select >>> dan >>> Columns(1).Find(vbNullString).Select >>> >>> Perbedaan tick akibat indeks 1 maupun string input parameter "A:A" tidak >>> akan lebih dari 10 tick (tetap perkiraan wakakaka) >>> Sedang dampak dari performa fungsi Find (algoritma dalam fungsi Find) >>> cenderung lebih dominan. Jika pada jumlah record yang banyak, akan tampak >>> penurunan performa secara signifikan. >>> Proses sisi Columns tetaplah hanya 1 kali proses. Proses yang banyak ada >>> didalam fungsi Find. >>> >>> Tentu saja hal ini tidak akan lepas dari pengaruh lingkungan >>> (proses-proses lain dalam lingkungan [windows]). >>> Misal pada kasus : >>> Cells(Rows.Count, 1).End(3).Offset(1).Select >>> dan >>> cells(rows.count,1).end(xlup).offset(1).select >>> >>> secara logika, nilai 3 dan xlUp bukanlah merujuk kepada nilai >>> sesungguhnya. Nilai 3 adalah indeks panah ke atas keyboard, dan xlUp adalah >>> enum dari direction yang bernilai -4162. Penggunaan nilai 3 dan xlUp akan >>> mengalami proses penerjemahan menjadi nilai konstanta yang sesuai dengan >>> kebutuhan methods End. Jadi selisihnya pastilah tidak akan lebih dari 5 >>> tick (bahkan mungkin 1 atau 2 tick saja selisihnya). >>> Bahkan penggunaan nilai -4162 secara langsung pun tidak akan berpengaruh >>> besar. Andai lebih cepat pun kiranya sekitar 1 atau 2 tick juga. >>> Pada saat record sangat banyak, maka proses UP ke nilai data terakhir >>> akan menjadi semakin pendek. Pada jumlah record yang sedikit, proses UP >>> akan lebih panjang dan jumlah tick akan meningkat. >>> Jadi antara kedua script di atas, akan relatif dipengaruhi oleh : >>> 1. kondisi lingkungan (proses-proses lain yang diproses Windows, >>> sehingga terjadi antrian thread dalam prosesor) >>> 2. jumlah record yang menyebabkan perbedaan jarak saat proses UP. >>> >>> File terlampir bisa dicoba. >>> 1. Ketika range J4:J11 diisi dengan opsi_id yang bermacam-macam >>> 2. Ketika range J4:J11 diisi dengan sebuah opsi_id kemudian RUN, lalu >>> diganti opsi_id lain dan di-RUN untuk membandingkan antar opsi_id >>> >>> Tapi yang jelas, proses terhadap string pastilah lebih lambat dibanding >>> terhadap data numerik, apalagi data numerik dengan tipe data yang pas >>> dengan bit Operating System yang digunakan. Untungnya, kecepatan prosesor >>> saat ini, akan memberi perbedaan ketika jumlah prosesnya sangat buanyak >>> sekali. >>> >>> Mungkin gitu kali ya... kalau salah, mohon dikoreksi ya... >>> >>> Wassalamu'alaikum Wr. Wb. >>> Kid. >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> 2013/4/11 summonery <[email protected]> >>> >>>> ** >>>> >>>> >>>> Proses jadi lebih cepat dikarenakan penyampaian menggunakan index atau >>>> enumerasinya lebih cepat ditangkap oleh Excel ketimbang penyampaian >>>> menggunakan teks. >>>> >>>> coba juga, >>>> Cells(Rows.Count, 1).End(3)(2).Select >>>> >>>> *O iya, diluar asumsi kasus pak Hendrik, mungkin mis Jan tertarik >>>> bagaimana perbandingan performanya apabila: misal, data dati row1 s.d. >>>> row1000000 kesemuanya (kita ekstrimkan) merupakan nullstring. Kita ketik di >>>> cell A1 formula ="" kemudian copy paste sampai row1000000, setelah itu >>>> semuanya divaluekan, copypastespecial: value row1:row1000000.* >>>> * >>>> * >>>> * >>>> * >>>> >semoga bermanfaat >>>> >>>> >>>> --- In [email protected], Jan Raisin <miss.jan.raisin@...> >>>> wrote: >>>> > >>>> > ini adalah hasil percobaan dengan keempat script >>>> > >>>> > script 1 dari pak hendrik >>>> > script 2 dari mr kid >>>> > script 3 & 4 dari pak Anton >>>> > >>>> > hasilnya sbb: >>>> > >>>> > cara 1 : Columns("A:A").Find(vbNullString).Select Alamat akhir : $A$4 >>>> > Waktu : 0 | 4877 >>>> > cara 2 : cells(rows.count,1).end(xlup).offset(1).select Alamat akhir >>>> : $A$4 >>>> > Waktu : 0 | 1435 >>>> > cara 3 : Columns(1).Find(").Select Alamat akhir : $A$4 Waktu >>>> > : 0 | 2371 >>>> > cara 4 : Cells(Rows.Count, 1).End(3).Offset(1).Select Alamat akhir : >>>> $A$4 >>>> > Waktu : 0 | 589 >>>> > >>>> > ternyata yang paling cepat adalah script nomor 4 dari pak Anton, >>>> > padahal scriptnta mirip dengan script nomor 2 dari mr kid tapi >>>> perbedaan >>>> > waktunya bisa hampir sepertiganya sendiri. >>>> > >>>> > Bisa tolong dijelaskan oleh pak Anton atau mr Kid? >>>> > >>>> > Wassalam, >>>> > >>>> > -MJR- >>>> > >>>> >>>> >>> >> > >

