Pak Lukman, Dicontoh tersebut tidak ada variabel array Pak.
2017-03-13 11:31 GMT+07:00 lkm jktind lkmjkt...@gmail.com [belajar-excel] < belajar-excel@yahoogroups.com>: > > > pak kid . > > na kalau pakai file arry --- rasanya jauh lebih cepat --> saat ini belum > aku gunakan (karena belum bisa bikin dan cara pakai nya) > > dengan ada nya email bapak --- akan aku kembangkan --- > > kalau aku nga salah tangkap : arry yg bapak siapkan cuma 2 --- ( Dim > lNilaiD As Long, lNilaiK As Long ) > > apa benar , yg kuduga --- tapi nga apa apa . sambil belajar lagi . > > toh data yg lama masih ada . > > > Terima kasih pak > > > salam > > > Lukman > > > 2017-03-13 11:12 GMT+07:00 'Mr. Kid' mr.nm...@gmail.com [belajar-excel] < > belajar-excel@yahoogroups.com>: > >> >> >> Pak Lukman, >> >> Jadi prosesnya adalah menjumlahkan nilai sheet data yang sama kriterianya >> ya... >> Apapun prosesnya, simpanlah nilai yang dibutuhkan di sebuah variabel. >> Akan lebih bagus lagi jika disimpan disuatu array. >> >> Untuk kebutuhan : >> kolom B : ---banyak nya data per tanggal ---> shett bantu --- apakah >> ada nya ada nga ada (kelupaan -- input) >> Kolom C --- awal row -- per tanggal ----> sheet bantu -untuk di >> pakai formula Vlookup , match >> Kolom D --- akhir row -- per tanggal -----> shett bantu sda >> Kolom E ~ G ---- hanya di jumlah per tanggal lalu di bagi >> 1.000.000 (mungkin di bagi dulu -- baru di jumlahkan ) >> Kolom H ---- perkalian (H * N ) --- lalu di jumlah pertanggal >> -- terakhir di bagi 1.000.000 >> >> Sepertinya membutuhkan variabel penyimpan : >> a. 1 variabel untuk banyaknya record per tanggal untuk kolom B >> b. 3 variabel untuk 3 kolom hasil kumulatif. Proses yang berpotensi >> menghasilkan nilai total penjumlahan lebih dari 14 digit dilakukan >> pembagian 1juta lebih dulu baru ditambahkan ke nilai sebelumnya. >> c. 1 variabel untuk hasil kumulatif perkalian H dan N. Jika proses >> perkalian berpotensi menghasilkan nilai lebih dari 14 digit, maka bagi >> nilai dengan 1 juta lebih dulu baru ditambahkan ke nilai sebelumnya. >> >> Jadi, kolom hasil untuk awal row dan akhir row tidak diperlukan lagi. >> >> Kalau pakai loop yang sekali jalan, kira-kira seperti ini : (yang biru >> adalah tambahan karena ada proses menulis ke area kriteria kolom tertentu) >> Dim lRowD As Long, lRowK As Long >> Dim lNilaiD As Long, lNilaiK As Long >> 'deklarasi variabel penyimpan nilai ada disini >> lRowK = 2 >> lNilaiK = Cells(lRowK, 5).Value >> *For lRowD = 2 To 900001* >> lNilaiD = Cells(lRowD, 1).Value >> If lNilaiD > lNilaiK Then 'ketemu nilai data dengan >> kriteria baru >> >> 'proses penulisan hasil loop di lRowK (kriteria yang sedang >> diproses) ke lokasi tujuan disini >> '1. proses penulisan >> '2. proses set nilai awal variables penyimpan selama proses >> >> lRowK = lRowK + 1 >> lNilaiK = Cells(lRowK, 5).Value >> If lNilaiD = lNilaiK Then >> 'lakukan proses terhadap data di baris lRowD >> 'yaitu : menyimpan data pertama yang sesuai kriteria ke >> variables yang telah disediakan >> End If >> ElseIf lNilaiD = lNilaiK Then >> 'lakukan proses terhadap data di baris lRowD >> 'yaitu : menyimpan data berikutnya (data ke-2 dan >> seterusnya) yang sesuai kriteria ke variables yang telah disediakan >> 'kalau ada proses kumulatif, maka penjumlahannya juga >> dilakukan disini >> 'proses counting record yang sesuai kriteria juga dilakukan >> disini, yaitu terjadi penambahan 1 record baru yang ditemukan sesuai >> kriteria >> End If >> If lRowK > 1001 Then Exit For >> *Next lRowD* >> >> Regards, >> Kid >> >> >> >> 2017-03-13 8:20 GMT+07:00 lkm jktind lkmjkt...@gmail.com [belajar-excel] >> <belajar-excel@yahoogroups.com>: >> >>> >>> >>> Ok (pak Kid) >>> >>> nanti malam, akan aku buatkan seprti contoh yg bapak berikan. >>> >>> If lNilaiD > lNilaiK Then -- >>> >>> If Soh1.Cells(rc, 1) <> Soh2.Cells(rx, 1) Then ----> aku >>> jumlahkan per tanggal. >>> >>> >>> >>> Kalau seperti yg bapak berikan ----- hasil nya aku mesti simpan dimana >>> ? >>> >>> kalau di sheet2 (Soh2.) berarti mesti pakai formula ? (match) >>> >>> rx ---> row dari Soh2. >>> rc ---> row dari Soh1 >>> >>> kolom B : ---banyak nya data per tanggal ---> shett bantu --- apakah >>> ada nya ada nga ada (kelupaan -- input) >>> Kolom C --- awal row -- per tanggal ----> sheet bantu -untuk di >>> pakai formula Vlookup , match >>> Kolom D --- akhir row -- per tanggal -----> shett bantu sda >>> Kolom E ~ G ---- hanya di jumlah per tanggal lalu di bagi >>> 1.000.000 (mungkin di bagi dulu -- baru di jumlahkan ) >>> Kolom H ---- perkalian (H * N ) --- lalu di jumlah pertanggal >>> -- terakhir di bagi 1.000.000 >>> >>> >>> terima kasih . >>> >>> >>> salam >>> >>> >>> Lukman >>> >>> NB : saat ini -- memang aku buka 2 sheet, >>> >>> >>> >>> 2017-03-13 7:13 GMT+07:00 'Mr. Kid' mr.nm...@gmail.com [belajar-excel] < >>> belajar-excel@yahoogroups.com>: >>> >>>> >>>> >>>> Nah tuh kan... >>>> >>>> Loop datanya memang 1 kali, tapi loop kriterianya jadi sebanyak jumlah >>>> baris data. >>>> Itu kan seperti ini : >>>> >>>> >>>> Loop yang umumnya disusun oleh kebanyakan orang adalah : (loop 2 blok >>>> nested) -> dugaan saya, Anda pakai susunan loop yang ini (sila cek lagi >>>> file Anda) >>>> Dim lRowD As Long, lRowK As Long >>>> Dim lNilaiD As Long, lNilaiK As Long >>>> >>>> *For lRowD = 2 To 900001* >>>> lNilaiD = Cells(lRowD, 1).Value >>>> *for lrowk=2 to 1001* >>>> lNilaiK = Cells(lRowK, 5).Value >>>> if lNilaiK=lNilaiD then >>>> 'lakukan proses terhadap data di baris lRowD >>>> endif >>>> *next lrowk* >>>> *Next lRowD* >>>> >>>> *** Blok for next (loop dengan for next) yang dibiru, memiliki *worst >>>> case* terjadi proses pembacaan 900ribu * 1000 kali proses karena >>>> setiap 1 baris data di sheet D akan melakukan pembacaan 1000 baris >>>> kriteria. Case tercepatnya adalah 900ribu * 1 kali proses (karena *semua >>>> data di D sesuai dengan kriteria ke-1 saja*). Padahal realitasnya >>>> adalah diantara 2 case tersebut. >>>> *** Tercepat : 900ribu proses >>>> *** Terlambat : 900JUTA proses >>>> *** Pertengahannya : 900ribu < proses < 900JUTA proses >>>> >>>> >>>> Namanya kan gak sekali jalan, karena si kriteria dibaca berulang-ulang >>>> oleh setiap record data. >>>> >>>> >>>> Coba bandingkan dengan yang ini : >>>> >>>> Loop 1 kali baca seperti ini : >>>> 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* >>>> >>>> Berapa kali 1 bijik nilai kriteria dibaca ? >>>> >>>> >>>> >>>> >>>> >>>> Regards, >>>> Kid >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> 2017-03-13 6:09 GMT+07:00 lkm jktind lkmjkt...@gmail.com >>>> [belajar-excel] <belajar-excel@yahoogroups.com>: >>>> >>>>> >>>>> >>>>> Pak Kid. >>>>> >>>>> Komputer yg digunakan : I5 4 core , 3 Ghz >>>>> >>>>> Sudah aku sekali lagi --- memang sekali jalan saja. >>>>> >>>>> mungkin menjadi cepat , karena di VB bapak . kan belum ada >>>>> perhitungan sama sekali . >>>>> >>>>> Set Woh = Workbooks("OHLC.xlsm") >>>>> Set Soh1 = Workbooks("OHLC.xlsm").Worksheets("OHLC") >>>>> Set Soh2 = Workbooks("OHLC.xlsm").Worksheets("Record") >>>>> >>>>> Soh1.Activate >>>>> Roh = Soh1.Cells(Rows.Count, 1).End(xlUp).Row >>>>> Set Voh = Soh1.Range(Cells(1, 1), Cells(Roh, 1)) >>>>> >>>>> OHLC_Sort_tgl_Tic ' Diurut ,bisa sekali jalan saja. >>>>> >>>>> Application.Calculation = xlCalculationManual >>>>> >>>>> On Error Resume Next >>>>> With Application.WorksheetFunction >>>>> >>>>> Soh2.Cells(1, 10).Clear >>>>> Soh2.Activate >>>>> >>>>> For rc = 2 To Soh1.Cells(Rows.Count, 1).End(xlUp).Row >>>>> >>>>> If Soh1.Cells(rc, 1) <> Soh2.Cells(rx, 1) Then >>>>> For rx = 2 To Soh2.Cells(Rows.Count, 1).End(xlUp).Row >>>>> >>>>> If Soh1.Cells(rc, 1) = Soh2.Cells(rx, 1) Then >>>>> Soh2.Cells(rx, 5).Value = Soh1.Cells(rc, 10) / 1000000 >>>>> Soh2.Cells(rx, 6).Value = Soh1.Cells(rc, 11) / 1000000 >>>>> Soh2.Cells(rx, 7).Value = Soh1.Cells(rc, 12) >>>>> Soh2.Cells(rx, 8).Value = Soh1.Cells(rc, 14) * >>>>> Soh1.Cells(rc, 8) / 1000000000 >>>>> Soh2.Cells(rx, 3).Value = rc >>>>> Soh2.Cells(rx, 2).Value = 1 >>>>> Exit For >>>>> End If >>>>> Next >>>>> Else >>>>> >>>>> Soh2.Cells(rx, 2).Value = Soh2.Cells(rx, 2) + 1 >>>>> Soh2.Cells(rx, 5).Value = Soh2.Cells(rx, 5) + >>>>> (Soh1.Cells(rc, 10) / 1000000) >>>>> Soh2.Cells(rx, 6).Value = Soh2.Cells(rx, 6) + >>>>> (Soh1.Cells(rc, 11) / 1000000) >>>>> Soh2.Cells(rx, 7).Value = Soh2.Cells(rx, 7) + >>>>> Soh1.Cells(rc, 12) >>>>> Soh2.Cells(rx, 8).Value = Soh2.Cells(rx, 8) + >>>>> (Soh1.Cells(rc, 14) * Soh1.Cells(rc, 8) / 1000000000) >>>>> >>>>> If Soh1.Cells(rc, 1) <> Soh1.Cells(rc + 1, 1) Then >>>>> Soh2.Cells(rx, 4).Value = rc >>>>> End If >>>>> >>>>> End If >>>>> >>>>> Next >>>>> End With >>>>> >>>>> >>>>> Salam >>>>> >>>>> >>>>> >>>>> >>>>> Lukman >>>>> >>>>> Nilai dari rc --- bertambah terus -- nga pernah mundur . >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> 2017-03-13 5:33 GMT+07:00 'Mr. Kid' mr.nm...@gmail.com >>>>> [belajar-excel] <belajar-excel@yahoogroups.com>: >>>>> >>>>>> >>>>>> >>>>>> Hai Lukman, >>>>>> >>>>>> Dugaan saya, loop Anda masih ada proses yang dibaca berulang. 900ribu >>>>>> baris sampai lebih dari 1 menit pada komputer jaman sekarang. Dengan >>>>>> prosesor generasi pertama core i3 yang speed terendahnya 1.3Gz saja, >>>>>> mestinya proses loop mungkin maksimal sekitar 50 sampai 60 detik. Apalagi >>>>>> jika pakai generasi tahun 2012an atau malah pakai generasi 3 atau 4 core >>>>>> i3 >>>>>> clock terendah, mungkin hanya sekitar 30 sampai 40 detik saja. Apalagi >>>>>> kalau sudah pakai generasi 5 ke atas, mestinya hanya sekitar 20 sampai 25 >>>>>> detik sudah selesai. >>>>>> >>>>>> Seperti pada contoh lalu : >>>>>> 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. >>>>>> >>>>>> Loop 1 kali baca seperti ini : >>>>>> 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* >>>>>> >>>>>> *** Hanya ada 1 blok for next (loop dengan For Next) disana, yaitu >>>>>> terhadap sheet data saja. Proses selalu akan membaca 900ribu kali saja. >>>>>> Jadi worst case nya, memproses 900ribu baris data D. case tercepatnya >>>>>> juga >>>>>> 900ribu baris. >>>>>> *** Tercepat : 900ribu proses >>>>>> *** Terlambat : 900ribu proses >>>>>> *** Pertengahannya : 900ribu proses >>>>>> >>>>>> Loop yang umumnya disusun oleh kebanyakan orang adalah : (loop 2 blok >>>>>> nested) -> dugaan saya, Anda pakai susunan loop yang ini (sila cek lagi >>>>>> file Anda) >>>>>> Dim lRowD As Long, lRowK As Long >>>>>> Dim lNilaiD As Long, lNilaiK As Long >>>>>> >>>>>> *For lRowD = 2 To 900001* >>>>>> lNilaiD = Cells(lRowD, 1).Value >>>>>> *for lrowk=2 to 1001* >>>>>> lNilaiK = Cells(lRowK, 5).Value >>>>>> if lNilaiK=lNilaiD then >>>>>> 'lakukan proses terhadap data di baris lRowD >>>>>> endif >>>>>> *next lrowk* >>>>>> *Next lRowD* >>>>>> >>>>>> *** Blok for next (loop dengan for next) yang dibiru, memiliki *worst >>>>>> case* terjadi proses pembacaan 900ribu * 1000 kali proses karena >>>>>> setiap 1 baris data di sheet D akan melakukan pembacaan 1000 baris >>>>>> kriteria. Case tercepatnya adalah 900ribu * 1 kali proses (karena *semua >>>>>> data di D sesuai dengan kriteria ke-1 saja*). Padahal realitasnya >>>>>> adalah diantara 2 case tersebut. >>>>>> *** Tercepat : 900ribu proses >>>>>> *** Terlambat : 900JUTA proses >>>>>> *** Pertengahannya : 900ribu < proses < 900JUTA proses >>>>>> >>>>>> Regards, >>>>>> Kid >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 2017-03-12 15:30 GMT+07:00 lkm jktind lkmjkt...@gmail.com >>>>>> [belajar-excel] <belajar-excel@yahoogroups.com>: >>>>>> >>>>>>> >>>>>>> >>>>>>> Pak Kid . >>>>>>> >>>>>>> Terima kasih. >>>>>>> >>>>>>> atas penjelasan nya . --- jadi ada pilihan --- mengapa aku nga >>>>>>> pakai fungsi SUM saja -- dari pada pakai SUMIF >>>>>>> >>>>>>> >>>>>>> Tapi rasanya aku tetap pakai loop saja . waktunya dibawah 2 menit >>>>>>> . (111.05 detik) >>>>>>> >>>>>>> besar kemungkinan : walaupun sumif --- aku ganti menjadi fungsi >>>>>>> sum dengan bantuan dari komlom L (sebagai data awal) dan kolom M >>>>>>> (sebagai data akhir) dari perjumlahan , besar kemungkin waktu nya di >>>>>>> atas 2 menit , apalagi kalau pakai sumproduck formula kelas berat . >>>>>>> >>>>>>> memang didalam loop --- itu cuma sekali jalan saja . (walaupun row >>>>>>> nya banyak ) >>>>>>> >>>>>>> >>>>>>> Salam >>>>>>> >>>>>>> >>>>>>> Lukman. >>>>>>> >>>>>>> >>>>>>> >>>>>>> NB : baru coba fungsi countif saja -- sudah diatas 2 menit . >>>>>>> (kolom K) saja. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2017-03-12 9:17 GMT+07:00 'Mr. Kid' mr.nm...@gmail.com >>>>>>> [belajar-excel] <belajar-excel@yahoogroups.com>: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 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 >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > >