Pak Kid.
Bila memakai range. maka yg di pakai adalah offset dari activecell yg
sebagai pedomannya. (di Tes_01 dan Tes_03) di kerjakan baris kebaris
berikutnya
cells(1,1).select
*ActiveCell*.Offset(0, 2).FormulaR1C1 =
"=TEXT(RC[-2],""dd/mm/yy"")"
di Tes_01
With* ActiveCell * .Offset(i - 1, 4).FormulaR1C1 = "=TEXT
(RC[-4],""dd/mm/yy"")"
pemakaian* Offset* menjadi sangat dominan. misalnya :
activecell.offset(0,6) = activecell.offset(0,-4) * activecell.offset(0,-3)
Bila di Tes_02 : Dim r As Long *Active rows* yg sebagai
pedomannya. di kerjakan baris kebaris berikutnya
cells(1,1).select
Cells(r, 4) = Left(Cells(r, 1), 10)
untuk perkalian . menjadi : Cells(r,7) = cells(r,2) * Cells(r,3)
Bila Di Tes_04 : *Activerange* yg sebagai pedomannya.
untuk melaksanakan seperti perkalian diatas . (columns(2) *
colums(3)) = pada rows yg sama.
Apakah bisa dipakai : activerange.offset(0,8)
=activerange.offset(0,-6) * activerange.offset(0,-5) = (belum sempat di
coba )
rasanya nga berhasil .
dari penjelasan Pak Kid . tanpa sengaja saya menemukan cara memasuk formula
excel kedalam VBA yg didalam formula nya ada tanda " -------- yg harus
dirubah menjadi "" (dua kali)
walaupun belum saya coba . (adapun formula yg hendak saya masuk kan ke
dalam VBA :
=IF(INDEX('M:\[LK_WEB_100.xlsm]DT_LK'!$K$4:$AI$31998;MATCH($B502&"A100"
;'M:\[LK_WEB_100.xlsm]DT_LK'!$A$4:$A$31998;0);MATCH(P$1;'M:\[LK_WEB_100.xlsm]DT_LK'!$K$1:$AI$1;0))="(IDR)";INDEX('M:\[LK_WEB_100.xlsm]DT_LK'!$K$4:$AI$31998;MATCH($B502&P$3;'M:\[LK_WEB_100.xlsm]DT_LK'!$A$4:$A$31998;0);MATCH(P$1;'M:\[LK_WEB_100.xlsm]DT_LK'!$K$1:$AI$1;0));IF(INDEX('M:\[LK_WEB_100.xlsm]DT_LK'!$K$4:$AI$31998;MATCH($B502&"A100";'M:\[LK_WEB_100.xlsm]DT_LK'!$A$4:$A$31998;0);MATCH(P$1;'M:\[LK_WEB_100.xlsm]DT_LK'!$K$1:$AI$1;0))="(USD)";INDEX('M:\[LK_WEB_100.xlsm]DT_LK'!$K$4:$AI$31998;MATCH($B502&P$3;'M:\[LK_WEB_100.xlsm]DT_LK'!$A$4:$A$31998;0);MATCH(P$1;'M:\[LK_WEB_100.xlsm]DT_LK'!$K$1:$AI$1;0))*$B$2))
Looping . sedianya akan ku pergunakan untuk mencari no acc dari nama acc
yg nga beraturan . yg bila memakai formula bisa mungkin harus memakai
beberapa formula IF.
dari sumber file PDF setelah di conver menjadi Excel. yg kemudian di ambil
nilai nya.
Terima kasih . Pak Kid.
Selamat siang.
Salam dari
Lukman
2012/11/24 Mr. Kid <[email protected]>
> **
>
>
> Maaf ada yang ketinggalan.
>
> File terlampir adaalh perbaikan dari file sebelumnya, yang berisi :
> 1. Pengubahan prosedur Tes_01 agar lebih fleksibel terhadap baris data
> seperti Tes_02.
> 2. Pengubahan prosedur Tes_01 agar mengolah sisi time.
> 3. Pengubahan prosedur Tes_01 agar menghasilkan values.
>
>
> Wassalam,
> Kid.
>
> 2012/11/24 Mr. Kid <[email protected]>
>
>> Oh iya, ada yang kelupaan.
>>
>> Dari tadikan membahas yang sheet Pertanyaan 2.
>> Masalah kecepatan proses sudah dibahas cukup banyak.
>> Kesimpulan yang dapat diambil antara lain adalah perlunya usaha untuk
>> memanfaatkan fitur-fitur Excel secara optimum.
>>
>> Contohnya pada sheet pertanyaan 1. Diinginkan untuk menyusun unique list
>> per kolom.
>> Dengan memanfaatkan fitur remove duplicate dalam sebuah loop untuk
>> memproses perkolom, bisa diperoleh hasil yang relatif cepat dengan jumlah
>> baris script yang lebih sedikit.
>> Baris script yang lebih sedikit tentu saja akan mempercepat proses,
>> tetapi tidaklah terlalu signifikan. Yang utama adalah algoritma dalam
>> script itu sendiri. Semakin efisien alur proses yang disusun, maka semakin
>> cepat.
>> Biasanya, jumlah baris script yang sedikit lebih memudahkan penelusuran
>> ketika terjadi error.
>>
>> File terlampir adalah sebuah contoh.
>> >> Pada sheet Pertanyaan 1, ada proses yang memanfaatkan fitur
>> removeduplicate. Untuk xl2003 dan sebelumnya, ganti penggunaan
>> removedupklicate dengan fitur advanced filter unique records to another
>> place
>> >> Pada sheet Pertanyaan 2, bisa dilakukan pengujian proses untuk
>> maksimal baris Excel yang terisi data. Perhatikan syarat dan ketentuan yang
>> dijelaskan dalam sheet tersebut, karena tujuannya adalah untuk menguji
>> kecepatan proses tertentu pada suatu keadaan tertentu. Untuk awalnya, file
>> tersebut menyediakan data sampai cell A1000000. Penggantian nomor baris
>> maksimal bisa dilakukan dengan mengubah nilai (numerik) pada cell J1.
>>
>> Wassalam,
>> Kid.
>>
>> 2012/11/24 Mr. Kid <[email protected]>
>>
>> Pak Lukman,
>>>
>>> Mungkin prosedur Tes_04 yang dimaksud Pak Lukman adalah :
>>>
>>> Sub Tes_04()
>>> Cells(1, 11) = Time
>>>
>>> Dim Rng As Range
>>> Dim i As Long
>>> Application.ScreenUpdating = False
>>> Application.EnableEvents = False
>>> Sheets("Pertanyaan 2").Select
>>> Range("A2").Select
>>> Set Rng = Range("A2", Range("A1000000").End(xlUp))
>>> Cells(2, 11) = Time
>>> 'With ActiveCell
>>>
>>> ' For i = 1 To Rng.Rows.Count
>>> ' .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
>>> ' Next i
>>> 'End With
>>>
>>> *Rng**.Offset(0, 2).FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
>>>
>>>
>>> Application.ScreenUpdating = True
>>> Application.EnableEvents = True
>>> Cells(3, 11) = Time
>>> End Sub
>>>
>>>
>>> Tes_01 : diatas 5 menit (ini pun belum selesai)
>>> Tes_02 06:17:44 PM ~ 06:17:56 PM
>>> Tes_03 : diatas 5 menit dan belum selesai)
>>> Tes_04 : 06:28:45 PM ~ 06:28:46 PM
>>>
>>> Tes_03 lebih cepat dibanding Tes_01 karena loop pada Tes_03 tidak
>>> melakukan Select pada cell berikutnya yang akan dipasangi formula.
>>> Tes_04 paling cepat karena tidak meminta VBA untuk membaca satu per satu
>>> cell yang akan diproses.
>>> Pada Tes_04, seluruh pemasangan formula diserahkan kepada Excel.
>>> *VBA digunakan untuk :
>>> 1. menentukan range yang akan dipasangi formula*,
>>> yaitu bagian yang berbunyi :
>>> *Rng**.Offset(0, 2)*
>>> dimana rng merujuk pada kolom data mulai A2 sampai baris A terbawah yang
>>> berisi data :
>>>
>>> Set Rng = Range("A2", Range("A1000000").End(xlUp))
>>> kemudian di offset 2 kolom kekanan yang berati ke range hasil yaitu di
>>> kolom C dengan rujukan baris yang sama dengan rng, yaitu mulai baris 2
>>> sampai baris terkahir data.
>>>
>>> *2. menentukan bunyi formula pada cell pertama hasil yang kemudian oleh
>>> Excel akan di-copy ke cell lain yang ditunjuk oleh nomor 1 tadi.*
>>> Bunyi formula pada cell pertama hasil [cell C2] :
>>> *.FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
>>> Untuk formula ini, kerja Excel dalam meng-copy formula dan
>>> mengkalkulasinya jauh lebih cepat dibanding proses kalkulasi yang sama yang
>>> dilakukan oleh VBA.
>>> Itu sebabnya prosedur Tes_04 jauh lebih cepat dibanding Tes_03.
>>>
>>> Pemasangan formula melalui VBA umumnya disusun dengan kaidah dasar :
>>> 1. buat formula dalam worksheet pada cell pertama hasil
>>> 2. copy formula ke semua baris data yang membutuhkan
>>> 3. cek hasil kalkulasi formula,
>>> >> jika sudah sesuai, lanjutkan ke nomor 4
>>> >> jika belum sesuai, kembali ke nomor 1
>>> 4. Susun script pemasangan formula untuk seluruh baris hasil (jangan
>>> satu per satu cell melalui loop)
>>> Contohnya adalah baris berbunyi :
>>> *Rng**.Offset(0, 2).FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
>>> 5. Copy formula ke VBA pada bagian pemasangan formula,
>>> Contohnya seperti bagian yang berbunyi :
>>>
>>> *.FormulaR1C1 = "=TEXT(RC[-2],"dd/mm/yy")"*
>>> Bagian *merah *adalah bunyi formula dalam cell C2 di worksheet
>>> (bukan di VBA) sesuai hasil kerja nomor 1 sampai nomor 3 di atas
>>> 6. Ganti semua karakter petik dua (") menjadi 2 buah karakter petik dua
>>> ("")
>>> Contoh :
>>>
>>> *.FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
>>>
>>> Jadi, sebenarnya ndak terlalu sulit untuk dipahami kok. Justru harusnya
>>> lebih mudah.
>>> Coba bayangkan jika kalkulasinya membutuhkan proses lookup 2 dimensi
>>> (sisi row dan juga harus cari di sisi kolom).
>>> Apalagi jika sisi row nya saja ada banyak kriteria (misal saja ada 7
>>> kriteria), yang jadinya harus berupa array formula.
>>> Dengan memanfaatkan properti formulaarray, maka bisa disusun sebuah
>>> array blok.
>>>
>>> Pada beberapa kasus, seperti memasang array formula unique list, maka
>>> proses pemasangan array formula hanya bisa pada cell pertama saja dengan
>>> properti array formula. Kemudian copy formula ke cell lain (selain cell
>>> pertama).
>>>
>>>
>>> >> cara tes_02 . dalam pelaksanan untuk prosedur lain nya . apakah bisa
>>> menimbulkan kesalahan dihasilnya ?
>>> Untuk kegiatan seperti data tersebut, bisa jadi tidak ada yang salah
>>> hasilnya. Hanya saja tes_02 secara mutlak adalah memerintahkan VBA
>>> mengkalkulasi hasil dengan algoritma yang disusun programmer-nya melalui
>>> bahasa VB. Sedangkan Excel memberi akses untuk bisa memanfaatkan kemampuan
>>> si Excel dalam menyusun, memasang, dan mengkalkulasi formula.
>>>
>>> Wassalam,
>>> Kid.
>>>
>>>
>>>
>>> 2012/11/24 lkm jktind <[email protected]>
>>>
>>>> **
>>>>
>>>>
>>>> Pak Kid.
>>>>
>>>> Dari data yg pak Kid kirim kan itu , saya copy paste sampai menjadi
>>>> 506.482 row
>>>> data ini yg saya tes dengan data hanya di kolom A.
>>>> dan didalam nya ada data yg kosong. (tidak semua nya terisi data)
>>>> hasil nya seperti dibawah ini :
>>>>
>>>> Tes_01 : diatas 5 menit (ini pun belum selesai)
>>>> Tes_02 06:17:44 PM ~ 06:17:56 PM
>>>> Tes_03 : diatas 5 menit dan belum selesai)
>>>> Tes_04 : 06:28:45 PM ~ 06:28:46 PM
>>>>
>>>> yg hendak saya tanyakan: cara tes_02 . dalam pelaksanan untuk prosedur
>>>> lain nya . apakah bisa menimbulkan kesalahan dihasilnya ?
>>>> Walaupun waktu yg di butuhkan lebih banyak . tapi cara tes_02 ini ,
>>>> lebih mudah saya pahami.
>>>>
>>>> terima kasih . (sudah banyak saya belajar dari Pak Kid)
>>>>
>>>> Selamat malam dan salam sejahtera.
>>>>
>>>> Lukman.
>>>>
>>>> Maaf file nya tidak saya sertakan ( 8.5 MB)
>>>>
>>>>
>>>> Sub Tes_01()
>>>> Cells(1, 9) = Time
>>>>
>>>> Dim Rng As Range
>>>> Dim i As Long
>>>> Application.ScreenUpdating = False
>>>> Application.EnableEvents = False
>>>> Sheets("Pertanyaan 2").Select
>>>> Range("A2").Select
>>>> Set Rng = Range("A2", Range("A1000000").End(xlUp))
>>>> Cells(2, 9) = Time
>>>>
>>>> For i = 1 To Rng.Rows.Count
>>>> ActiveCell.Offset(0, 2).FormulaR1C1 =
>>>> "=TEXT(RC[-2],""dd/mm/yy"")"
>>>> ActiveCell.Offset(1, 0).Select
>>>> Next i
>>>> Application.ScreenUpdating = True
>>>> Application.EnableEvents = True
>>>> Cells(3, 9) = Time
>>>> End Sub
>>>>
>>>> Sub tes_02()
>>>> Cells(1, 10) = Time
>>>>
>>>> Dim r As Long
>>>> Dim s As Long
>>>> Worksheets(2).Select
>>>> Cells(2, 1).Select
>>>> s = Cells(Rows.Count, 1).End(xlUp).Row
>>>> 'Range(Cells(2, 7), Cells(s, 10)).ClearContents
>>>> Cells(2, 10) = Time
>>>>
>>>> For r = 2 To s
>>>> Cells(r, 4) = Left(Cells(r, 1), 10)
>>>> 'Cells(r, 8) = Mid(Cells(r, 1), 11, 10)
>>>> Next
>>>> Cells(3, 10) = Time
>>>> End Sub
>>>>
>>>> Sub Tes_03()
>>>> Cells(1, 11) = Time
>>>>
>>>> Dim Rng As Range
>>>> Dim i As Long
>>>> Application.ScreenUpdating = False
>>>> Application.EnableEvents = False
>>>> Sheets("Pertanyaan 2").Select
>>>> Range("A2").Select
>>>> Set Rng = Range("A2", Range("A1000000").End(xlUp))
>>>> Cells(2, 11) = Time
>>>> With ActiveCell
>>>>
>>>> For i = 1 To Rng.Rows.Count
>>>> .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
>>>> Next i
>>>> End With
>>>>
>>>> Application.ScreenUpdating = True
>>>> Application.EnableEvents = True
>>>> Cells(3, 11) = Time
>>>> End Sub
>>>>
>>>> Sub Tes_04()
>>>> Cells(1, 11) = Time
>>>>
>>>> Dim Rng As Range
>>>> Dim i As Long
>>>> Application.ScreenUpdating = False
>>>> Application.EnableEvents = False
>>>> Sheets("Pertanyaan 2").Select
>>>> Range("A2").Select
>>>> Set Rng = Range("A2", Range("A1000000").End(xlUp))
>>>> Cells(2, 11) = Time
>>>> With ActiveCell
>>>>
>>>> For i = 1 To Rng.Rows.Count
>>>> .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
>>>> Next i
>>>> End With
>>>>
>>>> Application.ScreenUpdating = True
>>>> Application.EnableEvents = True
>>>> Cells(3, 11) = Time
>>>> End Sub
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>
>
>