Kalau penjelasan seperti ini dibilang penjelasan singkat, saya mau tahu
seperti apa yaaa penjelasan panjang lebarnya Mas Kid.
On 06/06/2014 9:28, 'Mr. Kid' [email protected] [belajar-excel] wrote:
hehehe... (kasus ini menggunakan data berorientasi horisontal loh ya)
bukan ndak bisa Pak, hanya mulai kurang efisien.
Biasanya CountIF akan sedikit lebih lambat dari Match kalau lebih dari
100. Tapi ini relatif terhadap mesin masing-masing kok.
Pada data yang berorientasi vertikal, maka besar kemungkinan bahwa
area yang akan di CountIF apalagi CountIFs akan sangat banyak.
Fungsi Count (termasuk yang pakai IF maupun IFs) akan menganalisa
seluruh cell yang dirujuk. Jika cell yang dirujuk ada 1000, maka
keseluruhannya (yang 1000 cell itu) akan diperiksa satu per satu untuk
menghasilkan output nilai hasil Count tersebut. Berarti, pasti minimal
ada 1000 proses pemeriksaan.
Ketika kebutuhannya sekedar ada data atau tidak dengan 1 kriteria,
berarti tidak butuh informasi ada berapa datanya. Hasil Count > 0
berarti ada datanya dan hasil Count = 0 berarti tidak ada datanya.
Cukup hanya itu saja yang dibutuhkan. Tidak peduli ada 1 atau 3 atau 5
data. Pada kebutuhan seperti ini, sebenarnya yang dibutuhkan, minimal
ketemu 1 saja maka proses sudah cukup informasi untuk memutuskan bahwa
ada datanya. Jika pemeriksaan ada datanya atau tidak diperiksa dengan
Count, maka akan ada proses sia-sia, yaitu setelah mendapatkan hasil
analisa bahwa menemukan 1 data dimaksud, masih saja memeriksa cells
lain sampai 1000 cell terperiksa.
Itu sebabnya, untuk data yang banyak (asumsikan saja ada lebih dari
100 data pada komputer yang bekerja berat), fungsi Count berpotensi
melakukan proses sia-sia yang cukup banyak. Maka pada kondisi ini
(data lebih dari 100 di komputer yang terbebani), kurang 'mesiniawi'
jika ada banyak proses sia-sia. Maka sebaiknya memilih menggunakan
fungsi Match.
Sampai disini, *kesimpulan sementara *adalah : (cek keberadaan data
berdasar 1 kriteria)
-> gunakan CountIF atau CountIFs secara bijak jika enggan menggunakan
Match
-> Match lebih efisien dibanding CountIF atau CountIFs
Pada kasus-kasus yang berupa pengecekan keberadaan data berdasar lebih
dari 1 kriteria (2,3,dst), akan sedikit berubah konstelasinya.
Kriteria yang lebih dari 1 akan membutuhkan pemeriksaan secara
menyeluruh berdasar kriteria-kriteria yang sesuai.
-> Fungsi CountIF jelas tidak bisa dipakai, kecuali jika akan
menggunakan kolom bantu yang menggabungkan semua kriteria dalam sebuah
cell, sehingga kriterianya menjadi 1 saja, yaitu komposit dari seluruh
kriteria yang dibutuhkan.
-> Fungsi CountIFs bisa digunakan dan akan bekerja dengan cara yang
sama, yaitu memeriksa seluruh cell rujukan. Jika ada 1000 cell, maka
ke-1000 cells itu akan diperiksa. Jika ada 2 kriteria, maka setiap
cell dilakukan 2 proses. Jadi total 2000 proses. Kecepatannya tidak
akan lebih lambat 2 kali lipat dari penggunaan terhadap 1 kriteria,
melainkan hanya lebih lambat sedikit saja. Artinya jika ada n
kriteria, bukan berarti akan ekponensial n melambatnya.
-> Fungsi Match bisa digunakan selama seluruh kriteria disusun
membentuk sebuah array. Artinya, jika ada 1000 cells data berdasar 2
kriteria, maka Match akan membentuk array 1 dimensi berdasar 2
kriteria itu. Jadi dalam hal ini, akan ada 3000 proses untuk membentuk
arraynya saja, kemudian ditambah sekian proses untuk proses pencariannya.
Contoh : data kriteria 1 di C1:C1000 harus sama dengan 1 dan kriteria
2 di G1:G1000 harus bernilai > 1500
>> dengan Match
Match( 1 , (c1:c1000=1) * (g1:g1000>1500) , 0 )
proses 1 : (c1:c1000=1) -> ada 1000 cells = 1000 proses
proses 2 : (g1:g1000>1500) -> ada 1000 cells = 1000 proses
proses 3 : * -> mengalikan hasil proses 1 dengan proses 2 -> ada 1000
cells = 1000 proses
total 3000 proses
setelah didapat array hasil proses 3, barulah melakukan proses
pencarian nilai 1 (lookup_value). Andai ditemukan pada item array ke
350 (karena item ke-1 sampai item ke-349 di proses 3 menghasilkan
nilai 0 dan item ke-350 hasil proses 3 yang bernilai 1), maka akan ada
tambahan 350 proses.
Total 3000 + 350 proses = 3350 proses.
>> Pada menggunaan CountIFs
CountIFs( c1:c1000,1,g1:g1000,">1500")>0
prosesnya ada sebanyak :
proses 1 : c1:c1000 bernilai 1 -> ada 1000 cells = 1000 proses :
asumsikan ada 800 cells kolom C itu yang bernilai 1
proses 2 : g1:g1000 > 1500 hanya pada yang kolom c nya adalah 1 -> ada
800 cells = 800 proses : asumsikan ada 470 cells kolom G yang bernilai
> 1500 maka hasil CountIF (berupa sebuah nilai saja) bernilai 470
proses 3 : memeriksa hasil proses 2 (yang cuma sebuah nilai, yaitu
nilai 470 hasil proses 2) apakah lebih dari 0 (ada datanya) -> 1 nilai
= 1 proses
Total : 1000 + 800 + 1 = 1801 proses
Tentu selisih antara 3350 proses milik match terhadap 1801 proses
milik CountIFs cukup banyak, yaitu 1549 proses. Daripada proses itu
digunakan untuk hal yang ndak guna, mending digunakan untuk kegiatan
lain alias mengkalkulasi cell lain.
Jadi, sampai disini, bisa disimpulkan bahwa :
1. Fungsi CountIF, CountIFs, atau Match untuk memeriksa keberadaan
data, sebaiknya dipilih dengan bijak.
2. Untuk keberadaan data yang berdasar 1 kriteria saja, akan efisien
dengan Match
3. Jika keberadaan data berdasar kriteria akan menggunakan CountIF,
sebaiknya digunakan untuk jumlah record yang tidak banyak relatif
menurut kemampuan mesin setempat agar lebih 'mesiniawi'
4. Pada keberadaan data yang berdasar lebih dari 1 kriteria, CountIFs
lebih efisien daripada Match yang membutuhkan proses pembentukan array
1 dimensi.
Sekarang, mari kita bayangkan jika ada 50000 data saja.
Yang lebih parahnya lagi, penggunaan rujukan ke seluruh kolom seperti
$c:$c atau $g:$g
Jika di xl2003 yang maksimum baris Excel ada 65000 sekian, penggunaan
CountIF akan bertambah 1 proses untuk mencari tahu dimana baris
terakhir sheet yang ada datanya (baris di last cell dalam sheet).
Jika dengan Match dan untuk 1 kriteria, maka tergantung ketemunya
dimana (alias tetap efisien). Jika pada kriteria yang lebih dari 1,
maka penggunaan Match yang ditulis :
Match( 1 , ($c:$c=1)*($g:$g) , 0 )
akan bekerja mengolah data sebanyak 65000 sekian baris alias sama saja
datanya ada 65000 sekian, padahal yang terisi data hanya 1000 baris saja.
Bagaimana jika Excel yang digunakan adalah xl2007 ke atas yang ada 1M
lebih baris (1 juta lebih loh). Hasilnya, manusianya mengeluh tidak
pada tempatnya karena berujar : "Excel itu lemot sekale.... " dan
dikabarkan ke sluruh penjuru dunia tentang kelemotan Excel. Padahal
kan yang lemot manusianya kan ya... karena ndak mau belajar untuk
memahami Excel.
Jadi, rujukan ke seluruh kolom sebaiknya dihindari. Caranya bagaimana ?
Antara lain dengan salah satu opsi dari beberapa opsi berikut :
1. Manfaatkan fitur Excel Table (xl2007 ke atas) atau List (xl2003)
agar area data menjadi dinamis dan mudah dirujuk secara tepat dalam
kedinamisannya
2. Buat nama range yang merujuk ke suatu area secara dinamis. Tentu
saja dengan formula seperti Index dan kawan-kawan. Nah opsi ini
membutuhkan kemauan untuk belajar. Hati-hati loh... kegiatan belajar
itu sangatlah berat bagi manusia yang pengen maju dengan cara instan.
Artinya, kemajuan yang didapat instan adalah kemajuan semu... kemajuan
bawang kotong alias tong kosong sajah...
3. Ubah sumber data jika belum berkaidah tabel database menjadi tabel
berkaidah tabel database, dan susun ulang proses untuk menghasilkan
output agar bisa memanfaatkan fitur seperti Pivot Table (baik Excel
Pivot Table atau Power Pivot [xl2010 keatas])
Kira-kira demikian uraian singkatnya...
;)
Wassalam,
Kid.
2014-06-06 8:20 GMT+07:00 joko welas [email protected]
<mailto:[email protected]> [belajar-excel]
<[email protected] <mailto:[email protected]>>:
pak kid
maksih .. kalo boleh tau kenapa ya mr.kid kalo lebih dari 100 kok
gak bisa
dengan fungsi countif....
salam
joko
2014-06-05 7:55 GMT+07:00 'Mr. Kid' [email protected]
<mailto:[email protected]> [belajar-excel]
<[email protected]
<mailto:[email protected]>>:
Untuk jumlah cell $D2:$K2 yang tidak lebih dari 100
bisa dengan fungsi CountIF sebagai alat cek keberadaan suatu
nilai, seperti :
=( CountIF( $D2:$K2 , M$1 ) >0 ) *$L2
Wassalam,
Kid.
2014-06-04 10:29 GMT+07:00 'Bagus' [email protected]
<mailto:[email protected]> [belajar-excel]
<[email protected]
<mailto:[email protected]>>:
Hai Joko;
Coba begini:
=ISNUMBER(MATCH(M$1,$D2:$K2,0))*$L2
Copas kekanan dan kebawah
Wassalam
~ Bagus ~
----- Original Message -----
*From:* joko welas [email protected] [belajar-excel]
<mailto:[email protected]+[belajar-excel]>
*To:* [email protected]
<mailto:[email protected]>
*Sent:* Wednesday, June 04, 2014 8:47 AM
*Subject:* [belajar-excel] memberi uang hadir otomatis
[1 Attachment]
asalamu alaikum wr. wb
salam be excel
begini suhu excel
saya punya data rekap hadir. setiap peserta yang hadir
dapat uang hadir.
pertanyaanya. bagaimana memberikan uang hadir tersebut
sesuai nama jang hadir saja.
untuk jelasnya file terlampir.
salam
joko