Banyak ulama sepakat bahwa sikap sabar yang sesungguhnya tampak pada reaksi pertama saat ujian menerpa pertama kali.
Pembahasan lalu tentang blok IF tampak jelas bahwa IF bisa digunakan untuk memeriksa kondisi dengan banyak kriteria seperti berdasar nilai penjualan, warna produk, dan tinggi produk. Blok IF juga bisa digunakan untuk memeriksa kondisi berisi sebuah kriteria yang dibatasi oleh banyak nilai pembatas, seperti nilai lebih dari sekian dan kurang dari sekian, dan sebagainya.
Blok Select Case digunakan untuk memilih proses melalui pemeriksaan terhadap kelompok nilai dari sebuah kriteria. Misalnya saja, suatu nilai analisa penjualan terbentuk kelompok dari 1 sampai 9. Untuk kelompok nilai 1 sampai 3 dan 9 akan mendapat persentase 25%, sedangkan kelompok nilai 4, 6 dan 7 akan mendapat persentase sebesar 10%, dan sisanya mendapat persentase sebesar 3%. Sedang yang diluar kelompok 1 sampai 9 tidak akan mendapat persentase alias 0%.
Penggunaan IF pada kasus demikian akan membutuhkan kondisi yang banyak sekali. Kira-kira akan berbunyi sebagai berikut :
IF lNilai >= 1 AND lNilai <= 3 OR lNilai = 9 THEN
dblPersen = 0.25
ELSEIF lNilai = 4 OR lNilai = 6 OR lNilai = 7 THEN
dblPersen = 0.1
ELSEIF lNilai = 5 OR lNilai = 8 THEN
dblPersen = 0.03
ELSE
dblPersen = 0
END IF
yang jika disusun mengikuti cara penyusunan operator logika akan menjadi :
IF lNilai = 9 THEN
dblPersen = 0.25
ELSEIF lNilai = 4 THEN
dblPersen = 0.1
ELSEIF lNilai = 6 THEN
dblPersen = 0.1
ELSEIF lNilai = 7 THEN
dblPersen = 0.1
ELSEIF lNilai = 5 THEN
dblPersen = 0.03
ELSEIF lNilai = 8 THEN
dblPersen = 0.03
ELSEIF lNilai >= 1 THEN
IF lNilai <= 9 THEN
dblPersen = 0.25
ELSE
dblPersen = 0
END IF
END IF
dan hal ini sangatlah merepotkan.
Bentuk dasar blok Select Case
Secara umum, blok Select Case mengikuti syntax :SELECT CASE kriteria
CASE nilai-nilai kelompok pertama
proses untuk kelompok pertama
CASE nilai-nilai kelompok kedua
proses untuk kelompok kedua
.
CASE nilai-nilai kelompok ke-N
proses untuk kelompok ke-N
CASE ELSE
proses untuk yang tidak masuk kelompok manapun
END SELECT
Blok Select Case bisa disusun bersarang (nested) alias ada Select Case di dalam Select Case layaknya nested IF. Secara umum bentuk bersarangnya adalah :
SELECT CASE kriteria1
CASE nilai kriteria1 untuk kelompok pertama
SELECT CASE kriteria2
CASE nilai kriteria2 untuk kelompok pertama
proses kriteria2 untuk kelompok pertama
.
CASE ELSE
.
END SELECT
CASE nilai kriteria1 untuk kelompok kedua
SELECT CASE kriteria2
CASE nilai kriteria2 untuk kelompok pertama
.
.
END SELECT
.
END SELECT
Blok Select Case bisa menjadi proses dalam blok IF dan begitu pula sebaliknya. Definisi nilai kelompok bisa berupa variabel. Setiap elemen anggota kelompok dipisahkan dengan karakter koma.
Contoh penerapan blok Select Case untuk contoh kasus di atas tadi :
SELECT CASE lNilai
CASE 1 TO 3, 9
dblPersen = 0.25
CASE 4, 6, 7
dblPersen = 0.1
CASE 5, 8
dblPersen = 0.03
CASE ELSE
dblPersen = 0
END SELECT
Jika nilai 5 dalam contoh di atas disimpan dalam variabel bernama lKelTertentu, maka blok Select Case di atas bisa ditulis :
SELECT CASE lNilai
CASE 1 TO 3, 9
dblPersen = 0.25
CASE 4, 6, 7
dblPersen = 0.1
CASE lKelTertentu, 8
dblPersen = 0.03
CASE ELSE
dblPersen = 0
END SELECT
Cara mendefinisikan nilai-nilai kelompok selain dengan cara menyebut nilai tunggal secara langsung adalah sebagai berikut :
Rentang nilai dari nilai awal sampai dengan nilai akhir
nilai_awal TO nilai_akhirnilai_awal dan nilai_akhir bisa berupa variabel
Contoh :
SELECT CASE lNilai
CASE 1 TO 3, lMinimum TO lMaksimum
'proses A
END SELECT
Artinya, proses A akan dikerjakan jika lNilai bernilai dari 1 sampai dengan 3 atau dari nilai yang disimpan dalam variabel lMinimum sampai dengan nilai yang disimpan dalam variabel lMaksimum.
Pada data berupa teks (ber-datatype string), maka akan berdasar tata urutan kode ASCII karakternya dan bersifat case sensitive, seperti :
SELECT CASE sNama
CASE "beexcel" TO "kid"
'proses A
END SELECT
Artinya, proses A akan dikerjakan jika nilai dalam sNama ada dalam urutan antara teks 'beexcel' sampai dengan 'kid'. Jadi, jika sNama berisi teks berbunyi 'ah masa sih', 'lupa', atau 'Fulan' maka proses A tidak akan dikerjakan karena tidak diantara tata urutan dari 'beexcel' sampai 'kid'. Jika sNama berisi teks 'gajah', maka proses A akan dikerjakan.
Menggunakan operator perbandingan terhadap suatu nilai
IS operator_perbandingan nilai_pembanding- Kata IS tersebut bukanlah operator perbandingan IS yang telah dijelaskan pada bahasan lalu.
- Operator_perbandingan yang bisa digunakan adalah salah satu dari <, >, =, <=, >=, <>
- nilai_pembanding bisa berupa variabel
SELECT CASE lNilai
CASE IS <= lMinimum, IS > 17
'proses A
END SELECT
Artinya, proses A akan dikerjakan jika lNilai bernilai kurang dari atau sama dengan nilai yang disimpan dalam variabel lMinimum atau lebih dari 17.
Pada data berupa teks (ber-datatype string), maka akan berdasar tata urutan kode ASCII karakternya dan bersifat case sensitive, seperti :
SELECT CASE sNama
CASE IS < "beexcel", IS >= "kid"
'proses A
END SELECT
Artinya, proses A akan dikerjakan jika nilai dalam sNama ada dalam urutan sebelum teks 'beexcel' atau ada dalam urutan sejak teks 'kid'. Jadi, jika sNama berisi teks 'belajar', 'fulan', atau 'kepo' maka proses A tidak akan dikerjakan. Jika sNama berisi teks 'Gajah' atau 'kuper', maka proses A akan dikerjakan.
Fungsi-fungsi yang dapat berlaku seperti IF atau Select Case
Bahasan tentang blok IF dan blok Select Case dapat mengarahkan alur program untuk memproses sesuatu, termasuk mengisi suatu nilai ke dalam sebuah variabel. Jumlah variabel yang digunakan dalam proses pun bisa lebih dari satu buah. Kadangkala, pemeriksaan suatu kondisi dimaksudkan untuk mengisi sebuah variabel saja. Contohnya seperti kasus pertama dalam bahasan ini, yang hanya akan mengisi variabel bernama dblPersen. VB/VBA menyediakan fungsi untuk menyederhanakan penggunaan blok IF atau blok Select Case. Pada umumnya, fungsi-fungsi tersebut digunakan untuk kebutuhan pengisian nilai suatu variabel berdasar suatu kondisi yang simpel. Variabel bisa digunakan untuk menggantikan nilai-nilai tetapan dalam contoh dibawah nanti. Penggunaan datatype string juga dimungkinkan dalam pemanfaatan fungsi-fungsi ini.Fungsi IIF
Fungsi ini digunakan layaknya IF yang sebaris. Sebaiknya penggunaan dalam bentuk nested function (fungsi dalam fungsi) dihindari agar memudahkan pembacaan baris-baris kode dilain waktu atau oleh programmer lain.Syntax :
variabel_hasil = IIF( kondisi , bagian_TRUE , bagian_FALSE )
Contohnya untuk mengisi persentase bonus senilai 25% ketika nilai penjualan mencapai 1juta atau lebih, dan tidak ada bonus jika belum mencapai nilai penjualan 1juta.
dblPersen = IIF( curSales >= 1000000 , 0.25 , 0 )
Fungsi Switch
Fungsi ini digunakan layaknya IF .. ELSEIF, tetapi tanpa ELSE. Jadi, seluruh kondisi harus didefinisikan secara jelas untuk seluruh kemungkinan yang mungkin. Jika tidak ada kondisi yang sesuai, maka akan menghasilkan nilai NULL dan hanya variabel ber-datatype variant yang bisa menampung nilai hasilnya.Syntax :
variabel_hasil = Switch( _
kondisi_1,hasil_kondisi_1_TRUE _
,..,.. _
,kondisi_N,hasil_kondisi_N_TRUE)
Contoh untuk seluruh kemungkinan diwakili oleh seluruh kondisi yang ada
Persentase bonus senilai 25% ketika nilai penjualan lebih dari 2juta, persentase 15% untuk nilai penjualan lebih dari 1juta sampai 2juta, persentase 5% untuk nilai penjualan senilai 1juta, dan selainnya akan memiliki persentase 0%.
Dim dblPersen As Double, curSales As Currency
dblPersen = Switch( curSales < 1000000 , 0 _
, curSales = 1000000 , 0.05 _
, curSales > 1000000 AND curSales <= 2000000 , 0.15 _
, curSales > 2000000 , 0.25 )
Contoh untuk tidak semua kemungkinan diwakili oleh kondisi-kondisi yang ada
Persentase bonus senilai 25% ketika nilai penjualan lebih dari 2juta dan persen senilai 10% jika penjualan sebesar 1juta.
Dim vPersen As Variant, curSales As Currency
vPersen = Switch(curSales = 1000000,0.1,curSales > 2000000,0.25)
Ketika curSales bernilai 2juta, maka vPersen akan berisi NULL
Contoh menggunakan lebih dari satu kriteria kondisi
Persentase bonus senilai 25% ketika nilai penjualan lebih dari 2juta dan persen senilai 17% ketika jumlah item terjual lebih dari 100.
Dim vPersen As Variant, curSales As Currency, lItem As Long
vPersen = Switch(curSales > 2000000,0.25,lItem > 100,0.17)
Pada contoh ini digunakan 2 kriteria, yaitu berdasar curSales (kriteria nilai penjualan) dan lItem (kriteria jumlah item terjual). Karena tidak seluruh kemungkinan nilai dari masing-masing kriteria didefinisikan kondisinya, maka dapat menghasilkan nilai NULL, yaitu ketika curSales kurang dari atau sama dengan 2juta atau lItem kurang dari atau sama dengan 100. Oleh sebab itu variabel hasil menggunakan datatype variant yang dapat menampung nilai NULL.
Fungsi Choose
Fungsi ini digunakan untuk memilih suatu nilai berdasar nilai indeks item-item yang didefinisikan. Jadi, nilai indeks harus selalu terwakili oleh item-item yang didefinisikan.Syntax :
variabel_hasil = Choose( indeks , item1 , item2 , .. , itemN )
Contoh :
Produk kualitas 1 diberi persentase laba 25%, kualitas 2 diberi persentase laba 17%, kualitas 3 diberi persentase laba 9%.
dblPersen = Choose( lKualitas , 0.25 , 0.17 , 0.09 )
Contoh ini sama dengan blok IF berbunyi :
IF lKualitas = 1 THEN
dblPersen = 0.25
ELSEIF lKualitas = 2 THEN
dblPersen = 0.17
ELSEIF lKualitas = 3 THEN
dblPersen = 0.09
END IF
atau sama dengan blok Select Case berbunyi :
SELECT CASE lKualitas
CASE 1
dblPersen = 0.25
CASE 2
dblPersen = 0.17
CASE 3
dblPersen = 0.03
END SELECT
yang tidak ada bagian ELSE (pada blok IF) atau CASE ELSE (pada blok Select Case). Terkadang, fungsi ini digunakan ketika memanfaatkan beberapa object control Option Button.
:)
Insya Allah pembahasan berikutnya adalah tentang perulangan (loop). Perulangan adalah salah satu bagian penting dan sangat sering digunakan. Pemahaman tentang pengkondisian (IF ataupun Select Case) akan memudahkan dalam memahami tentang perulangan.
Blog excel yang bermanfaat bagi yang ingin belajar vb-excel, thanks
BalasHapusalhamdulilah ilmunya sangat bermanfaat moga dtambah lagi.
BalasHapusSemoga bisa memahaminya
BalasHapusSemoga bisa memahaminya
BalasHapusSemoga bisa memahaminya
BalasHapus