MATERI
PENDAHULUAN
Macro adalah kumpulan perintah-perintah dan fungsi spreadsheet MS-Excel
yang dibuat dengan menggunakan bahasa VBA (Visual Basic Application).
Mengapa perlu macro dengan VBA Excel?
Pekerjaan yang sama dan berulang-ulang
Data banyak
Praktis & cepat
VBA Excel digunakan di banyak tempat kerja yang berhubungan dengan data,
dengan karekteristik pekerjaan antara lain:
Data banyak: cross section atau data series
Periodically updating
Pembuatan system (entry sampai reporting)
Dari mana saya bisa belajar VBA Excel?
Help?
Buku
Internet seperti dari Blog XQ (http://excelquotient.wordpress.com)
atau mailing list xl-mania@yahoogroups.com.
Training/Workshop
Persiapan apa untuk belajar VBA Excel?
Programming Logic
Mampu menggunakan Excel untuk entri data sederhana
Mampu menggunakan formula di Excel
Mengetahui shortcuts keyboard untuk perpindahan cell dalam
worksheets
MEREKAM MACRO
Menu View > Macros > Record Macro > Isi : Macro name, Shortcut key, Store
macro in dan Description
Gambar 3 Tampilan Kotak Dialog Record Macro
MEMBUKA VB EDITOR
Menu View > Macros > View Macros > Pilih nama Macro > Edit ( Atau Alt +
F11)
Gambar 2 Tampilan kotak dialog View Macro
CONTOH LATIHAN
Buatlah New File Excel
View > Macros > Record Macro
Beri nama macro, Shortcut key, Store macro in dan
Description
Klik OK
Gambar 5 Tampilan Kotak Dialog Record Macro Daftar_Gaji
(Perhatikan kode program prosedur dimulai kalimat “Sub” dan diakhiri “End
Sub”)
MENJALANKAN MACRO
Hapuslah isi lembar kerja Daftar Gaji
Jalankan macro Daftar_Gaji, dengan langkah:
Menu View > Macros > View Macros (Atau Alt + F8) > Pilih nama macro
Daftar_Gaji > Run (atau Ctrl + g)
Gambar 9 Tampilan View Macro untuk Run
Agar macro bisa dijalankan, maka file workbook harus disimpan dalam modus
Excel Macro – Enabled Workbook (yaitu menghasilkan file berekstensi .xlsm)
b) Buka VB Editor
c) Rekam macro, dengan input seperti berikut
Gambar 12
d) Periksa kalimat VBE melalui VB Editor, yaitu dobel klik Module (atau
menu View > Macros > View Macros > pilih nama macro (yaitu:
macro_Grafik) > Edit
Gambar 13
Gambar 14
MATERI
<method>:
Address
Alamat range
Value
Isi/nilai range
Select
Memilih/mengaktifkan range
PasteSpecial
Menempelkan isi/nilai range
ClearContents
Menghapus isi/nilai range
Cells(<index number>)
Memanggil range ke <index number>
Offset(<r>,<c>)
Memfokuskan range r baris ke bawah dan c kolom ke kiri
Formula
Formula dari range
FormulaR1C1=
Formula dengan input cell r baris ke bawah dan c kolom ke kiri
EntireRow
Memilih seluruh baris
Font
Memanipulasi tampilan font dengan menambahkan:
.Name
.Size
.ColorIndex=<0-56>
.Color=RGB(<0-255>, <0-255>,<0-255>)
.Bold=<True or False>
.Italic=<True or False>
.Underline=<True or False>
Contoh:
Bukalah file workbook baru
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Procedure > Isi kolom “name”
(misal : contoh_Sel_Range) > Sub > OK, lalu ketik kalimat berikut
1 Range("A1").Select
2 Range("A1").Value = "Assalaamu'alaykum"
3 alamatcell = ActiveCell.Address
4 Range(alamatcell, "D7").Select
5 Selection.Cells(2).Value = "Wa'alaykumussalaam"
6 Selection.Cells(1).Copy Range("C1")
7 Selection.Copy
Range("F1").PasteSpecial
Paste:=xlValues,Operation:=xlNone, SkipBlanks:=False,
8 Transpose:=True
9 Range("A1:D1").ClearContents
10 Range("A2").EntireRow.Insert
11 Range("H1").Offset(1, -2).Value = "Silakan masuk"
12 Salam = Range("A1").Value
13 Range("F5").Value=salam
14 Range("A1").Formula = "=2+4*6"
15 Range("A2").Value = 4
16 Range("A3").FormulaR1C1 = "=R[-1]C+R[-2]C"
17 With Range("F1:F4").Font
18 .Name = "Verdana"
19 .Bold = True
20 .Size = 20
21 .ColorIndex = 23
22 End With
Keterangan program:
Baris17-22: Syntax WITH meringkaskan penulisan yang dapat ditulis dengan baris:
Range("F1:F4").Font.Name = "Verdana"
Range("F1:F4").Font.Bold = True
Range("F1:F4").Font.Size = 20
Range("F1:F4").Font.ColorIndex = 23
Jalankan program dengan memilih menu Run > Run Sub/UserForm (atau F5)
atau toolbar dengan symbol
Add
Menambahkan sheet baru, bisa ditambah
After:= <sheet name>
Before:= <sheet name>
Name:= <new sheet name>
Name
Memberi nama atau mengambil nama sheet
Delete
Menghapus sheet
Activate
Memilih/mengaktifkan sheet
Move
Memindahkan sheet, ditambah
Before:= <sheet name>
Afer:= <sheet name>
Contoh:
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Procedure > Isi kolom “name”
(misal : contoh_Worksheet) > Sub > OK, lalu ketik kalimat berikut
1 namasheet = ActiveSheet
2 Worksheets.Add Before:=ActiveSheet
3 Worksheets("Sheet1").Name = "Grafik"
4 sheets(namasheet).Delete
5 Worksheets("Grafik").Activate
6 ActiveSheet.Move After:=Sheets("Sheet3")
Jalankan program dengan memilih menu Run > Run Sub/UserForm (atau F5)
atau toolbar dengan symbol
Add
Menambahkan workbook baru.
Name
Memberi nama atau mengambil nama sheet
Activate
Memilih/mengaktifkan workbook
Save
Menyimpan workbook
Close
Menutup workbook
Path
Mendapatkan lokasi penyimpan dalam storage device
Contoh:
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Procedure > Isi kolom “name”
(misal : contoh_Workbook) > Sub > OK, lalu ketik kalimat berikut
<method>
ScreenUpdating = <False or True>
Jika True, layar monitor di Excel mengikuti alur program.
Wait(<ekspresi>)
Menghentikan alur program dalam waktu tertentu
StatusBar
Memberikan status/nilai pada status bar yang terletak di bagian bawah GUI
Microsoft Excel. Pastikan Status Bar pada menu View tercentang
Contoh:
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Procedure > Isi kolom “name”
(misal : contoh_Application) > Sub > OK, lalu ketik kalimat berikut
1 Range("A1").Select
2 activecell.offset(10, 100).Select
3 Range("A1").Select
4 Sheet("Sheet2").Delete
5 Application.ScreenUpdating = False
6 Application.DisplayAlert = False
7 Sheet("Sheet1").Delete
8 Application.Wait (Now + TimeValue("00:00:05"))
9 Application.StatusBar = "Running "
10 Application.ScreenUpdating = True
11 Application.DisplayAlert = True
Jalankan program dengan memilih menu Run > Run Sub/UserForm (atau F5)
atau toolbar dengan symbol
Ltrim(<text>,<numchar>) / Rtrim(<text>,<numchar>)
Mengambil <numchar> karakter dari sebelah kiri/kanan
Mid(<text>,<startnum>,<numchar>)
Mengambil string dari posisi <startnum> sebanyak <numchar>
Len(<text>)
Mengembalikan nilai panjang karakter string
Trim(<text>)
Menghapus semua spasi kecuali satu spasi di antara kata-kata.
Split(<text>,<delimiter>,<limit>)
Memisahkan text dengan pemisah delimiter. Function ini mengembalikan
array satu dimensi (vector). Ukuran vector bisa dibatasi sebanyak limit.
Contoh
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Procedure > Isi kolom “name”
(misal : contoh_Man_String) > Sub > OK, lalu ketik kalimat berikut
MATERI
Prosedur adalah suatu unit (blok) kode program Visual Basic. Sebuah perosedur
berisi rangkaian pernyataan dan metode (atau instruksi-instruksi) untuk
melakukan suatu operasi atau kalkulasi data. Ada dua macam program prosedur
Visual Basic, yaitu prosedur sub dan prosedur fungsi.
Pengguna bisa membuat fungsi buatan sendiri (Users Defined Function) yang
belum disediakan MS-Excel melalui fungsi yang ‘built in’ melalui prosedur fungsi.
Variable
Variable atau constant yang dideklarasikan dalam procedure hanya berlaku
dalam lingkup procedure tersebut, disebut variable lokal.
Variabel global berlaku secara global di seluruh procedure. Letak variable
global di baris paling atas di luar procedure.
Tipe Data
1) Tipe Data VBA Excel ada sebelas, yaitu Array, Boolean, Currency, Date, Double,
Integer, Long, Object, Single, String, dan Variant.
2) Contoh deklarasi variable local:
Dim nomor As Integer
Dim ttl As Date
Dim berhenti As Boolean
Dim matriks(3,5) As Array
Dim nama As String
Syntax IF
If <condition> then
<program>
Else If <condition> then
<program>
Else
<program>
End If
Contoh:
If ActiveCell.Value <= 5 Then
Status = "baby"
ElseIf ActiveCell.Value <= 10 Then
Status = "child"
ElseIf ActiveCell.Value <= 20 Then
Status = "teen"
Else
Status = "old"
End If
Contoh:
Select Case ActiveCell.Value
Case 1
letter = "satu"
Case 2
letter = "dua"
Case 3
letter = "tiga"
End Select
DASAR-DASAR PEMROGRAMAN MACRO DALAM VISUAL BASIC
APPLICATION (VBA) MS-EXCEL
MATERI
Do while <condition>
<program>
Loop
Do Until <condition>
<program>
Loop
Contoh:
m = 0
Do Until ActiveCell.Value = ""
ActiveCell.Value = m
ActiveCell.Offset(1, 0).Select
m = m + 1
Loop
Syntax FOR
For <condition>
<program>
Next
Contoh:
For m = 1 To 10
ActiveCell.Value = m
ActiveCell.Offset(1, 0).Select
m = m + 1
Next m
LATIHAN CONTOH
Masalah:
Dalam bidang media research atau advertising seringkali disuguhkan pekerjaan
untuk membuat coding daypart dari data hasil running Media Nielsen Suite. Data
waktu dapat dilihat pada file Contoh_Daypart.xls. Waktu dikelompokkan dengan
aturan seperti berikut.
Daypart Rule
05.30-11.59
12.00-15.59
16.00-18.59
19.00-20.59
21.00-22.29
22.30-23.59
Others
Solusi:
1. Buka file Contoh_Daypart.xls l ihat pada Sheet1
Gambar 16
Keterangan program:
Baris 1: Function diberi nama DAYPART. Input value untuk function ini adalah
variable waktu dengan tipe data Date. Function DAYPART mengembalikan nilai
dengan tipe data String.
Baris 2-8: Kode program berdasarkan aturan daypart.
4. Kembali ke Sheet1, pada kolom daypart cell B2, ketik formula berikut:
=DAYPART(A2)
=DAYPART(A2)
Gambar 17
MATERI
Message Box & Input Box
Syntax:
Var = MsgBox("<prompt>" [, buttons] [, title] [, helpfile, context])
MsgBox "<prompt>"
Var = InputBox( “<prompt>” [, title] [, default] [ ,xpos] [, ypos] [, helpfile, context])
Keterangan:
<prompt>
Kalimat isi message
[,button]
Tombol yang ada ketika message box muncul (bisa dilihat di help VB Editor),
di antaranya
vbOKCancel : Tanpa icon, tombol: OK dan Cancel
vbYesNoCancel : Tanpa icon, tombol Yes, No, Cancel
vbQuestion : Icon tanda Tanya, tombol OK
vbCritical : Icon tanda silang disertai suara, tombol OK
[,default]
Nilai isian ketika input box dimunculkan
[,xpos]
Posisi horizontal input box
[,ypos]
Posisi vertical input box
Contoh:
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Module, lalu ketik kalimat
berikut
1 Sub nama()
2 'deklarasi
3 Dim nama As String
4 Dim konfirmasi As Integer
5
6 'input masukkan nama
7 nama = InputBox("Masukkan nama Anda:", "Nama")
'jika nama tidak dimasukkan maka keluar dari procedure
8 sub
9 If nama = "" Then
10 MsgBox "Anda tidak mempunyai nama"
11 Exit Sub
12 End If
13
14 'konfirmasi nama
konfirmasi = MsgBox("Anda yakin bernama " & nama & "?",
15 vbYesNo, "Konfirmasi")
16 'jika menekan tombol Yes
17 If konfirmasi = 6 Then
18 MsgBox "Nama: " & nama
19 'jika menekan tombol No
20 ElseIf konfirmasi = 7 Then
21 MsgBox "Saya juga tidak yakin kalo " & nama &
" itu nama Anda"
22 End If
23 End Sub
Jalankan program dengan memilih menu Run > Run Sub/UserForm (atau F5)
atau toolbar dengan symbol
MATERI
(Private/Public) Function nama_fungsi (arg1 As tipe, arg2 As tipe, arg )
Pernyataan
Nama = ekspresi
Exit Function
Pernyataan
Nama = ekspresi
End Function
LATIHAN
Masalah:
Buatlah suatu program fungsi buatan sendiri (User Dedined Function) yang
bernama Grs_Lurus untuk menghitung beban penyusutan dengan metode
garis lurus. Rumus Grs_Lurus adalah:
Grs_Lurus = (h_perolehan – nil_sisa)/um_ekonomis
Solusi:
Bukalah VBA Editor (Alt + F11), lalu pilih Insert > Module > (klik Module dua
kali), lalu ketik kalimat berikut:
Public Function Grs_Lrs(kos As Double, nil_sisa As Double, umur
As Double) As Double
End Function
Gambar 20
SOAL
Buatlah suatu program fungsi buatan sendiri (User Dedined Function) yang
bernama “ BEP” untuk menghitung “titik impas” (BEP = break event point)
dalam unit. Rumus BEP adalah:
BEP = Total_Fixed_Cost / (Unit_Sales – Variabel_Cost_Unit)
Gunakan fungsi yang sudah dibuat untuk menyajikan lembar kerja berikut ini
Gunakan fungsi
BEP
=B5*E5 Harga jual * BEP Unit
Gambar 21
BEKERJA DENGAN OBJEK-OBJEK USER’S FORM
MATERI
Controls
Toolbox
UserForm
Properti
es
Gambar 22 Visual Basic Toolbar: Properties, Visual Basic, dan Control Toolbox
Cara penggunaan:
Untuk melakukan pengeditan, pastikan tombol (Design Mode) terpilih.
Untuk membuat interactive user interface, klik objek pada Control Toolbox,
maka kursor mouse berubah menjadi tanda +. Lalu klik lagi pada worksheet.
Untuk mengedit properties dari objek, klik kanan objek pada Sheet lalu pilih
Properties.
Untuk menjalankan (running), pastikan tombol (Design Mode) tidak terpilih
CONTOH LATIHAN - 1
Membuat system entri data dalam worksheet
Masalah:
Telah dilakukan survey bohongan mengenai produk yang paling disukai dari
makanan khas Indonesia dengan tingkat kepuasannya. Buatlah system untuk
entry data dengan tiga variable yaitu:
1. ID Responden
2. Jenis kelamin
3. Produk paling disukai
4. Tingkat Kepuasan dengan rentang 1-10
Solusi:
1. Buka file excel dan ganti nama Sheet1 dengan Main, Sheet2 dengan Data, dan
Sheet3 dengan Support. Di mana sheet Main adalah front end untuk entri data,
sheet Data adalah daftar data yang telah dientri, dan sheet Support berisi data
konfigurasi system.
2. Buatlah tampilan sheet Main seperti Gambar 23, sheet Data seperti Gambar
24, dan sheet Support seperti Gambar 25.
VB CONTROL
3. Properties optionbutton Jenis Kelamin dalam sheet Main seperti Gambar 26.
Gambar 26. Properties optionbutton Jenis Kelamin
Support!B2
Gambar 28. Properties combobox Produk Paling Disukai dan scrollbar Tingkat Kepuasan
6. Aturan main Produk Paling Disukai seperti Gambar 29.
Gambar 30 Properties tombol Record, tombol View Data, tombol Reset dan
tombol Back to Main
8. Dobel klik masing-masing ke empat tombol, maka akan terbuka VB Editor. Lalu
masukkan kode program seperti berikut:
9. Pada VB Editor klik menu Insert > Module, maka akan terbuka Module1. Lalu
ketik program berikut untuk me-record data dari sheet Main ke sheet Data.
Program ini aksi dari klik tombol Record.
1 Sub simpan()
2 Application.ScreenUpdating = False
3 Application.DisplayAlerts = False
4 On Error GoTo errorline
5
6 'DECLARATION
7 Dim cID As String
8 Dim cJK As String
9 Dim cPPD As String
10 Dim cTK As String
11 Dim m As Integer
12
13 'ASSIGN VALUE TO VARIABLE
14 cID = Range("D8").Value
15 cJK = Range("D10").Value
16 cPPD = Range("D12").Value
17 cTK = Range("D14").Value
18
19 'VALIDATION EMPTY CELL
20 If cID = "" Or cJK = "" Or cPPD = "" Or cTK = ""
Then
21 MsgBox "Fill the form correctly, please!"
22 GoTo lastline
23 End If
24
25 'PASTE VARIABLES
26 ''Activate Cell A1 at Sheet Data
27 Sheets("Data").Activate
28 Range("B3").Select
29 ''Search empty cell
30 Do Until ActiveCell.Value = ""
31 ''Assign record number
32 m = m + 1
33 ActiveCell.Offset(0, -1).Value = m
34 ''Validation duplicate redord
35 If ActiveCell.Value = cID Then
36 MsgBox "Can't perform duplicate ID Responden."
37 Sheets("Main").Activate
38 GoTo lastline
39 End If
40 ''Move to lower cell
41 ActiveCell.Offset(1, 0).Select
42 Loop
43 ''Fill the record
44 ActiveCell.Offset(0, -1).Value = m + 1
45 ActiveCell.Value = cID
46 ActiveCell.Offset(0, 1).Value = cJK
47 ActiveCell.Offset(0, 2).Value = cPPD
48 ActiveCell.Offset(0, 3).Value = cTK
49
50 'RESET THE CONDITION
51 Resetmain
52
53 'JUMP TO THE END OF PROGRAM
54 GoTo lastline
55
56 'GOTO LINE
57 errorline:
MsgBox "Sorry! Unpredicable error is occur. Call
58 program maker. please!"
59 lastline:
60 Application.ScreenUpdating = True
61 Application.DisplayAlerts = True
62 End Sub
10.Ketik pula program berikut pada module1 untuk me-reset system ke kondisi
semula. Program ini merupakan aksi dari tombol Reset, sambungan dari
program simpan dan dijalankan ketika file (workbook) ini dibuka.
1 Sub resetmain()
2 Application.ScreenUpdating = False
3 Application.DisplayAlerts = False
4
5 Sheets("Main").Activate
6 Range("D8").Value = ""
Range("D10").Formula = "=IF(Support!
B2=TRUE,""Laki-Laki"",IF(Support!
7 B2=FALSE,""Perempuan"",""""))"
8 Range("D12").Formula = ""
9 Range("D14").Formula = ""
10 Sheets("Support").Range("B2").Value = "N.A."
11
12 Application.ScreenUpdating = True
13 Application.DisplayAlerts = True
14 End Sub
11. Agar setiap kali file (workbook) ini dibuka selalu me-reset ke kondisi semula,
tuliskan program ini pada makro Workbook.
Keterangan:
Tombol “Tambah Data” memerintahkan komputer untuk menambahkan
data ke sheet Barang
Tombol “Tampilkan” memerintahkan komputer untuk menampilkan data di
sheet Barang.
Tombol “Keluar” memerintahkan komputer untuk keluar dari program