Minggu, 03 November 2013

Cara Mengambil Nilai Acak pada VBA Excel


Nilai acak sering kita gunakan sebagai simulasi atau menghasilkan data contoh. Pada VBA, fungsi untuk menghasilkan nilai acak adalah RND().

Pemanggilan fungsi RND akan menghasilkan nilai pecahan dari 0 s/d 1, misalkan nilai 0.96 atau 0.056.

Selain itu, fungsi ini dapat menerima satu parameter bertipe nilai numerik dengan syntax sebagai berikut.

RND(PARAMETER_ANGKA)

Dimana PARAMETER_ANGKA dapat memiliki nilai sebagai berikut.
  • nilai di bawah nol  ( <0 ), akan menghasilkan nilai acak pertama kali saja. Setelah itu nilainya tidak akan berubah-ubah. 
  • nilai di atas nol  ( >0 ), akan menghasilkan nilai acak berikutnya.
  • nilai nol  ( 0 ), akan menghasilkan nilai yang sama dengan nilai acak terakhir yang dihasilkan.
Semua nilai parameter di atas akan tetap menghasilkan nilai acak pecahan dari 0 s/d 1.

Jika Anda ingin mengambil rentang nilai diantara 0 s/d 100 maka dapat menggunakan kode berikut:

RND() * 100

Dan jika Anda ingin mengambil rentang nilai yang memiliki nilai negatif, misalkan diantara -50 s/d 50 maka dapat menggunakan kode berikut:

RND() * 100 - 50

Berikut adalah contoh code VBA pada satu worksheet yang memiliki 3 button dan telah diassign macro masing-masing button1_click, button2_click dan button3_click untuk mensimulasikan penggunaan berbagai variasi fungsi RND. Contoh file Excelnya dapat Anda download disini.

Sub Button1_Click()
Sheet1.Range("A1") = "Rnd()"
Sheet1.Range("B1") = "Rnd(0)"
Sheet1.Range("C1") = ""
Sheet1.Range("D1") = "Rnd(5)"
Sheet1.Range("A2") = Rnd()
Sheet1.Range("B2") = Rnd(0)
Sheet1.Range("C2") = ""
Sheet1.Range("D2") = Rnd(5)
End Sub

Sub Button2_Click()
Sheet1.Range("A1") = "Rnd()"
Sheet1.Range("B1") = "Rnd(0)"
Sheet1.Range("C1") = "Rnd(-5)"
Sheet1.Range("D1") = "Rnd(5)"
Sheet1.Range("A2") = Rnd()
Sheet1.Range("B2") = Rnd(0)
Sheet1.Range("C2") = Rnd(-5)
Sheet1.Range("D2") = Rnd(5)
End Sub

Sub Button3_Click()
Sheet1.Range("A1") = "0.00 s/d 100.00"
Sheet1.Range("B1") = "0 s/d 100"
Sheet1.Range("C1") = "-50 s/d 50"
Sheet1.Range("D1") = ""
Sheet1.Range("A2") = Rnd() * 100
Sheet1.Range("B2") = CInt(Rnd() * 100)
Sheet1.Range("C2") = CInt(Rnd() * 100 - 50)
Sheet1.Range("D2") = ""
End Sub

~~~ Semoga Bermanfaat ~~~