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