Sebelum lanjut, bagi teman-teman yang baru saja tiba disini, mungkin perlu sedikit pemanasan dengan membaca tulisan sebelumnya terkait konversi tanggal ke kalimat, yakni Formula untuk Konversi Tanggal ke Kalimat pada Excel dan Konversi Tanggal ke Kalimat pada Excel (lanjutan).
Tulisan kali ini, saya masih belum sempat menjelaskan baris per baris kode programnya. Mungkin lain kali. Saya telah bubuhkan beberapa komentar seperlunya untuk membantu memperjelas alur program, namun bila ada yang membutuhkan penjelasan detailnya, lain waktu saya akan coba menambahkan bagian penjelasannya. Untuk sekarang, cukup copy-paste saja kode program berikut dan seharusnya ia bisa berjalan dengan baik.
Saya orang baru; Apa itu VBA pada Excel..??
Hmm, cobalah bicara dengan google. Dia tahu banyak. Untuk kali ini saya langsung mengajak teman-teman membuka Excel dan kemudian membuka layar VBA dengan menekan kombinasi tombol
Alt + F11Berikut screenshot-nya:
Memasukkan kode program
Di tampilan tadi pada bagian Jendela Project, pilih (dengan mengklik) VBAProject dan kemudian ambil menu:
Insert > ModuleSetelah itu VBA akan menambahkan Module1 pada Jendela Project. Klik-ganda di Module1 untuk membuka dan menampilkan isinya pada Jendela Kerja. Untuk sekarang, isi Module1 di Jendela Kerja masih kosong. Langsung saja, copy kode program berikut dan paste di Jendela Kerja.
Public Function SatuAngkaKeHuruf(ByVal angka As Integer) As String
Dim strKata As String
Select Case angka
Case 0: strKata = "nol"
Case 1: strKata = "satu"
Case 2: strKata = "dua"
Case 3: strKata = "tiga"
Case 4: strKata = "empat"
Case 5: strKata = "lima"
Case 6: strKata = "enam"
Case 7: strKata = "tujuh"
Case 8: strKata = "delapan"
Case 9: strKata = "sembilan"
End Select
SatuAngkaKeHuruf = strKata
End Function
Public Function TigaAngkaKeHuruf(ByVal angka As Integer) As String
'tempat menyimpan hasil konversi...
Dim strKalimat As String
strKalimat = ""
'ubah angka ke text dengan tiga karakter...
Dim strAngka As String
strAngka = Format(angka, "000")
'ambil bagian ratusan dan bagian puluhan-satuan...
Dim intRatusan, intPuluhanSatuan As Integer
intRatusan = CInt(Left(strAngka, 1))
intPuluhanSatuan = CInt(Right(strAngka, 2))
'konversi bagian ratusan ke kalimat...
If intRatusan >= 1 Then
If intRatusan = 1 Then
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "seratus"
Else
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intRatusan) & " ratus"
End If
End If
'konversi bagian puluhan-satuan ke kalimat...
Dim intPuluhan, intSatuan As Integer
If intPuluhanSatuan >= 1 And intPuluhanSatuan <= 9 Then
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intPuluhanSatuan)
ElseIf intPuluhanSatuan = 10 Then
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "sepuluh"
ElseIf intPuluhanSatuan = 11 Then
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "sebelas"
ElseIf intPuluhanSatuan >= 12 And intPuluhanSatuan <= 19 Then
intSatuan = intPuluhanSatuan - 10
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intSatuan) & " belas"
ElseIf intPuluhanSatuan >= 20 Then
Dim strPuluhanSatuan As String
strPuluhanSatuan = Format(intPuluhanSatuan, "00")
intPuluhan = CInt(Left(strPuluhanSatuan, 1))
intSatuan = CInt(Right(strPuluhanSatuan, 1))
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intPuluhan) & " puluh"
If intSatuan > 0 Then
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intSatuan)
End If
End If
'hasil akhir...
TigaAngkaKeHuruf = strKalimat
End Function
Public Function NamaRibuan(ByVal urutan As Integer) As String
Dim strNama As String
Select Case urutan
Case 1: strNama = ""
Case 2: strNama = "ribu"
Case 3: strNama = "juta"
Case 4: strNama = "milyar"
Case 5: strNama = "trilyun"
Case 6: strNama = "ribu trilyun"
End Select
NamaRibuan = strNama
End Function
Public Function AngkaKeKalimat(ByVal angka As Double, Optional ByVal presisi As Integer = 0) As String
'periksa nilai negatif dan simpan untuk nanti...
Dim isNegatif As Boolean
If angka < 0 Then
isNegatif = True
Else
isNegatif = False
End If
'hilangkan status negatif...
angka = Abs(angka)
'pisahkan dan ambil bagian nondesimal-nya dan desimal-nya...
Dim intNonDecimal, intDecimal As Integer
intNonDecimal = Int(angka)
If presisi = 0 Then
intDecimal = 0
Else
intDecimal = Int((angka - CDec(intNonDecimal)) * WorksheetFunction.Power(10, presisi))
End If
'tempat menyimpan hasil konversi...
Dim strKalimat As String
strKalimat = ""
'proses konversi bagian nondesimal...
'ubah bagian nondesimal ke text...
Dim strNonDecimal As String
strNonDecimal = CStr(intNonDecimal)
'hitung jumlah sub-bagian per tiga digit...
Dim intCount As Integer
intCount = WorksheetFunction.RoundUp(Len(strNonDecimal) / 3, 0)
'proses loop konversi setiap loop sub-bagian...
Dim strWorking, strRibuan, strResult As String
For i = 1 To intCount
strNonDecimal = Left(strNonDecimal, Len(strNonDecimal) - 3 * IIf(i = 1, 0, 1))
strWorking = strNonDecimal
If Len(strWorking) > 3 Then
strWorking = Right(strWorking, 3)
End If
strRibuan = NamaRibuan(i)
strResult = TigaAngkaKeHuruf(CInt(strWorking))
If strResult <> "" Then
strKalimat = TigaAngkaKeHuruf(CInt(strWorking)) & IIf(strRibuan <> "", " " & strRibuan, "") & IIf(strKalimat <> "", " ", "") & strKalimat
End If
Next i
'proses konversi bagian desimal...
'lakukan konversi hanya bila parameter kedua (presisi) telah ditentukan...
If presisi > 0 Then
Dim strDecimal, strFormatPresisi, strPresisi As String
strFormatPresisi = String(presisi, "0")
strDecimal = Format(intDecimal, strFormatPresisi)
If strKalimat = "" Then strKalimat = "nol"
strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "koma"
For i = 1 To presisi
strPresisi = Right(strDecimal, Len(strDecimal) - (i - 1))
strKalimat = strKalimat & " " & SatuAngkaKeHuruf(CInt(Left(strPresisi, 1)))
Next i
End If
'hasil akhir konversi...
AngkaKeKalimat = IIf(isNegatif, "negatif ", "") & Replace(strKalimat, "satu ribu", "seribu")
'ubah huruf pertama menjadi huruf besar...
AngkaKeKalimat = UCase(Left(AngkaKeKalimat, 1)) & LCase(Right(AngkaKeKalimat, Len(AngkaKeKalimat) - 1))
End Function
Menggunakan Formula di Worksheet Excel
Okey, sekarang cukup dengan VBA, kita pindah ke tampilan worksheet Excel untuk mencoba gunakan formula tadi. Format penggunaannya:
=AngkaKeKalimat(angka, [presisi])Formula menerima 2 parameter. Untuk parameter pertama, yakni
angka, adalah angka yang akan dikonversi menjadi kalimat. Dan parameter kedua, yakni presisi, adalah jumlah angka dibelakang koma yang ikut dikonversi. Bila parameter kedua ini tidak diberikan, maka dianggap presisi = 0 (artinya, angka dibelakang koma tidak ikut dikonversi).Selamat mencoba!


Saohagolo...
BalasHapusSaohagolo...
BalasHapus