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]

Kirim email ke