Hai Lukman, Tentang : 1. bagaimana untuk mendapatkan market cap (sheet record) = jumlah pada hari yg sama dari = close * Listed Share (sheet OHLC) > jika dengan formula, maka bisa memanfaatkan fungsi SumProduct. > yang perlu diingat adalah karakteristik SumProduct yang bekerja pada array, sehingga berpotensi akan lambat ketika tidak membatasi area range yang dikalkulasi.
2. mengapa pakai looping (111.05 ) , lebih cepat dari pada pakai formula di macro (673.38) ? Selisih waktu nya sangat jauh. > Mengkalkulasi sesuatu dengan VBA bisa melalui perhitungan tiap item yang dikalkulasi dengan proses loop, memanfaatkan worksheet function dalam VBA, atau dengan memasang formula dengan VBA, maupun meng-evaluate suatu bunyi formula dengan VBA. > Jadi, ada baiknya Anda pahami dulu perbedaannya. > Biasanya, kalkulasi tiap item dengan loop berusaha untuk sesedikit mungkin proses loop itu sendiri. Contohnya, akan menjumlahkan data berdasar kriteria tertentu dengan kriteria tersebut ada di suatu tabel tersendiri. Maka proses loop diusahakan cukup melakukan loop 1 kali pada data saja jika memungkinkan. > Kalkulasi dengan worksheet function (berbeda dengan formula loh ya), ciri umumnya adalah menggunakan fungsi-fungsi yang biasa dipakai di dalam worksheet untuk menyusun formula. Contohnya seperti worksheetfunction.SUM yang menggunakan fungsi SUM. > Kalkulasi dengan formula dalam VBA biasanya berupa memanfaatkan pemasangan formula ke dalam sheet dan menyerahkan proses kalkulasi formula tersebut kepada Excel Calculation. Proses ini biasanya tidak membutuhkan loop apapun. Contoh : range("b1:b5").formula="=Row()" > Kalkulasi dengan evaluate mirip dengan kaklkulasi dengan formula dalam VBA, hanya saja, proses kalkulasi dilakukan langsung tanpa proses menulis formula ke dalam cells. Tidak banyak kasus yang bisa secara leluasa menggunakan cara ini seutuhnya. Apa beda penggunaan formula dengan worksheet function ? > Penggunaan formula akan lebih luwes dan luas, karena penulisan formula bisa dicoba dulu dalam worksheet dan digunakan apa adanya bunyi formula yang terbentuk. > Selain itu, penggunaan nested function dan array formula sangat dimungkinkan ketika menggunakan formula dan tidak mudah atau tidak dimungkinkan jika menggunakan worksheet function. Contohnya adalah formula =Sum( Index( data!A:A , report!b3 ):Index( data!A:A , report!C3 ) ) yang merupakan penjumlahan dinamis dengan area range yang diproses dibuat terbatas seperlunya agar tidak memberatkan kerja kalkulasi Excel. Andai di sheet report cells B3 bernilai 11 dan di sheet report C3 bernilai 23, maka formula di atas setara =Sum( data!A11:A23 ) Formula tersebut tidak mudah disusun dengan worksheet function. Contoh lain : =Small( IF( A1:A7 ="kid", B1:B7 ) , Row(1:7) ) yang merupakan array formula filtering. Formula seperti ini tidak bisa disusun dengan worksheet function. Jadi, menggunakan baris kode berbunyi : range("a1").value=worksheetfunction.sum( range("z7:z9") ) bukanlah proses formula dengan VBA, tetapi proses kalkulasi dengan fungsi yang disediakan untuk digunakan dalam cells. Worksheet function vs formula (memasang formula dalam cells) > kecepatan kerja keduanya dapat dikatakan seimbang. > terkadang, pada bentuk formula yang rumit, memasang formula akan memudahkan penyusunan baris kode walau agak lama proses kalkulasinya. Khusus loop, cara ini adalah yang tercepat, tetapi membutuhkan logika penyusunan proses yang terus terasah. Beberapa hal yang patut dipertimbangkan dalam loop : 1. lakukan loop melalui array-nya sebanyak mungkin dibanding menggunakan object (cells, worksheet, dsb) > kalau bisa, hindari for each next 2. simpan nilai ke suatu variabel (skalar maupun array) jika dibutuhkan berulang-ulang atau akan dikalkulasi berulang-ulang, jangan membaca ulang object 3. pilih dan susun loop agar tidak melakukan loop yang sama berulang-ulang dengan mengurutkan data dan kriteria contoh : sheet data kolom A mulai baris 2 ada 900ribu record sorted ascending. sheet kriteria kolom E mulai baris 2 ada 1000 kriteria sorted ascending. Asumsinya bertipe numerik. Setiap baris sheet data di Kolom A yang sama dengan setiap baris di sheet kriteria kolom E akan diproses. Dim lRowD As Long, lRowK As Long Dim lNilaiD As Long, lNilaiK As Long lRowK = 2 lNilaiK = Cells(lRowK, 5).Value For lRowD = 2 To 900001 lNilaiD = Cells(lRowD, 1).Value If lNilaiD > lNilaiK Then lRowK = lRowK + 1 lNilaiK = Cells(lRowK, 5).Value If lNilaiD = lNilaiK Then 'lakukan proses terhadap data di baris lRowD End If ElseIf lNilaiD = lNilaiK Then 'lakukan proses terhadap data di baris lRowD End If If lRowK > 1001 Then Exit For Next lRowD Kira-kira demikian, Regards, Kid 2017-03-11 19:46 GMT+07:00 lkm jktind lkmjkt...@gmail.com [belajar-excel] < belajar-excel@yahoogroups.com>: > > > 1. bagaimana untuk mendapatkan > market cap (sheet record) = jumlah pada hari yg sama dari = close > * Listed Share (sheet OHLC) > > 2. mengapa pakai looping (111.05 ) , lebih cepat dari pada pakai formula > di macro (673.38) ? > Selisih waktu nya sangat jauh. > > sheet OHLC : row hampir 900.000 > sheet Record : row : 2819 > > > > Salam > > > Lukman > > >