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
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
> 
>
  • Re: [belajar-excel] formula... 'Mr. Kid' mr.nm...@gmail.com [belajar-excel]
    • Re: [belajar-excel] fo... lkm jktind lkmjkt...@gmail.com [belajar-excel]
      • Re: [belajar-excel... 'Mr. Kid' mr.nm...@gmail.com [belajar-excel]
        • Re: [belajar-e... lkm jktind lkmjkt...@gmail.com [belajar-excel]
          • Re: [belaj... lkm jktind lkmjkt...@gmail.com [belajar-excel]
          • Re: [belaj... 'Mr. Kid' mr.nm...@gmail.com [belajar-excel]
            • Re: [... lkm jktind lkmjkt...@gmail.com [belajar-excel]
              • R... lkm jktind lkmjkt...@gmail.com [belajar-excel]
              • R... 'Mr. Kid' mr.nm...@gmail.com [belajar-excel]
                • ... lkm jktind lkmjkt...@gmail.com [belajar-excel]
                • ... 'Mr. Kid' mr.nm...@gmail.com [belajar-excel]
                • ... lkm jktind lkmjkt...@gmail.com [belajar-excel]

Kirim email ke