Sungguh banyak kesempatan untuk bisa 'memberi lebih banyak dari apa yang diamanahkan kepada kita dan meminta lebih sedikit dari yang menjadi hak kita'. Sungguh sedikit dari kesempatan itu yang bisa kita raih dan itu adalah suatu kerugian yang besar bagi kita, andaikan kita benar-benar menjadi orang yang berpikir.
Pengaturan proses berdasar suatu kondisi sangat sering dijumpai dalam kehidupan sehari-hari. Begitu pula dalam pemrograman. Suatu kondisi bisa jadi dibatasi oleh banyak nilai dari sebuah kriteria sampai dengan dibatasi oleh banyak nilai dari banyak kriteria. Dengan demikian, diperlukan sebuah proses untuk memeriksa setiap kondisi yang mungkin terjadi.
Operator perbandingan (Comparison Operator)
Pada umumnya, di dalam pemrograman, pemeriksaan setiap kondisi adalah proses membandingkan suatu nilai dengan nilai lainnya atau sekedar memeriksa ada atau tidak ada. Pemeriksaan suatu kondisi akan menghasilkan status terpenuhi atau tidak terpenuhi. Status terpenuhi biasa disebut keadaan TRUE dan status tidak terpenuhi biasa disebut FALSE. Didalam VBA, nilai TRUE akan bernilai -1 jika dikonversi menjadi numerik, sedangkan nilai FALSE akan bernilai 0. Bisa jadi pada bahasa pemrograman selain VBA akan memiliki hasil konversi ke numerik yang berbeda untuk nilai TRUE-nya. Didalam worksheet Excel, nilai TRUE akan dikonversi menjadi nilai 1. Nilai selain 0 akan setara dengan TRUE.Proses penyusunan kondisi tersebut membutuhkan operator penyusun kalimat kondisi yang disebut comparison operator, antara lain berupa :
- < (kurang dari); A < B menghasilkan TRUE ketika A kurang dari B
- > (lebih dari); A > B menghasilkan TRUE ketika A lebih dari B
- <= (kurang dari atau sama dengan); A <= B menghasilkan TRUE ketika A adalah sebelum B dan maksimal sampai B
- >= (lebih dari atau sama dengan); A >= B menghasilkan TRUE ketika A mulai dari B atau lebih dari B
- <> (bukan); A <> B menghasilkan TRUE ketika A selalu berbeda dengan B
- = (sama dengan); A = B menghasilkan TRUE ketika A bernilai sama dengan B
- Is (adalah [khusus object]); rngFind Is Nothing menghasilkan TRUE ketika variabel bernama rngFind tidak ada isinya
- Like (ada bunyi [khusus string]); sTeks Like sPattern menghasilkan TRUE ketika nilai dalam sTeks memiliki bunyi nilai sPattern
Operator logika (Logical Operator)
Sering ditemui juga suatu kebutuhan yang harus memeriksa secara langsung beberapa kondisi, baik yang terdiri dari sebuah kriteria maupun yang banyak kriterianya. Antar kondisi tersebut memiliki suatu hubungan yang harus terpenuhi. Hubungan tersebut sering dinamakan sebagai hubungan logika. Contohnya adalah ketika nilai penjualan mencapai sekian atau jumlah item tertentu yang terjual mencapai sekian maka akan dilakukan proses demikian. Nilai penjualan mencapai sekian adalah kondisi pertama. Jumlah item tertentu yang terjual mencapai sekian adalah kondisi kedua. Kondisi pertama dengan kondisi kedua harus terpenuhi melalui hubungan 'atau', yang berarti andaikan salah satu saja dari kondisi tersebut terpenuhi, proses yang demikian akan dilakukan.Hubungan logika yang sering digunakan adalah :
- AND seperti kondisi1 AND kondisi2 maka kedua-duanya harus terpenuhi
- OR seperti kondisi1 OR kondisi2 maka ada yang harus terpenuhi
- XOR seperti kondisi1 XOR kondisi2 maka hanya satu saja yang terpenuhi dan tidak boleh keduanya terpenuhi
- NOT seperti NOT kondisi1 maka selain kondisi1 yang terpenuhi
Bentuk dasar blok IF
Banyak sekali dan sangat sering dijumpai di dalam penentuan alur proses atau pemilihan suatu proses dalam pemrograman menggunakan kata IF yang berarti jika. Kalimat dasarnya adalah 'jika suatu kondisi terpenuhi maka lakukan yang ini, jika kondisi tidak terpenuhi maka lakukan yang itu'. Statement IF bisa digunakan untuk menentukan suatu nilai ataupun suatu proses berdasar suatu kondisi tertentu.Syntax IF adalah :
IF kondisi_1 THEN
proses untuk kondisi_1 yang terpenuhi
ELSEIF kondisi_2 THEN
proses untuk kondisi_2 yang terpenuhi
ELSEIF .. THEN
.
.
ELSEIF kondisi_N THEN
proses untuk kondisi_N yang terpenuhi
ELSE
proses untuk yang tidak memenuhi kondisi apapun
END IF
Bentuk dasar sebagai sebuah blok IF di atas akan memudahkan pembacaan dan penyusunan alur logika.
Beberapa bentuk penggunaan IF
Dari bentuk dasar IF ini, akan muncul berbagai bentuk, seperti :Sebaris khusus untuk proses yang harus memenuhi sebuah kondisi
IF kondisi1 THEN proses_kondisi1_terpenuhimeskipun bisa disusun dalam bentuk satu baris penulisan, sebaiknya tetap disusun dalam bentuk dasarnya menjadi :
IF kondisi1 THEN
proses_kondisi1_terpenuhi
END IF
Contohnya proses jika nilai penjualan 0 maka batalkan proses :
IF lJual = 0 THEN Exit Sub
sebaiknya tetap ditulis dalam bentuk dasar IF sebagai :
IF lJual = 0 THEN 'nilai penjualan adalah 0
Exit Sub
END IF
Sebaris untuk mencabang 2 suatu proses berdasar sebuah kondisi :
IF kondisi1 THEN proses_cabang1 ELSE proses_cabang2meskipun bisa disusun dalam bentuk satu baris penulisan, sebaiknya tetap disusun dalam bentuk dasarnya menjadi :
IF kondisi1 THEN
proses_cabang1
ELSE
proses_cabang2
END IF
Contohnya proses jika nilai penjualan 0 maka tetapkan nilai persentase bonus dengan 0 persen. Jika nilai penjualan tidak 0 maka tetapkan nilai persentase bonus dengan nilai penjualan dibagi 1juta :
IF lJual = 0 THEN dblBonus = 0 ELSE dblBonus = lJual / 1000000
meskipun bisa disusun dalam bentuk satu baris penulisan, sebaiknya tetap disusun dalam bentuk dasarnya menjadi :
IF lJual = 0 THEN 'nilai penjualan adalah 0
dblBonus = 0
ELSE 'nilai penjualan bukan 0
dblBonus = lJual / 1000000
END IF
Satu kriteria dengan banyak batas :
IF kondisi1_batas1 THENproses batas 1
ELSEIF kondisi1_batas2 THEN
proses batas 2
.
ELSE
proses tidak memenuhi batas-batas yang ada
END IF
Contohnya adalah penentuan nilai kualitas produk 'A' sampai 'C' berdasar batas minimal nilai lulus uji mencapai 90,75,60 dengan sisanya dinyatakan gagal :
IF lNilai >= 90 THEN 'Nilai dimulai dari 90 ke atas
sAkhir = "A"
ELSEIF lNilai >= 75 THEN 'Nilai dimulai dari 75 sampai sebelum 90
sAkhir = "B"
ELSEIF lNilai >= 60 THEN 'Nilai dimulai dari 60 sampai sebelum 75
sAkhir = "C"
ELSE 'Nilai kurang dari 60 (tidak mencapai 60)
sAkhir = "Gagal"
END IF
Banyak kriteria :
IF kondisi1 THENproses kondisi1
ELSEIF kondisi2 THEN
proses kondisi2
.
ELSE
proses lainnya
END IF
Contohnya adalah ketika proses akan diarahkan berdasar warna produk yang merah akan memberi nilai jual adalah 100, jika tinggi lebih dari 50 akan diberi potongan harga sebanyak 25 persen dan selainnya akan diberi nilai kualitas 'C' :
IF sWarna = "Merah" THEN 'produk warna merah
lJual = 100
ELSEIF lTinggi > 50 THEN 'tinggi produk lebih dari 50
dblDisc = 0.25
ELSE 'produk lainnya
sAkhir = "C"
END IF
Bersarang ( IF di dalam IF ) :
Bisa digunakan ketika kondisi tersusun atas banyak kriteria, berjenjang, dan harus terpenuhi mengikuti urutan pemeriksaan tertentu :IF kondisi1 THEN
IF kondisi1A THEN
proses untuk kondisi 1A
ELSEIF kondisi1B THEN
proses untuk kondisi 1B
.
ELSE
proses lain selama kondisi1 terpenuhi
END IF
ELSEIF kondisi2 THEN
IF kondisi2A THEN
.
ELSEIF .. THEN
.
ELSE
.
END IF
.
ELSE
IF .. THEN
.
ELSEIF .. THEN
.
ELSE
.
END IF
END IF
Jumlah level IF yang ada di dalam sebuah IF bisa bertingkat sangat banyak. Kondisi yang paling sering dan mungkin terjadi diletakkan pada baris-baris awal blok IF. Misalnya, kondisi berbunyi nilai penjualan lebih dari nol lebih sering terjadi dibanding nilai penjualan adalah 0, maka gunakan kondisi nilai penjualan lebih dari 0.
Contohnya adalah penentuan bonus untuk warna merah berdasar jumlah item terjual, sedang penentuan bonus untuk tinggi produk lebih dari 50 akan berdasar nilai penjualan, dan selainnya berdasar indeks kualitas penjualannya. Penjualan warna merah lebih sering terjadi dibanding berdasar tinggi produk. Susunan blok IF-nya bisa berupa :
IF sWarna = "Merah" THEN 'produk warna merah
IF lJual > 10 THEN 'terjual lebih dari 10 item
dblBonus = 0.25
ELSEIF lJual > 5 THEN 'terjual lebih dari 5 item - 10 item
dblBonus = 0.1
ELSE 'terjual maksimal 5 item
dblBonus = 0
END IF
ELSEIF lTinggi > 50 THEN 'produk dengan tinggi bernilai 50
IF curSales > 2000000 THEN 'terjual senilai lebih dari 2juta
dblBonus = 0.25
ELSEIF curSales >= 1000000 THEN 'terjual mulai 1juta sampai 2juta
dblBonus = 0.2
ELSEIF curSales > 500000 THEN 'lebih dari 500ribu tapi belum 1juta
dblBonus = 0.1
ELSE 'terjual maksimal senilai 500ribu
dblBonus = 0
END IF
ELSE 'produk yang bukan berkriteria khusus
IF sAkhir = "A" THEN 'termasuk kualitas penjualan A
dblBonus = 0.35
ELSEIF sAkhir = "B" THEN 'termasuk kualitas penjualan B
dblBonus = 0.15
ELSE 'termasuk dalam kualitas penjualan lainnya
dblBonus = 0.01
END IF
END IF
Penggunaan operator logika dalam IF
Beberapa kondisi yang saling terkait dengan operator logika tertentu dapat membentuk sebuah kondisi baru. Penggunaan IF yang disertai operator logika antara lain seperti :Operator AND seperti kondisi1 AND kondisi2
IF kondisi1 AND kondisi2 THENproses ketika kondisi1 dan kondisi2 terpenuhi seluruhnya
ELSE
proses ketika tidak terpenuhi
END IF
Susunan seperti ini, terutama untuk operator logika AND pada banyak kondisi, akan lebih cepat bila disusun sebagai :
IF kondisi1 THEN
IF kondisi2 THEN
proses ketika kondisi1 dan kondisi2 terpenuhi seluruhnya
ELSE
proses ketika tidak terpenuhi
ENDIF
ELSE
proses ketika tidak terpenuhi
END IF
Contohnya, bonus diberikan 25% ketika nilai penjualan mencapai 100 sampai dengan 500, selainnya adalah 0%
dblBonus = 0
IF lNilai >= 100 AND lNilai <= 500 THEN
dblBonus = 0.25
END IF
akan lebih cepat diproses, terutama saat ada banyak kondisi dengan operator logika AND, jika dibentuk dalam susunan :
dblBonus = 0
IF lNilai >= 100 THEN
IF lNilai <= 500 THEN
dblBonus = 0.25
END IF
END IF
Operator OR seperti kondisi1 OR kondisi2
IF kondisi1 OR kondisi2 THENproses ketika salah satunya terpenuhi
ELSE
proses ketika tidak ada yang terpenuhi
END IF
Susunan seperti ini, terutama untuk operator logika OR pada banyak kondisi, akan lebih cepat bila disusun sebagai :
IF kondisi1 THEN
proses ketika salah satunya terpenuhi
ELSEIF kondisi2 THEN
proses ketika salah satunya terpenuhi
ELSE
proses ketika tidak ada yang terpenuhi
END IF
Contohnya, bonus diberikan 25% ketika produk yang terjual adalah salah satu dari warna merah atau hijau, atau tinggi produk lebih dari 50. Selainnya akan diberi bonus 0%.
dblBonus = 0
IF sWarna = "Merah" OR sWarna = "Hijau" OR lTinggi > 50 THEN
dblBonus = 0.25
END IF
akan lebih cepat diproses, terutama saat ada banyak kondisi dengan operator logika AND, jika dibentuk dalam susunan :
dblBonus = 0
IF sWarna = "Merah" THEN
dblBonus = 0.25
ELSEIF sWarna = "Hijau" THEN
dblBonus = 0.25
ELSEIF lTinggi > 50 THEN
dblBonus = 0.25
END IF
Operator NOT (bukan atau selain kondisi yang ada)
IF NOT kondisi1 THENproses ketika kondisi1 tidak terpenuhi
ELSE
proses ketika kondisi1 terpenuhi
END IF
Bisa jadi kondisi1 adalah hasil dari operator logika terhadap beberapa kondisi lain. Misalnya kondisi2 AND ( kondisi3A OR kondisi3B ) akan membentuk kondisi baru bernama kondisi1. Maka susunan IF dengan opreator logika NOT bisa berupa :
IF NOT ( kondisi2 AND ( kondisi3A OR kondisi3B ) ) THEN
proses ketika kondisi1 tidak terpenuhi
ELSE
proses ketika kondisi1 terpenuhi
END IF
Contohnya adalah ketika produk adalah warna merah maka nilai bonus adalah 10% dan selainnya adalah 25%, dapat disusun kondisi berbunyi :
dblBonus = 0.1
IF NOT ( sWarna = "Merah" ) THEN
dblBonus = 0.25
END IF
:)
Pembahasan selanjutnya adalah tentang statement Select Case yang merupakan bahasa lain dari sebagian bentuk penggunaan IF. Juga akan dibahas beberapa fungsi-fungsi bawaan VB/VBA yang bisa digunakan untuk penentuan suatu nilai berdasarkan kondisi tertentu, seperti fungsi IIF, Choose, dan Switch.
No comments:
Post a Comment