Senin, 13 Maret 2017

[belajar-excel] Digest Number 4124

11 Messages

Digest #4124
2a
Re: formula makro dan lambat by "Mr. Kid" nmkid.family@ymail.com
2b
Re: formula makro dan lambat by "lkm jktind" lkmjkt
2c
Re: formula makro dan lambat by "Mr. Kid" nmkid.family@ymail.com
2d
Re: formula makro dan lambat by "lkm jktind" lkmjkt
3a
Re: Update data kontak (file vcf) by "Heru Safrudin" heru.safrudin
3b
Re: Update data kontak (file vcf) by "Mr. Kid" nmkid.family@ymail.com
4a
Re: File Excel besar by "Mr. Kid" nmkid.family@ymail.com

Messages

Sun Mar 12, 2017 7:51 pm (PDT) . Posted by:

"ANTONIUS TEGUH PRASETYA" qsetya

Dear Master Lukman,

saya tidak familier dengan VB dan lebih prefer Formula biasa, namun tidak ada salah nya untuk mulai belajar sesuatu yang baru :)berikut saya lampirkan ilustrasi data sumber dan data Hasil,
Data Sumber dan Hasil berada pada Workbook yang sama dan pada Sheet yang berbeda.
Mohon Pencerahan nya
 Antonius Teguh PrasetyaInternal Audit08113595741087856491360


Pada Minggu, 12 Maret 2017 21:51, "lkm jktind lkmjktind@gmail.com [belajar-excel]" <belajar-excel@yahoogroups.com> menulis:


  Pak Antonius.

Apakah boleh di selesaikan VB ?

untuk mengisi semua data yg ada di F3:H11

Bila boleh : tolong beritau hasil nya mau di letakan dimana atau sheet apa  atau workbook yg sama ?

adapun sumber data nya ada sheet apa dengan  row, columns berapa ?

salam

Lukman

2017-03-11 8:55 GMT+07:00 ANTONIUS TEGUH PRASETYA qsetya@yahoo.co.id [belajar-excel] <belajar-excel@yahoogroups.com>:

  Dear Para Master Excel,
Mohon Bantuan untuk membuat Formula yang dapat menampilkan List data yang sesuai dengan beberapa Kriteria.
File Contoh dan Hasil yg di inginkan terlampir.
Pertanyaan ini sudah pernah saya emailkan sebelum nya, namun hari ini saya cari dalam Sent/Inbox email saya sudah tidak ada, maka saya email ulang.
Mohon bantuan nya. Terima Kasih
Best Regards
 Antonius Teguh PrasetyaInternal Audit08113595741087856491360


#yiv4866440431 -- #yiv4866440431ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv4866440431 #yiv4866440431ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv4866440431 #yiv4866440431ygrp-mkp #yiv4866440431hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv4866440431 #yiv4866440431ygrp-mkp #yiv4866440431ads {margin-bottom:10px;}#yiv4866440431 #yiv4866440431ygrp-mkp .yiv4866440431ad {padding:0 0;}#yiv4866440431 #yiv4866440431ygrp-mkp .yiv4866440431ad p {margin:0;}#yiv4866440431 #yiv4866440431ygrp-mkp .yiv4866440431ad a {color:#0000ff;text-decoration:none;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ygrp-lc {font-family:Arial;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ygrp-lc #yiv4866440431hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ygrp-lc .yiv4866440431ad {margin-bottom:10px;padding:0 0;}#yiv4866440431 #yiv4866440431actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv4866440431 #yiv4866440431activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv4866440431 #yiv4866440431activity span {font-weight:700;}#yiv4866440431 #yiv4866440431activity span:first-child {text-transform:uppercase;}#yiv4866440431 #yiv4866440431activity span a {color:#5085b6;text-decoration:none;}#yiv4866440431 #yiv4866440431activity span span {color:#ff7900;}#yiv4866440431 #yiv4866440431activity span .yiv4866440431underline {text-decoration:underline;}#yiv4866440431 .yiv4866440431attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv4866440431 .yiv4866440431attach div a {text-decoration:none;}#yiv4866440431 .yiv4866440431attach img {border:none;padding-right:5px;}#yiv4866440431 .yiv4866440431attach label {display:block;margin-bottom:5px;}#yiv4866440431 .yiv4866440431attach label a {text-decoration:none;}#yiv4866440431 blockquote {margin:0 0 0 4px;}#yiv4866440431 .yiv4866440431bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv4866440431 .yiv4866440431bold a {text-decoration:none;}#yiv4866440431 dd.yiv4866440431last p a {font-family:Verdana;font-weight:700;}#yiv4866440431 dd.yiv4866440431last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv4866440431 dd.yiv4866440431last p span.yiv4866440431yshortcuts {margin-right:0;}#yiv4866440431 div.yiv4866440431attach-table div div a {text-decoration:none;}#yiv4866440431 div.yiv4866440431attach-table {width:400px;}#yiv4866440431 div.yiv4866440431file-title a, #yiv4866440431 div.yiv4866440431file-title a:active, #yiv4866440431 div.yiv4866440431file-title a:hover, #yiv4866440431 div.yiv4866440431file-title a:visited {text-decoration:none;}#yiv4866440431 div.yiv4866440431photo-title a, #yiv4866440431 div.yiv4866440431photo-title a:active, #yiv4866440431 div.yiv4866440431photo-title a:hover, #yiv4866440431 div.yiv4866440431photo-title a:visited {text-decoration:none;}#yiv4866440431 div#yiv4866440431ygrp-mlmsg #yiv4866440431ygrp-msg p a span.yiv4866440431yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv4866440431 .yiv4866440431green {color:#628c2a;}#yiv4866440431 .yiv4866440431MsoNormal {margin:0 0 0 0;}#yiv4866440431 o {font-size:0;}#yiv4866440431 #yiv4866440431photos div {float:left;width:72px;}#yiv4866440431 #yiv4866440431photos div div {border:1px solid #666666;height:62px;overflow:hidden;width:62px;}#yiv4866440431 #yiv4866440431photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv4866440431 #yiv4866440431reco-category {font-size:77%;}#yiv4866440431 #yiv4866440431reco-desc {font-size:77%;}#yiv4866440431 .yiv4866440431replbq {margin:4px;}#yiv4866440431 #yiv4866440431ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv4866440431 #yiv4866440431ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv4866440431 #yiv4866440431ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv4866440431 #yiv4866440431ygrp-mlmsg select, #yiv4866440431 input, #yiv4866440431 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv4866440431 #yiv4866440431ygrp-mlmsg pre, #yiv4866440431 code {font:115% monospace;}#yiv4866440431 #yiv4866440431ygrp-mlmsg * {line-height:1.22em;}#yiv4866440431 #yiv4866440431ygrp-mlmsg #yiv4866440431logo {padding-bottom:10px;}#yiv4866440431 #yiv4866440431ygrp-msg p a {font-family:Verdana;}#yiv4866440431 #yiv4866440431ygrp-msg p#yiv4866440431attach-count span {color:#1E66AE;font-weight:700;}#yiv4866440431 #yiv4866440431ygrp-reco #yiv4866440431reco-head {color:#ff7900;font-weight:700;}#yiv4866440431 #yiv4866440431ygrp-reco {margin-bottom:20px;padding:0px;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ov li a {font-size:130%;text-decoration:none;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv4866440431 #yiv4866440431ygrp-sponsor #yiv4866440431ov ul {margin:0;padding:0 0 0 8px;}#yiv4866440431 #yiv4866440431ygrp-text {font-family:Georgia;}#yiv4866440431 #yiv4866440431ygrp-text p {margin:0 0 1em 0;}#yiv4866440431 #yiv4866440431ygrp-text tt {font-size:120%;}#yiv4866440431 #yiv4866440431ygrp-vital ul li:last-child {border-right:none !important;}#yiv4866440431

Mon Mar 13, 2017 6:39 am (PDT) . Posted by:

"lkm jktind" lkmjkt

Pak Antonius

Setelah aku melihat file yg bapak kirimkan .

tanya : apakah data di sheet 1 ------> apakah sudah di sort --> pedoman No
surat jalan

apakah boleh aku sort --- pedoman No surat jalan ---> biar lebih cepat
waktu prosesnya ?

dan bila menemukan data kembar di no sj -- akan aku beri blok berwarna --
untuk data yg kedua dan seterusnya/

aku ganti menjadi di bawah ini .

Sheet : Data surat jalan ----- ini sheet 1.
Data Gaji -------> ini sheet 2.
data_surat_jalan ------> ini sebagai nama dari file.
Soal data nama sopir ---- sekarang baru 3 orang --> kedepan berapa pun
nga masalah -- asal data tetap menurun .
Soal data tanggal --- baru sampai kolom G ---> selanjutnya sampai da pun
masih bisa di pakai.
NB : vb -- ini berbahaya -- kalau nga speksifik --> bisa ngaca file lainnya.

bila masih ada yg mau di ubah --- kasih kabar ya ?
atau tambahan --- lengkapi saja

file bapak akan aku kerjakan hari sabtu . ---- mungkin 19 maret -->
bisa aku kirim ke room

salam

Lukman

NB : Lagi mendadak ada yg harus segera aku kerjakan.

On Mon, Mar 13, 2017 at 9:48 AM, ANTONIUS TEGUH PRASETYA qsetya@yahoo.co.id
[belajar-excel] <belajar-excel@yahoogroups.com> wrote:

>
>
> Dear Master Lukman,
>
> saya tidak familier dengan VB dan lebih prefer Formula biasa, namun tidak
> ada salah nya untuk mulai belajar sesuatu yang baru :)
> berikut saya lampirkan ilustrasi data sumber dan data Hasil,
> Data Sumber dan Hasil berada pada Workbook yang sama dan pada Sheet yang
> berbeda.
>
> Mohon Pencerahan nya
>
> Antonius Teguh Prasetya
> Internal Audit
> 08113595741
> 087856491360
>
>
>
> Pada Minggu, 12 Maret 2017 21:51, "lkm jktind lkmjktind@gmail.com
> [belajar-excel]" <belajar-excel@yahoogroups.com> menulis:
>
>
>
> Pak Antonius.
>
> Apakah boleh di selesaikan VB ?
>
> untuk mengisi semua data yg ada di F3:H11
>
> Bila boleh : tolong beritau hasil nya mau di letakan dimana atau sheet
> apa atau workbook yg sama ?
>
> adapun sumber data nya ada sheet apa dengan row, columns berapa ?
>
> salam
>
> Lukman
>
>
>
>
>
>
> 2017-03-11 8:55 GMT+07:00 ANTONIUS TEGUH PRASETYA qsetya@yahoo.co.id
> [belajar-excel] <belajar-excel@yahoogroups.com>:
>
>
>
> Dear Para Master Excel,
>
> Mohon Bantuan untuk membuat Formula yang dapat menampilkan List data yang
> sesuai dengan beberapa Kriteria.
>
> File Contoh dan Hasil yg di inginkan terlampir.
>
> Pertanyaan ini sudah pernah saya emailkan sebelum nya, namun hari ini saya
> cari dalam Sent/Inbox email saya sudah tidak ada, maka saya email ulang.
>
> Mohon bantuan nya. Terima Kasih
>
> Best Regards
>
> Antonius Teguh Prasetya
> Internal Audit
> 08113595741
> 087856491360
>
>
>
>
>
>

Mon Mar 13, 2017 6:54 am (PDT) . Posted by:

"lkm jktind" lkmjkt

File bapak , sangat cocok pakai VB .

karena sifat nya rutin di pakai .

apalagi kalau jumlah sopir nya banyakkkk.

2017-03-13 20:39 GMT+07:00 lkm jktind <lkmjktind@gmail.com>:

> Pak Antonius
>
> Setelah aku melihat file yg bapak kirimkan .
>
> tanya : apakah data di sheet 1 ------> apakah sudah di sort --> pedoman
> No surat jalan
>
> apakah boleh aku sort --- pedoman No surat jalan ---> biar lebih
> cepat waktu prosesnya ?
>
> dan bila menemukan data kembar di no sj -- akan aku beri blok berwarna --
> untuk data yg kedua dan seterusnya/
>
>
> aku ganti menjadi di bawah ini .
>
> Sheet : Data surat jalan ----- ini sheet 1.
> Data Gaji -------> ini sheet 2.
> data_surat_jalan ------> ini sebagai nama dari file.
> Soal data nama sopir ---- sekarang baru 3 orang --> kedepan berapa pun
> nga masalah -- asal data tetap menurun .
> Soal data tanggal --- baru sampai kolom G ---> selanjutnya sampai da pun
> masih bisa di pakai.
> NB : vb -- ini berbahaya -- kalau nga speksifik --> bisa ngaca file
> lainnya.
>
>
> bila masih ada yg mau di ubah --- kasih kabar ya ?
> atau tambahan --- lengkapi saja
>
> file bapak akan aku kerjakan hari sabtu . ---- mungkin 19 maret -->
> bisa aku kirim ke room
>
>
>
>
>
> salam
>
>
>
> Lukman
>
>
> NB : Lagi mendadak ada yg harus segera aku kerjakan.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Mon, Mar 13, 2017 at 9:48 AM, ANTONIUS TEGUH PRASETYA
> qsetya@yahoo.co.id [belajar-excel] <belajar-excel@yahoogroups.com> wrote:
>
>>
>>
>> Dear Master Lukman,
>>
>> saya tidak familier dengan VB dan lebih prefer Formula biasa, namun tidak
>> ada salah nya untuk mulai belajar sesuatu yang baru :)
>> berikut saya lampirkan ilustrasi data sumber dan data Hasil,
>> Data Sumber dan Hasil berada pada Workbook yang sama dan pada Sheet yang
>> berbeda.
>>
>> Mohon Pencerahan nya
>>
>> Antonius Teguh Prasetya
>> Internal Audit
>> 08113595741
>> 087856491360
>>
>>
>>
>> Pada Minggu, 12 Maret 2017 21:51, "lkm jktind lkmjktind@gmail.com
>> [belajar-excel]" <belajar-excel@yahoogroups.com> menulis:
>>
>>
>>
>> Pak Antonius.
>>
>> Apakah boleh di selesaikan VB ?
>>
>> untuk mengisi semua data yg ada di F3:H11
>>
>> Bila boleh : tolong beritau hasil nya mau di letakan dimana atau sheet
>> apa atau workbook yg sama ?
>>
>> adapun sumber data nya ada sheet apa dengan row, columns berapa ?
>>
>> salam
>>
>> Lukman
>>
>>
>>
>>
>>
>>
>> 2017-03-11 8:55 GMT+07:00 ANTONIUS TEGUH PRASETYA qsetya@yahoo.co.id
>> [belajar-excel] <belajar-excel@yahoogroups.com>:
>>
>>
>>
>> Dear Para Master Excel,
>>
>> Mohon Bantuan untuk membuat Formula yang dapat menampilkan List data yang
>> sesuai dengan beberapa Kriteria.
>>
>> File Contoh dan Hasil yg di inginkan terlampir.
>>
>> Pertanyaan ini sudah pernah saya emailkan sebelum nya, namun hari ini
>> saya cari dalam Sent/Inbox email saya sudah tidak ada, maka saya email
>> ulang.
>>
>> Mohon bantuan nya. Terima Kasih
>>
>> Best Regards
>>
>> Antonius Teguh Prasetya
>> Internal Audit
>> 08113595741
>> 087856491360
>>
>>
>>
>>
>>
>>
>
>

Sun Mar 12, 2017 9:13 pm (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Sun Mar 12, 2017 9:31 pm (PDT) . Posted by:

"lkm jktind" lkmjkt

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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Sun Mar 12, 2017 9:46 pm (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.com

Pak Lukman,

Dicontoh tersebut tidak ada variabel array Pak.

2017-03-13 11:31 GMT+07:00 lkm jktind lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Sun Mar 12, 2017 9:51 pm (PDT) . Posted by:

"lkm jktind" lkmjkt

Pak Kid.

akan aku coba dulu .

bila ada kendala, aku tanyakan lagi (nga di coba pakai , sulit untuk
dimengertikan)

Salam

Lukman

NB : yg penting harian nya lancar dulu .
lebih tenang untuk belajar lagi.

2017-03-13 11:38 GMT+07:00 'Mr. Kid' mr.nmkid@gmail.com [belajar-excel] <
belajar-excel@yahoogroups.com>:

>
>
> Pak Lukman,
>
> Dicontoh tersebut tidak ada variabel array Pak.
>
>
>
> 2017-03-13 11:31 GMT+07:00 lkm jktind lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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.nmkid@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 lkmjktind@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
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Mon Mar 13, 2017 1:32 am (PDT) . Posted by:

"Heru Safrudin" heru.safrudin

Ok Mr. Baca tulis ke file txt udah bisa, pertanyaan saya bagaimana cara kita bisa edit recordnya ? misal mau delete dan edit kontak ?

Mohon bimbingaannya

Heru Safrudin

From: belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com]
Sent: 12 Maret 2017 10:12
To: BeExcel
Subject: Re: [belajar-excel] Update data kontak (file vcf)

Hai Heru,

Bisa.

vCard file (.vcf) adalah plain text file dengan struktur yang standar. Sila dilihat standarisasinya disini <https://en.wikipedia.org/wiki/VCard#Properties> , dengan contohnya disini <https://en.wikipedia.org/wiki/VCard#Example_of_vCard_files> .

Jadi, pada tabel contacts di sebuah sheet, disertakan kode properti yang sesuai. Kemudian di sebuah kolom, susun dengan formula blok vCard setiap record contact yang ada. Setiap contact selalu mulai dengan BEGIN:VCARD dan diakhir dengan END:VCARD. Jangan lupa, item ke-2 adalah VERSION

Setelah di kolom baru tersebut di dapat bunyi blok vCARD untuk contact di baris itu, barulah dilakukan penulisan ke text file yang diberi ekstensi .vcf

Contoh menulis isi range ke sebuah plain text file bisa dilihat disini <https://app.box.com/s/7urcxbqc33vu7sk8m9t5qnmmf7hi1ja1> .

Regards,

Kid

2017-03-04 9:59 GMT+07:00 'Heru Safrudin' fcprocessing.bisikediri@bisi.co.id [belajar-excel] <belajar-excel@yahoogroups.com>:

Dear B-Exceller,

Saya punya data kontak di excel, dengan beberapa kali konversi akhirnya data file excel bisa jadi file contact (vcf)

Pertanyaan saya bisakah vba menghubungkan file contact tersebut di ke dan dari excel ?

Mohon pengetahuannya

Terima kasih

Heru SafrudinBISI,Heru Safrudin,YM online

Mon Mar 13, 2017 1:36 am (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.com

hehehe...
terus terang, saya jadi bingung dengan pertanyaannya...
"Kalau sudah ada tabel berisi kontak disebuah sheet, gimana cara ganti isi
cellsnya ?"
Apakah demikian maksud pertanyaannya ?

Regards,
Kid

2017-03-13 14:17 GMT+07:00 'Heru Safrudin'
fcprocessing.bisikediri@bisi.co.id [belajar-excel] <
belajar-excel@yahoogroups.com>:

>
>
> Ok Mr. Baca tulis ke file txt udah bisa, pertanyaan saya bagaimana cara
> kita bisa edit recordnya ? misal mau delete dan edit kontak ?
>
> Mohon bimbingaannya
>
>
>
> Heru Safrudin
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *From:* belajar-excel@yahoogroups.com [mailto:belajar-excel@
> yahoogroups.com]
> *Sent:* 12 Maret 2017 10:12
> *To:* BeExcel
> *Subject:* Re: [belajar-excel] Update data kontak (file vcf)
>
>
>
>
>
> Hai Heru,
>
> Bisa.
>
> vCard file (.vcf) adalah plain text file dengan struktur yang standar.
> Sila dilihat standarisasinya disini
> <https://en.wikipedia.org/wiki/VCard#Properties>, dengan contohnya disini
> <https://en.wikipedia.org/wiki/VCard#Example_of_vCard_files>.
>
> Jadi, pada tabel contacts di sebuah sheet, disertakan kode properti yang
> sesuai. Kemudian di sebuah kolom, susun dengan formula blok vCard setiap
> record contact yang ada. Setiap contact selalu mulai dengan BEGIN:VCARD dan
> diakhir dengan END:VCARD. Jangan lupa, item ke-2 adalah VERSION
>
> Setelah di kolom baru tersebut di dapat bunyi blok vCARD untuk contact di
> baris itu, barulah dilakukan penulisan ke text file yang diberi ekstensi
> .vcf
>
> Contoh menulis isi range ke sebuah plain text file bisa dilihat disini
> <https://app.box.com/s/7urcxbqc33vu7sk8m9t5qnmmf7hi1ja1>.
>
> Regards,
>
> Kid
>
>
>
>
>
>
>
> 2017-03-04 9:59 GMT+07:00 'Heru Safrudin' fcprocessing.bisikediri@bisi.
> co.id [belajar-excel] <belajar-excel@yahoogroups.com>:
>
>
>
> Dear B-Exceller,
>
>
>
> Saya punya data kontak di excel, dengan beberapa kali konversi akhirnya
> data file excel bisa jadi file contact (vcf)
>
> Pertanyaan saya bisakah vba menghubungkan file contact tersebut di ke dan
> dari excel ?
>
>
>
> Mohon pengetahuannya
>
>
>
> Terima kasih
>
>
>
> [image: Heru Safrudin][image: BISI,Heru Safrudin,YM online]
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

Mon Mar 13, 2017 1:39 am (PDT) . Posted by:

"Mr. Kid" nmkid.family@ymail.com

Hai Lukman,

Untuk data series, patut dipertimbangkan pula seberapa lebar rentang waktu
dan tingkat kedetilan informasi yang digunakan dalam kegiatan sehari-hari.

Contoh :
Sebuah perusahaan yang menjual 3 produk sepanjang masa memiliki sekitar 200
orang sales yang tersebar di seluruh Indonesia. Seluruh sales person
tersebut setiap hari melaporkan total penjualan setiap produk yang telah
dilakukannya.
Maka setiap hari akan ada data sebanyak 200 orang * 3 produk * 1
record/hari = 600 records/hari.
Andaikan setahun ada 350 hari kerja sales person, maka dalam setahun ada
350 hari/tahun * 600 records/hari = 210000 records/tahun.

Dalam perusahaan tersebut, kegiatan terhadap data sales dilakukan :

Kasus A : *tanpa *memperhatikan siapa sales personnya. Artinya, *tidak ada
kebutuhan *untuk membuat laporan per sales person atau menganalisa sales
per sales person. Rentang waktu yang dibutuhkan adalah series 10 tahun.
> pada kasus ini, maka data yang disimpan bisa tanpa sales person, tetapi
cukup summary total penjualan per produk per hari.
> artinya, jumlah record yang perlu disimpan per harinya adalah 3 produk *
1 record/hari = 3 records/hari.
> Per tahun berarti hanya ada 350 hari/tahun * 3 records/hari = 1050
records/tahun
> Untuk kebutuhan series 10 tahun, maka perlu menyimpan 1050 records/tahun
* 10 tahun = 10500 records.
> Excel versi berapapun masih mampu menyimpannya
> Data asli yang juga menyimpan informasi sales person bisa dibuang atau
disimpan sebagai file dokumen berupa text file

Kasus B : memperhatikan siapa sales personnya dengan rentang waktu yang
dibutuhkan adalah series 5 tahun.
> pada kasus ini, maka data yang disimpan adalah lengkap.
> artinya, jumlah record yang perlu disimpan per tahunnya adalah 210000
records/tahun.
> Untuk kebutuhan series 5 tahun, maka perlu menyimpan 210000 records/tahun
* 5 tahun = 1050000 records (satu juta lima puluh ribu records)
> Excel versi 2007 ke atas masih bisa menyimpannya

Kasus C : memperhatikan siapa sales personnya dengan rentang waktu yang
dibutuhkan adalah series 10 tahun
> pada kasus ini, maka data yang disimpan adalah lengkap.
> artinya, jumlah record yang perlu disimpan per tahunnya adalah 210000
records/tahun.
> Untuk kebutuhan series 5 tahun, maka perlu menyimpan 210000 records/tahun
* 10 tahun = 2100000 records (dua juta seratus ribu records)
> Excel 2007 ke atas bisa menyimpannya dalam 2 sheet, tetapi akan cukup
sulit mengolahnya
> Fitur Get External Data bisa mempermudah proses terhadap 2 sheet dalam 1
file Excel atau 2 file Exel berisi masing-masing 1 sheet, tetapi masih
kurang efisien.
> Opsi lainnya adalah menyimpan data pada 1 (satu) file text (text file),
kemudian diolah memanfaatkan fitur Get External Data oleh Excel.

Hal tersebut di atas adalah pembahasan dengan *fokus utama adalah Excel*

Padahal,
Semestinya yang menjadi fokus utama adalah data dan pengolahan data.

Artinya, pertanyaan berikut :
Mana yg lebih cepat.
dengan pilihan dibawah ini :

A . di bagi beberap sheet ( data pertahun )
B dibeagi beberapa file (data per tahun)

adalah meletakkan Excel sebagai fokus utama, sehingga bagian :
C. apakah ada solusi lain nya .
> seperti yang dibiru di atas
akan cenderung berharap tetap menjadikan Excel sebagai fokus utama.

*??? Seperti apa sih kalau fokus pada data dan pengolahan data ???*
1. Data membutuhkan wadah yang bisa menampung seluruh data
2. Pengolahan data yang ada dalam wadah tersebut bisa mudah, cepat, dan
tepat sesuai proses bisnis yang dibutuhkan

2 (dua) kondisi agar fokus pada data dan pengolahan data tersebut bisa
disederhanakan menjadi :
1. wadah data sering disebut database
2. pengolah data yang mampu mewujudkannya sering disebut sistem manajemen
database (database management system [disingkat DBMS])

Bahasa pengolah data yang digunakan oleh DBMS dalam mengolah data disebut
SQL.
Jadi, bisa juga dikatakan bahwa bahasa umum pengolahan data adalah SQL
seperti bahasa Inggris sebagai bahasa percakapan umum manusia saat ini.

--- Sampai disini, biasanya sudah mulai banyak yang ogah karena sudah mulai
menyentuh database ---
Payahnya, kata database apalagi database system sudah terlalu umum dikenal
rumit.
[teknologi kok memperumit... yang bermasalah adalah teknologinya atau
pengguna teknologinya ya ? ]
* jadi bingung nih dengan yang memiliki stigma database atau database
system itu rumit.
----------------------------------------------------------

Jadi,
to the point nya adalah :
1. Jika ada data, simpanlah di wadah data yang bernama database.
2. Ketika memilih database, pilihlah yang mampu memanajemen database
[Excel tidak termasuk dong...]
* iya, Excel tidak termasuk...
so what ?
trus gak mau pakai Excel ?
trus pake Excel gak bisa efisien ?
plis deh...

Kembali ke kasus data yang banyak sekali ya....
1. simpan data di sebuah database (bagusnya disebut yang lebih tepat ya,
yaitu DBMS). Misal, disimpan di dalam MS Access, MS SQL Server, Oracle,
MySQL, dsb.
> MS SQL Server punya versi yang free bernama MS SQL Server Express
dengan makasimal size per db file adalag 10GB (bisa berpuluh juta records
nih per file).
> Mengolah data dengan DBMS antar database (db file sekalipun) jauh
lebih cepat dibanding antar kolom dalam sebuah sheet pada workbook yang
sama di Excel.
2. susun proses pengolahan data di DBMS tersebut, setidaknya sampai pada
kondisi didapatkannya suatu recordset (sebut dulu tabel deh) yang sudah
bisa diolah Excel
3. minta Excel untuk mengambil recordset hasil nomor 2 tadi. -> fitur
Get External Data yang bekerja
4. olah di Excel dengan segala kemampuan yang ada
5. *[bila perlu]* buat sebuah proses otomasi dari pengambilan data
sampai ujung terkahirnya (report, summary, printout, dsb) di Excel.

*** Yup, nomor 3,4,5 menunjukkan bahwa Excel sekedar tools. Kalau
lingkungannya bukan Excel, maka nomor 3,4,5 disesuaikan dengan lingkungan
tersebut ***

Artinya :
a. Excel gak usah repot-repot ngloop sana sini, nyusun formula begini
begitu untuk mengolah data yang begitu banyak, karena gak akan bisa cepat.
> DBMS mengolah data 5juta record dalam waktu 60 detik itu sudah perlu
perbaikan atau mengoptimasi proses, alias sudah mulai gak wajar dialamnya.
Artinya si user DBMS yang perlu belajar lagi.
waktu kurang dari 5 detik. Kalau gak percaya, coba saja, lah wong ini cuma
dugaan kok. Malah mestinya sekitar 1 detik sekian micro detik.
b. Penyimpanan dan pengolahan data awalnya diserahkan pada ahlinya, yaitu
DBMS.
> Kalau untuk data seperti contoh di atas (si perusahaan tadi), kalau
kasus C butuh rentang 40 tahun atau sekitar 8juta records, DBMS biasanya
bisa mengolahnya dalam c. Manfaatkan hasil kerja si ahli pada lingkungan
kerja yang dikenal dan dipahami, dalam milis ini berarti pakai Excel.
> Nah ini, ketika sudah kembali ke Excel, untuk ambil data hasil kerja
DBMS yang total records nya mencapai 5juta records misalnya, bisa jadi
butuh waktu sekitar 1 menit atau lebih.
> Tapi, kalau record hasil kerja ahlinya (si DBMS) cuma 1 atau 2 juta
records, paling Excel butuh 5 sampai 10 detik juga kelar.

*** membuat/membangun gedung kantor bertingkat butuh ahli pembuat kaca
untuk menghasilkan kaca jendela bukan ?
*** tukang bangunan dan arsiteknya cuma tinggal milih kaca mana yang pas
untuk gedung itu, lalu dipasang deh dengan segala teknik pertukangan supaya
si kaca gedung tidak lepas atau jatuh.

Demikian kira-kiranya...

Regards,
Kid

2017-03-12 16:10 GMT+07:00 lkm jktind lkmjktind@gmail.com [belajar-excel] <
belajar-excel@yahoogroups.com>:

>
>
> File excelku : saat ini 880511 baris (row) sekitar 88 Mb
>
> excel : versi 2010 : 64 bit
>
> sepengetahuan ku --- jumlah row mak : 1 juta .
>
> antisipasi untuk masa mendatang .
>
> Mana yg lebih cepat.
> dengan pilihan dibawah ini :
>
> A . di bagi beberap sheet ( data pertahun )
> B dibeagi beberapa file (data per tahun)
>
> C. apakah ada solusi lain nya .
>
>
> Salam
>
>
> Lukman
>
>
>
>
>
>

Mon Mar 13, 2017 6:35 pm (PDT) . Posted by:

"lkm jktind" lkmjkt

Mohon bantuannya :

di Sheet Data surat jalan -----diambil data ( A3:A13) (sumber data)

untuk mengisi sheet Data Gaji ---- row dan column -- telah tersedia

row (E3: E13)

column (F3:F13)

Salam

Lukman

NB : seringnya mencari mencari dari sumber .
yg ini mengirim data dari sumber data.
============================================================
Pojok Lowongan Kerja yang disediakan milis :
http://milis-belajar-excel.1048464.n5.nabble.com/Pojok-Lowongan-Kerja-f5725753.html
*** Posting lowongan kerja : ke link tersebut dan klik New Topic
============================================================
bergabung ke milis (subscribe), kirim mail kosong ke: belajar-excel-subscribe@yahoogroups.com
posting ke milis, kirimkan ke: belajar-excel@yahoogroups.com
berkunjung ke web milis : http://tech.groups.yahoo.com/group/belajar-excel/messages
melihat file archive / mendownload lampiran : http://www.mail-archive.com/belajar-excel@yahoogroups.com/
atau (sejak 25-Apr-2011) bisa juga di : http://milis-belajar-excel.1048464.n5.nabble.com/
menghubungi moderators & owners: belajar-excel-owner@yahoogroups.com
keluar dari membership milis (UnSubscribe), kirim mail kosong ke : belajar-excel-unsubscribe@yahoogroups.com
---------------------------------------------------------------------

Tidak ada komentar:

Posting Komentar