Pada bab ini penulis akan membahas bagaimana cara membuat fungsi yang dibuat sendiri (user define function) pada Excel menggunakan VBA. Hal ini berguna bila kita hendak membutuhkan sebuah fungsi yang tidak disediakan oleh Microsoft Excel. Pada bahasan kali ini, penulis akan membuat fungsi yang akan merubah angka menjadi kata-kata pada Excel 2007. Tulisan ini diinspirasi oleh komentas salah seorang pembacabernama Pak Djoko Prakoso (djoko.prakoso.13@gmail.com) pada tulisan "Memulai Macro Excel"
MEMBUAT BERKAS YANG MEMILIKI MACRO PADA EXCEL 2007
Karena menggunakan Excel 2007 maka berkas Excel yang kita buat haruslah menggunakan extensi “.xslm”. Sekarang mari kita membuat sebuah berkas baru Excel, berkas tersebut masih dalam format “.xslx”.
Buka berkas tersebut, kemudian simpan sebagai (save as) “fungsi sendiri.xslm”.
Maka kita telah membuat sebuah berkas Excel 2007 yang dapat menggunakan macro (macro enabled). Lalu kita atur keamanan dan privasi Excel kita pada Macro Settings dan Trusted Location (lokasi terpercaya tempat kita menyimpan berkas-berkas excel ber-macro), sehingga macro yang telah kita buat dapat bekerja. Kedua pengaturan tersebut terdapat pada Excel Option-Trust Center-Trust_Center Settings.
Pada pengaturan Macro, pilih “Disabled All Macro Except Digitally Signed Macros” (pilihan ke 3) atau “Enabled All Macro” (pilihan ke 4), penulis menyarankan pilihan ke-4 bagi pemula.
Kemudian kita atur juga lokasi folder yang terpercaya (Trusted Location), di komputer penulis terletak di “E:\VBA\”. Jangan lupa untuk mencentang pilihan “Subfolder of this location also trusted” agar subfolder dari folder ini juga dipercaya.
MEMBUAT FUNGSI MERUBAH ANGKA KE KATA UNTUK ANGKA TUNGGAL
Untuk membuat fungsi sendiri, maka kita perlu membuat prosedur fungsi (function procedure) VBA pada module di Visual Basic Editor.
Sekarang kita telah membuat sebuah fungsi bernama “angka_ke_kata” yang akan menghasilkan sebuah kata (tipe data string) dengan argumen sebuah angka (tipe data double). Tipe data string diperuntukkan untuk teks, sedangkan tipe data double diperuntukkan untuk bilangan asli dan pecahan.
Function angka_ke_kata(angka As Double) As String
Dalam fungsi ini pertama kita akan menyiapkan array yang berisi teks yang berassosiasi dengan bilangan yang dimaksud. Array itu kita beri nama “kata_angka”, berukuran 10, yang beranggotakan kata untuk bilangan dari nol sampai sembilan.
Dim kata_angka(10) As String
kata_angka(0) = "nol"
kata_angka(1) = "satu"
kata_angka(2) = "dua"
kata_angka(3) = "tiga"
kata_angka(4) = "empat"
kata_angka(5) = "lima"
kata_angka(6) = "enam"
kata_angka(7) = "tujuh"
kata_angka(8) = "delapan"
kata_angka(9) = "sembilan"
Berdasarkan array ini kita sudah dapat membuat sebuah fungsi yang merubah angka tunggal menjadi kata. Kita cukup menambahkan kode VBA yang mengembalikan kata yang sesuai dengan argumen “angka” ketika fungsi “kata_ke_angka” dipanggil.
angka_ke_kata = kata_angka(angka)
Sekarang kita kembali ke “sheet1” pada workbook Excel untuk mencoba fungsi yang telah dibuat. Isikan angka pada sel “A1” kemudian pada sel “A2” masukkan fungsi excel “angka_ke_kata”. Fungsi ini terletak pada pilihan fungsi “user defined”.
MEMBUAT FUNGSI MERUBAH ANGKA KE KATA UNTUK ANGKA LEBIH DARI 9
Sejauh ini kita telah membuat sebuah fungsi yang merubah angka ke kata. Tapi fugnsi ini bekerja hanya untuk angka-angka tunggal (dari nol sampai Sembilan). Lebih dari itu maka fugnsi init akan menghasilkan kesalahan, sebagai contoh kita tuliskan nilai 10 atau 200 di sel “A1”.
Selanjutnya kita akan melengkapi kode-kode di fungsi yang telah kita buat, sehingga dapat merubah angka lebih dari 9 menjadi kata. Algoritma nya sebenarnya cukup mudah, fungsi yang kita buat pertamaakan menghitung panjang angka yang akan diubah. Setelah itu fungsi tersebut akan merubah tiap anggota angka menggunakan array “kata_angka” seperti bahaasan sebelumnya, kemudian menggabungkan hasil-hasilnya. Sehingga hasil yang akan didapat nanti adalah berupa gabungan kata-kata, atau lebih tepatnya disebut kalimat.
Dalam Visual Basic dikenal fungsi “Len(pernyataan)” yang berguna untuk mengetahui panjang sebuah teks (kata atau kalimat). Karena angka yang kita ubah berupa bilangan bukan teks, maka kita perlu merubah angka tersebut menjadi teks dengan fungsi “Cstr(pernyataan)”. Bilangan dalam format data double yang telah dikonversi menjadi format data string akan kita simpan dalam variabel “angka_dlm_teks”. Sedangkan panjangnya kita taruh dalam variabel “panjang_angka”.
angka_dlm_teks = CStr(angka)
panjang_angka = Len(angka_dlm_teks)
Sekarang mari kita uji hasilnya dengan angka 5 , 317, 105076.
Berdasarkan informasi panjang angka tersebut, kita dapat membuat sebuah loop untuk merubah tiap anggota angka menjadi kata dan menggabungkannya kembali. Dalam loop tersebut setiap karakter dalam variabel “angka_dlm_teks” akan kita ambil meggunakan fungsi “Mid(string,awal,jumlah)”. Kemudian memasukan karakter itu ke dalam variabel “index_angka”. Variabel ini akan digunakan untuk mengambil data dari anggota array “kata_angka” yang berasosiasi dengan karakter tersebut. Untuk menggabungkan hasilnya dari setiap kali proses tersebut diulang, maka digunakan operator penggabungan “&”.
For i = 1 To panjang_angka
index_angka = Mid(angka_dlm_teks, i, 1)
angka_ke_kata = angka_ke_kata & " " & kata_angka(index_angka)
Next
Sekarang mari ktia tes fungsi ini dengan angka 1, 720 dan 30827.
65 komentar:
Mas Ben, sudah 3 tahun lebih gak update postingan ya... saya suka sama tutorialnya... semoga produktif lagi
makasih mas....sedang ada kesibukan di kantor jadi waktunya agak sulit buat nulis2 lagi...kalo ada sempat saya kan publih banyak...dan mudah2an update dengan teknologi informasi terkini :)
very good!
thank you...
Maaf Pak, saya mau tanya nih...
Kalau ingin menghitung rata-rata nilai pada suatu range, tapi hanya yang memiliki nilai lebih dari nol (0), sementara pada range tersebut, terdapat nilai nol (0) dan yang lainnya. gimana caranya ya?
Sebelumnya, saya ucapkan terimakasih...
kira-kira seperti ini mas...
sub rata()
dim nilai as range
dim sum, i , j as integer
dim rerata as single
set nilai = range("A1:A5")
sum = 0
i = 1
j = 1
do while nilai(i)<>""
if nilai(i) > 0 then
sum = sum + nilai (i)
j = j + 1
end if
i = i +1
loop
rerata = sum/(j-1)
end sub
mau tanya Pak, kalau di sel ada rumusan ='amount(sheet)(sel)!+amount(sheet)sel!.
tetapi kalau kita cari sheetnya dalam 1 file tidak ada padahal nama sheet tsb ada dalam 1 file. mohon bantuannya. terima kasih
Saya mau bertanya apa maksud dari fungsi ='amount(sheet)(sel)!+
tetapi kalau kita cari disheet tsb pada sel yg ditunjuk tidak ada nilanya.
mohon penjelasannya. terima kasih
saya ingin tau apabila ada rumusan
='amount(sheet)(sell)!+
tetapi apabila kita cari pada sheet dan sell yang dituju ternyata tidak ada nilainya.
mohon pencerahannya. terima kasih
saya baru tahu fungsi "amount" itu mas...
beum pernah memakainya...
thx
Mas Ben,saat saya terapkan untuk merubah angka ke kata pada angka tunggal di excel berjalan dengan baik sesuai tutorialnya,tapi saat saya terapkan untuk tutorial selanjutnya(angka >9) kok tak muncul seperti apa yg ada di tutorial tersebut.Padahal tutorial tersebut saya ketik sama persis dengan yang Mas Ben buat...minta tolong solusinya..makasih...
Pak Ben,untuk merubah angka ke kata pada angka tunggal berjalan dengan baik tpi saat saya terapkan angka >9 sesuai dengan tutorial kok tak bisa berjalan dengan baik. Mohon bantuannya dan solusinya. Makasih Pak Ben.
coba kirimkan kode macro yg mas alex agung buat ke email saya...nanti saya lihat....koding yg saya tulis saay sudah coba sendiri sih....dan berhasil....
Mas Ben, Help me... saya mau merekap file dari excel ke excel tapi tanpa membuka file tersebut dg sekali klik tombol, bisa terekap sekalian membuat folder dan nafa file sendiri si file rekap ini.
Mohon petunjuknya Mas :)
sepertinya permasalhan mas sudah pernah dibahas di koment2 di blog ini....
secara prinsip mudah..tinggal perlu belajar dan kerja keras... :)
ini sangat bermanfaat, thanks gan
trimakasih gan...
Mohon maaf mas saya tanya tentang microsoft visual basic untuk mengerjakan VB excel ini kita dapat di mana?
kalau sudah ada office excel, tidak perlu install apa2 lagi mas..
Mas saya mau nanya, kalau saya mau buat fungsi untuk menjelaskan nilai "123A2" menjadi "satu dua tiga A dua" gimana ya,, terima kasih sebelumnya..
mas saya mau nanya, kalau saya mau buat fungsi untuk menjelaskan nilai "12A2" menjadi "satu dua A dua" gimana ya? terima kasih.
tutorial di posting ini dah bisa mas..tinggal rubbah array nya sesuai kebutuhan mas..
maaf mas saya kagak ngerti mau ngerubah yang mana,, bisa minta tolong di jelaskan gak,, soalnya saya butuh banget fungsi yang kayak gini.. terima kasih.
belajarnya pelan-pelan mas..step by step...nanti mas ketemu kok, dari kode yang saya udah tampilkan di sini mana yg mas bisa ubah untuk tujuan mas..
Makasih mas atas waktu dan ilmunya..
mas, ad pertanyaan nie..
gmana ya caranya membuat format cell sendiri secara automatis,,
misalkan saya ketikkan angka pada sebuah cell dengan isian 21002090010608 dan sy tekan enter,,trus angka tadi berubah formatnya secara otomatis menjadi 210.02.09.001060-8...
gmana caranya ya mas??
terima kasih, mohon bantuannya..
siang mas ben, saya irwan d bintaro mw tanya
jika ada data di workbook [ nama ] [ usia ] [ sekolah ] saya ingin buat workbook dengan macro yg isinya data dr workbook pertama tapi yg usianya 7 th aja.kira2 contoh code macro'y bagaimana y ?
@mas Anonim : masing-masing elemen string mas jadikan array..lalu dimasukkan ke array string lain yang akan akan Anda tampilkan di cell tujuan
@ mas Uchil : saya juga tinggal di bintaro mas...bisa pake fungsi "if" mas
misal data di worbook 1 sheet 1 kolom B, sedang workbook tujuan di workbook2 shett1 kolom B maka seperti ini kodingnya
if workbook1.sheet1.Columns("B:B").Cells(i).Value = 7 then
workbook2.sheet1.Columns("B:B").Cells(i).Value = workbook1.sheet1.Columns("B:B").Cells(i).Value
end if
Mas ben saya mau nanya..gimana yah caranya bikin rumus macro untuk copy cell yang acak di..sheet 2 ke sheet 1 misal saya punya data di sheet 2 cell A5,A10,A15...dst kelipatan lima...saya mau copy ke sheet 1 di range A1:A10, terina kasih
mainin indeksnya aja mas
contoh seperti ini
for i = 1 to 10
n = i*5
sheet1.range("A1").cells(i,1) = sheet2.range("A5").cells(n,1)
next
selebihnya utak utik aja sesuai keinginan mas.
Sudah saya coba mas, berhasil tapi content data yang tercopy adalah isinya yang kelipatan 5, maksud saya copy data cell yang kelipatan lima kayak data di cell A5,A10,A15...gitu mas heheh maf ngerepotin tapi dapet ilmu baru neh jadinya
Gak jadi mas dah ketmu saya yang salah.....dikit modif juga...makasihhhh banet mas bennnn.nnnn
owkeh mas...semoga sukses...
ya-ha
thx Gan
mantap mas..makasih tutorialnya
terimakasih mas...
mas kok dijndla vba ane kg ada tuh plhn "anka_ke_kata" yg ada cma deleretion. mas jlasin ya cara munculi plhn2 yg ky gitu seperti clik dll, thanks dah mas
'"deleretion" itu apa mas...?
pilihan fungsi "angka_ke_kata" ada di pilihan fungsi excel user defined mas....carinya di fungsi2 kek sum, average dan sebagainya...
trimakasih
maaf slah ketik, dlm ktrngan diatas gmbr yg ke 10 dlm drop dwen ada plhn "anka_ke_kata" di jndla ane cuma declaration doang, biar dlm drop dwen muncul plhan yg ky ditutuo ini gmana, maaf ya mas inggris ane krng dr stndar
Sudah di save as xlm lum mas.? pake excel brapa? cuba print screan bis itu kiriim ke email ane gan...
makasih ilmunya....
Oke...ilmunya... :)
sama-sama mas...
mas ben saya mau buat funsi ad in ntuk memunculkan nomor nip seseorang bila merujuk ke nama seseorang gimana caranya?
pakai look up kan bisa mas....
Minta tolong gan,, bagaimana cara menggunakan fungsi index menggunakan Macro VBnya? Tengkyu..
maaf lama jawabnya gan...ane lagi sibuk tesis nih..indexing maksundya...mengurutkan data berdasarkan urutan tertentu...
maaf pak menggangu, mau tanya,
bagaimana cara merubah file excel yang dijadikan file exe atau Application dikembalikan kembali menjadi file xls
saay belum pernah melakukan itu mas....sepertinya VBA Excel tidak bisa dijadikan exe dan sebaliknya
belum sempat update lagi karena lagi urusin tesis....
oke, nice blog keep the good work
mas Ben, mohon bantuannya nih,
kalo saya mau merubah misal :
DL.00.00 menjadi 1
DL.00.01 menjadi 5
DL.00.03 menjadi 9 dst
itu bagaimana ya codenya
saya coba pake code yang angka menjadi kata tapi tidak bisa..
mohon pencerahannya
fungsi matematika nya gimana mas
kenapa DL 00 00 menjadi 1 dan DL 00 01 menjadi 3??
kalo seperti ini formulasinya berbeda dengan fugnsi yg saya paparkan di tulisan di atas
begini mas ben, misal cell A1 saya input DL.00.00 trus di cell B1 saya masukkan function (misal =aktif(A1)) menghasilkan "1"
nah itu gimana ya?
makasih sebelumnya
Mau tanya mas.. rumus untuk save as tetapi file namenya langsung ada sesuai dengan judul file entriannya. Misal kolom a1 adl key untuk nama file yg otomatis ke tulis ketika di save as. Tanpa saya nulis nama file otomatis udh ketulis sesuai data di a1 tsb. Mohon petunjuknya..
Suwun.. komeng mgl
pertama ambil nama filenya dulu, misal nama file ada di range ("A1")
--------
dim teks as string
teks = range ("A1").value
--------
kedua gabungkan namnya dengan folder dan extensi file
--------
teks = "C:\" & teks & ".xlsm
--------
ketiga simpan nama file
-------
ActiveWorkbook.SaveAs teks, fileformat:=52
-------
referensi nya bisa dilihat di sini
http://www.rondebruin.nl/win/s5/win001.htm
Selamat siang,
Saya bekerja di salah satu bank swasta, tiap bulan saya melakukan pengecekan data akhir bulan. Saya ingin menggunakan makro excel untuk mempermudah pekerjaan saya. , yang saya ingin tanyakan.
1. Bagaimana dan apa syntax vba yang kita gunakan jika kita ingin mengolah data dari file csv dan jumlah baris file tersebut melebihi kapasitas ms.excel (lebih dari 1.500.000). saya ingin memecah isi file tersebut ke beberapa sheet.
2. Bagaimana dan apa syntax vba yang bisa kita gunakan jika kita ingin mengolah data dari file csv dimana terdapat beberapa file csv (masing-masing file tersebut memiliki jumlah baris yang berbeda) dan file-file tersebut akan kita gabungkan menjadi 1 di sheet excel.
boleh info dan bantuanny Mas..
terimakasih..
salam
langkah pertama adalh membaca tiap baris dalam berkas csv itu mas, detailnya bisa dilihat di link berikut
http://www.homeandlearn.org/open_a_text_file_in_vba.html
csv itu singkat Comma Separated Value, jadi intinya adalah data dipisahkan dengan koma...di link di atas diinfokan bagaim,ana memisahkan data-data csv lalu memasukkannya ke excel...
berikutnya dalah menginput data ke sheet excel sampai akhir baris ditemukan.jumlah baris maksimum dalam excel ada di link ini mas
http://en.wikipedia.org/wiki/Microsoft_Excel
setealh itu bisa pake for untuk memasukna data sampai baris terakhir.
kalo sudah ketemu akhir baris, maka buat sheet baru dan masuukan data lagi sampai baris terakhir.
membuat sheet baru bisa dilihat di link ini mas..
http://www.mrexcel.com/td0097.html
semoga membantu
Dear Mas Ben,
terimakasih untuk informasinya mas, saya akn coba ikuti instruksi mas yaah, kalo masih ada yang perlu saya tanyakan. boleh tanya ke mas lagi yaaah....
salam
Yaman
oke mas...sama-sama
pak saya mau tanya apa perbedaan antara vba, vba ecxel, dan vbe?
tidak ada bedanya pak...
Assalamu'alaikum..
Minta tolong Mas Ben..
saya ingin membuat sebuah data inputan, untuk 6 kelas, dengan sheet 1 sebagai data inputnya dan sheet 2, sheet 3 dan seterusnya menjadi kelas 1A, kelas 1b dst.. bagaimana caranya agar data input bisa masuk ke kelas yg saya inginkan.?
mohon pencerahannya.. terima kasih..
saya bisa jawab bila sudah tahu form inputannya seperti apa mas...
biasanya untuk kasus seperti ini, kita definisikan dulu kelas tertentu (misal 1A) di sheet berapa...nanti di form ada inputan tertentu yang menujuk ke kelas tersebut
Posting Komentar