Pak Kid.
dengan data sebanyak 506.286 row.
Tes_14 waktunya 9 detik.
Tes_12 waktunya sudah 30 menit belum selesai.
Sub Tes_14()
Range("A2").Select
Set Rng = Range("A2", Range("A1000000").End(xlUp))
Rng.Offset(0, 20).Formula = "=B2*C2"
Rng.Offset(0, 21).Formula = "=D2*E2"
Rng.Offset(0, 22).Formula = "=B2*D2"
Rng.Offset(0, 23).Formula = "=C2*E2"
Rng.Offset(0, 20).Value = Rng.Offset(0, 20).Value
Rng.Offset(0, 21).Value = Rng.Offset(0, 21).Value
Rng.Offset(0, 22).Value = Rng.Offset(0, 22).Value
Rng.Offset(0, 23).Value = Rng.Offset(0, 23).Value
End Sub
Sub tes_12()
For r = 2 To s
Cells(r, 21).Value = Cells(r, 2) * Cells(r, 3)
Cells(r, 22).Value = Cells(r, 4) * Cells(r, 5)
Cells(r, 23).Value = Cells(r, 2) * Cells(r, 4)
Cells(r, 24).Value = Cells(r, 3) * Cells(r, 5)
Next
Dari hasil diatas . bila di kolom P berisi 3 macam formula .
maka harus di buat 3 macam range : misal
rng_A ---- > untuk formula A
rng_B -----> untuk formula B
rng_C -----> untuk formula C
Atau
rng_D ---> kemudian formula A, B ,C bergantian di input
untuk resize : akan saya pelajari lebih lanjut.
mengenai Temp file . ini akan membebani memory kah ?
Bila file : 'M:\data_saham\LK_WEB_100.xlsm = 55 mb, maka memory yg akan
terpakai juga 55 MB
Mohon pak Kid memberikan contoh : cara penulisannya di macro dengan file :
'M:\data_saham\LK_WEB_100.xlsm untuk di jadikan file temp . dan cara
penghapusnya .
Terima kasih .
Salam
Lukman
2012/11/25 Mr. Kid <[email protected]>
> **
>
>
> Pak Lukman,
>
>
> 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 .
> >> Kita coba bersama ya.
> 1. kata activerange harus diganti dengan variabel range yang merujuk ke
> cells penulisan hasil. Itu sebabnya ada set rng=blabla seperti begini :
>
> Set Rng = Range("A2", Range("A1000000").End(xlUp))
> Jadi active range bisa saja ada di range AB1 sampai AB7, tetapi rng
> tetap merujuk ke kolom A pada baris tertentu.
> 2. variabel rng baru ada di kolom A, padahal hasil formula harus ditulis
> di kolom C yang artinya harus lompat 2 kolom kekanan. Setuju ?
> Maka penggunaan variabel range yang akan dipasangi formula bersamaan
> jadi :
> *Rng**.Offset(0, 2)*
> 3. Pada kolom C akan dipasangi formula apa ?
> Misal formulanya adalah nilai kolom X baris itu * nilai kolom G baris
> itu
> Coba ikuti bagian *Pemasangan formula melalui VBA umumnya disusun
> dengan kaidah dasar :*
> pada email sebelumnya.
> a. pasang formula di cell pertama. Berarti di C2 diworksheet (bukan
> VBA) tulis =X2*G2 lalu Enter
> b. coba copy ke semua cell data dan cek apakah sudah oke hasil
> formulanya.
> c. oh sudah oke, maka kembali ke VBA dan buat script :
> *Rng**.Offset(0, 2)**.Formula = "=X2*G2"*
> d. ubah semua karakter " menjadi "" (karena tidak ada karakter "
> dalam tulisan formula =X2*G2 maka hal ini tidak perlu dilakukan)
> 4. didapatlah tes_04 bentuk pemasangan* tanpa loop* dan langsung ke
> seluruh cell hasil.
>
> Bagaimana jika akan menggunakan IF yang buanyuak ?
> Susun saja bagian 3.a. dengan benar dan dicek pada 3.b. sampai ok,
> kemudian salin formula seperti 3.c. dengan finishing seperti 3.d.
>
> Ketika data yang akan dipasangi formula sangat banyak, maka cara tes_04
> akan sangat cepat sampai suatu bunyi formula tertentu yang sangat spesifik
> dengan kebutuhan setempat. Batas inilah yang harus secara cermat diawasi
> dan mulai dipikirkan solusi lainnya.
> Untuk jumlah baris sedikit dan proses kalkulasi yang sederhana, maka cara
> loop cell per cell seperti cara tes_02 sudah akan dirasa cukup. Tapi juga
> harus segera bertindak untuk mencari solusi lain ketika ada kesulitan dalam
> menerapkan formula yang rumit atau sudah mulai terasa lambat prosesnya.
>
>
> 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.
> >> sebelum ke formula yang puanjang dan mungkin sebaiknya di efisienkan
> dulu.
> Kemampuan Excel untuk melookup sangatlah baik. Buanyak sekali kondisi (IF)
> bisa disederhanakan dengan proses LookUp dengan menyusun tabel lookup
> pengkondisian yang baik. Coba deh cari di posting terdahulu tentang lookup
> yang bisa menjadi pengganti proses banyak kondisi.
>
> 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))
> >> Untuk formula seperti ini, bisa dicoba dalam banyak tahap dan dicari
> mana yang paling efisien.
> Contoh :
> *Tahap 1*, memasang formula apa adanya (tanpa ada proses optimasi formula)
> 1. tentukan range yang akan dipasangi formula (misal barisnya mulai 5
> sampai terbawah, sesuaikan dengan keadaan real)
> Set Rng = Range("A5", Range("A1000000").End(xlUp))
> 2. formula dipasang mulai kolom P (offset 15 kolom ke kanan) sampai kolom
> AN (sebanyak 25 kolom)
> *Rng**.Offset(0, 15)***.Resize(,25)
> 3. pasang formula di worksheet pada cell P5 dan copy sampai AN100
> misalnya, dan sudah oke.
> 4. buat baris script pemasangan formula :
> *Rng**.Offset(0, 15)***.Resize(,25).formula = "*disiniformulanya*"
> *disiniformulanya *diganti dengan bunyi formula diatas menjadi :
> *Rng**.Offset(0, 15)***.Resize(,25).formula = "
> =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))"
> 5. ganti semua " yang ada dalam formula menjadi ""
> *Rng**.Offset(0, 15)***.Resize(,25).formula = "
> =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))"
>
> Sekarang penyusunan proses agar lebih cepat, misal
> 'dimatikan dulu kalkulasi otomatisnya karena cell yang dipasangi
> formula ada banyak
> application.calculation=xlmanual
> 'pasang formulanya :
> Set Rng = Range("A5", Range("A1000000").End(xlUp))
> *Rng**.Offset(0, 15)***.Resize(,25).formula = "
> =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))"
> 'lakukan kalkulasi :
> rng.parent.calculate 'atau set calculation jadi xlautomatic lagi
> 'di-values-ken
> *Rng**.Offset(0, 15)***.Resize(,25).value=*Rng**.Offset(0, 15)***
> .Resize(,25).value
>
> Jika ingin coba tahap lain, bisa buat prosedur yang isinya sama, tapi nama
> prosedur beda. Kemudian ubah alur prosesnya. Misal :
> *Tahap 2* : karena ada rujukan ke file lain dan cell berformula ada
> banyak, salin dulu data rujukan dari file lain itu ke sebuah sheet
> sementara bernama temp.
> Maka proses :
> 1. buat sheet temporary (simpan ke sebuah variabel misal shtTmp dan beri
> nama tetap, misal *Temp *karena akan digunakan oleh formula)
> 2. buka workbook referensi 'M:\[LK_WEB_100.xlsm dan copy dari sheet
> bernama DT_LK dan paste values ke shttmp pada cell yang sama persis
> lokasinya seperti di dt_lk.
> 3. tutup workbook referensi
> 4. pasang formula yang sudah diubah rujukannya, yang tadi merujuk ke
> 'M:\[LK_WEB_100.xlsm]DT_LK' menjadi *Temp*
> 5. selesai proses diakhir dengan menghapus shtTemp karena hasil formula
> sudah di-values-ken
>
> Setelah dibanding-bandingkan, masih kurang cepat, maka coba tahap 3 dengan
> baris bantu atau kolom bantu, sampai bertemu formula lain yang lebih
> sederhana. Dan seterusnya begitu sampai ada banyak pilihan dan bisa memilih
> mana yang akan digunakan.
>
> Wassalam,
> Kid.
------------------------------------
---------------------------------------------------------------------
bergabung ke milis (subscribe), kirim mail kosong ke:
[email protected]
posting ke milis, kirimkan ke:
[email protected]
berkunjung ke web milis
http://tech.groups.yahoo.com/group/belajar-excel/messages
melihat file archive / mendownload lampiran
http://www.mail-archive.com/[email protected]/
atau (sejak 25-Apr-2011) bisa juga di :
http://milis-belajar-excel.1048464.n5.nabble.com/
menghubungi moderators & owners: [email protected]
keluar dari membership milis (UnSubscribe):
kirim mail kosong ke [email protected]
---------------------------------------------------------------------Yahoo!
Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/belajar-excel/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/belajar-excel/join
(Yahoo! ID required)
<*> To change settings via email:
[email protected]
[email protected]
<*> To unsubscribe from this group, send an email to:
[email protected]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/