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

Kirim email ke