Laman

Koleksi Macro Dasar Excel

Tulisan berikut ini merupakan terjemahan dari http://www.panzerbasics.com/index_files/97-excel/basic-macros.htm

Sebagai pemrogram VBA pemula, saya perlu mengumpulkan macro yang saya buat atau temukan. Menaruhnya di Internet hanyalah sebuah langkah lanjutan kecil.

Jika anda menjalankan sebuah macro, aksinya tidak bisa dibatalkan. Menggunakan macro yang disediakan di sini adalah urusan anda sendiri.

Camkanlah bahwa macro bisa sangat bermanfaat, namun juga bisa berbahaya jika berasal dari sumber yang tidak dikenal.

Code-code macro dasar berikut ini berasal dari seantero Internet atau dibuat oleh saya sendiri. Oleh karena sangat umum dan dasar, saya tidak mencantumkan sumbernya. Jika seseorang mengenalnya sebagai buatannya dan ingin namanya dicantumkan atau code dihapus, silahkan menghubungi saya.



Macro yang disediakan berikut ini adalah pilihan saya dan bisa digunakan sebagai permulaan atau untuk membantu anda pada proyek-proyek dasar. Gunakan imajinasi anda untuk menyesuaikannya dengan proyek anda, atau lakukan pencarian lebih lanjut di Internet.

Code-code sudah saya coba dan verifikasi untuk dijalankan pada Excel 2007. Harap diingat bahwa kita bisa mencapai suatu tujuan dengan cara yang berbeda.

Macro umumnya dimulai dengan baris: "Sub Name()", dimana Name bisa diganti dengan nama yang ingin anda gunakan. Macro diakhiri dengan baris "End Sub".

Untuk kejelasan dan kemudahan dalam pemakaian yang berbeda, saya tidak mencatumkan baris-baris ini lagi kecuali untuk alasan tertentu.

Jika "Sub" diganti dengan "Function", code akan berjalan sama saja, namun macro tidak tampak pada daftar macro yang tersedia. Kelemahan cara ini adalah function akan tampak dalam daftar function. Jika "Private" ditambahkan sebelum "Sub" atau "Function", macro hanya bisa dipanggil dari module yang sama, dan juga tidak muncul dalam daftar.

Activate Sub Worksheet_Activate()
MsgBox "Hello"
End Sub
Active Cell, Position myRow = ActiveCell.Row
myCol = ActiveCell.Column
MsgBox myRow & "," & myCol
Active Cell, Selection to far left Selection.End(xlToLeft).Select

OR

Range("A" & ActiveCell.Row).Select
Active Cell in top left of screen With ActiveWindow
.ScrollColumn = ActiveCell.Column
.ScrollRow = ActiveCell.Row
End With
Active Cell, Value MsgBox ActiveCell.Value
Auto Run Sub Auto_Open()
MsgBox "Hello"
End Sub
Auto Run(2) Sub Workbook_Open()
MsgBox "Hello"
End Sub
Auto Save This workbook: ' = Autorun
Sub Workbook_Open()
Call SaveMe
End Sub

In Module:
Sub SaveMe()
ThisWorkbook.Save
Application.OnTime Now + Timeserial(0,15,0),"SaveMe" ' Timeserial=(h,m,s)
End Sub
Available Row (next) Range("a65536").End(xlUp).Offset(1, 0).Select
 
Call -
Running a subroutine
Call Macro2  'This calls for Macro2 to run within your Macro
Case Title Dim cell As Range
For Each cell In Selection.Cells
If cell.HasFormula = False Then
cell = Application.Proper(cell)
End If
Next
Case Upper / Lower Dim cell As Range
For Each cell In Selection.Cells
If cell.HasFormula = False Then
cell = UCase(cell)
End If
Next
 
Column Letters Dim MyColumn As String, Here As String
Here = ActiveCell.Address
MyColumn = Mid(Here, InStr(Here, "$") + 1, InStr(2, Here, "$") - 2)
MsgBox MyColumn
Counting Rows & Columns myRows = Selection.Rows.Count
myColumns = Selection.Columns.Count
MsgBox "Rows = " & myRows & vbCrLf & "Colums = " & myColumns
Carriage Return MsgBox "Line 1" &  vbCrLf & "Line 2" 
Copy Range (1) Sheet1.Range("A1:C1").Copy Destination:=Sheet2.Range("A1")
Copy Range (2) Range("A1:B1").Copy
Range("A2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Counter Range("A1") = Range("A1") + 1

OR

myCount = Range("a1") + 1
Range("a1") = myCount
Current Date Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Range("A1") = Now
End Sub
Delete Empty Rows firstRow = Selection.Row
lastRow = Selection.Row + Selection.Rows.Count
 For rownumber = lastRow To firstRow Step -1
  If Application.WorksheetFunction.CountA(Rows(rownumber)) = 0 _
   Then Rows(rownumber).Delete
 Next rownumber
Error Trapping On Error Resume Next

OR

Sub Name()
On Error Goto ErrorHandler1
... more lines of code
Exit Sub
ErrorHandler1:
... code specifying action on error
End Sub
File Name & Path Range("A1") = Application.ActiveWorkbook.FullName
For, Next Loop  
Goto (Code)  
Input Box Dim MyInput
MyInput = InputBox("Enter something")
Range("A1") = MyInput
If, Then Statement If Range("B1") > 10 Then
   Range("B2") = 10
ElseIf Range("B2") > 5 Then
   Range("B2") = 5
Else
   Range("B2") = 1
End If
Joining Text myCol = Selection.Columns.Count - 1
n = 0
   For n = 0 To Selection.Rows.Count - 1
      For i = 1 To myCol
         ActiveCell.Offset(n, 0) = ActiveCell.Offset(n, 0) & ActiveCell.Offset(n, i)
         ActiveCell.Offset(n, i) = ""
      Next i
   Next n
Message Box MsgBox "Created by: Your Name here"
MsgBox "Different Icon", vbInformation
MsgBox "Different Icon And Title", vbExclamation, "Your warning message"
Modeless Forms UserForm.show vbModeless
Moving the Cursor ActiveCell.Offset(1, 0).Select
Protecting / Unprotecting a sheet 'Protect
Dim Password
Password = "xxxx"
ActiveSheet.Protect Password, True, True, True

'Unprotect
Password = "xxxx"
ActiveSheet.Unprotect Password
Random numbers MyNumber = Int((10 - 1 + 1) * Rnd + 1)
Range("A1") = MyNumber
Rounding Numbers ActiveCell = Application.round(ActiveCell, 2)
Saving your Workbook ActiveWorkbook.Save
ScreenUpdating Application.ScreenUpdating = False / True
Select Case statement Select Case Range("A1").Value
   Case 100, 150 ' = 100 OR 150
      Range("B1").Value = Range("A1").Value
   Case 200 To 300, 400 To 500 ' = Between 200 and 300 OR between 400 and 500
      Range("B2").Value = Range("A1").Value
   Case Else
      Range("B1").Value = 0
End Select
Select Data Range Dim myLastRow As Long
Dim myLastColumn As Long
Range("A1").Select
 On Error Resume Next
    myLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    myLastColumn = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
myRange = "a1:" & Cells(myLastRow, myLastColumn).Address
Range(myRange).Select
Sheets Hiding Sheet1.Visible = xlSheetVeryHidden
Text Edit MsgBox Left("abcd", 2)       'Displays 2 characters from Left
MsgBox Right("abcd", 2)    'Displays 2 characters from Right
MsgBox Len("abcd")           'Displays number of characters (Including space)
Timer Application.Wait Now + TimeValue("00:00:05")
MsgBox ("This was a 5 second delay")
Time last save MsgBox Excel.Application.ThisWorkbook.BuiltinDocumentProperties("Last Save Time")
vbYesNo YesNo = MsgBox("This macro will ... Do you want to continue?", vbYesNo + vbCritical, "Caution")
Select Case YesNo
Case vbYes
'Insert your "Yes" code here.
Case vbNo
'Insert your "No" code here.
End Select

32 komentar:

  1. ada yang ingin saya tanyakan pak, mengenai excel vba. bagaimana mengcopy nama cell tertentu (ranged), ke cell tertentu pada sheet yang berbeda...

    BalasHapus
    Balasan
    1. Coba dulu dengan merekam macro mas dan rasakan nikmatnya bermacro ria.
      Caranya dengan memilih View, Macro recording, dstnya.

      Hapus
  2. Contekannya (cheat sheet) sangat bermanfaat! Saya juga setuju memang kita perlu membuat file 'pribadi' yang berisi cheat sheet seperti ini,apalagi kalau masih belum terbiasa (seperti saya).

    BalasHapus
  3. saya sangat membutuhkan bantuan para master ni,,saya sedang membuat sebuah sistem untuk pembayaran rekening,,tentang pelayanan yang saya lakukan di perusahaan kecil di sebuahh desa pak,,barangkali bisa bantu bnyak hal yang saya ingin tanyakan,,,boleh sya mnta email untuk mengirim file ataupun hal lainnya,,saya tunggu kabarnya,,
    iar.zmy@gmail.com

    BalasHapus
    Balasan
    1. Silakan layangkan kasus Anda ke milis Belajar-Excel di Yahoogroups.

      Hapus
  4. Teman-teman sy ingin membuat printah print sheet excel yang saya pilih. misalnya membuat tombol centang untuk memilih sheet yang saya pilih untuk di print.
    Biasanya kalo cara manual cukup dengan CTRL + P, tapi agak rumit dngan sheet yang berjumlah banyak. tolong bantuannya. Sy sudah membuat tombol menu-menu tapi ngga tau isi prntah macronya...karena memilih sheet berarti ada beberapa pilihan..trims......kelautanpangkep@gmai.com

    BalasHapus
    Balasan
    1. Silakan layangkan kasus Anda ke milis Belajar-Excel di Yahoogroups.

      Hapus
  5. saya mau menanyakan kode Commanbutton untuk save data berbeda sheet.



    contoh kasusnya begini



    saya membuat form pendaftaran untuk klinik.



    di userformnya saya buat begini

    nama

    umur

    bulan ( combobox ) januari ferbruari

    nama poli ( combobox ) dalam,mata,orhtopedi

    no bpjs

    dll.



    Sheetnya saya buat begini

    sheet1MainMenu, Sheet2JANUARIPOLIDALAM, Sheet3FerbruaripoliMATA,Sheet4FerbruariPOLIDALAM, dan seterusnya

    commanbutton nya saya buat nama SIMPAN..



    pertanyaannya..

    bagaimana cara menyimpan data tersebut ke masing2 sheet dengan 1 tombol SIMPAN..

    jadi, begitu combobox1 NAMA Poli saya pilih Combobox2,Namabulan saya Pilih

    dan klik simpan, semua data masuk ke sheet yg dimaksud..



    Semoga sahabat sekalian ada yg bisa membantu permasalahan ini, terimakasih banyak sebelumnya..



    contoh kasusnya bisa di download di sini Passwordnya (admin) http://www.4shared.com/file/2Ow4tHZice/Book1.html

    BalasHapus
    Balasan
    1. Silakan layangkan kasus Anda ke milis Belajar-Excel di Yahoogroups.

      Hapus
  6. Terima kasih , ini buat catatan saya , sangat berguna gan

    BalasHapus
  7. macro yang digunakan untuk manajemen pada ms excel apa pak ???

    BalasHapus
  8. bagaimana caranya menyisipkan baris dengan kriterian terntu, misal kita ingin menyisipkan baris jika cell 1 tidak sama dengan cell 2.
    trims

    BalasHapus
  9. Kalau Boleh mohon kepada para master upload link untuk tutorail belajar VBA Excel.

    BalasHapus
  10. Salam kenal Mr.kid

    saya iwan.sebelumnya saya sering liat2 blog ini,sampai ada yang gunakan untuk pekerjaan saya,"Lapkeu(versi XL2003),yang ingin saya tanyakan bisakah GL nya menampilkan semua account COA lengkap dengan saldo awal dan Saldo akhirnya...terima kasih

    BalasHapus
    Balasan
    1. Silakan layangkan kasus Anda ke milis Belajar-Excel di Yahoogroups.

      Hapus
  11. gan saya mau nanya saya buat sheet yg di input menggunakn makro kemudian saya ingi print data yg ditambahkan dalam bentuk lampiran surat jadi pas saya input di tabel di lampiran yg berbentuk surat pun ter input dan bisa langsung di print gimana ya gan caranya mohon bantuannya

    BalasHapus
    Balasan
    1. Silakan layangkan kasus Anda ke milis Belajar-Excel di Yahoogroups, berikut contoh file yang berisi hal2 yang ingin ditanyakan dan hasil yang diinginkan.

      Hapus
  12. gan, saya mencoba menambah keterangan pada kolom lain mengenai jika pembelian dilakukan tertanggal 1 januari 2016, maka disebut dengan "pembelian Awal", dan jika pembelian dilakukan diatas tanggal 1 januari 2016, maka disebut dengan "pembelian lanjutan". Mohon bantuan informasinya gan...

    BalasHapus
  13. Keren bgt
    http://pandaivb.blogspot.co.id

    BalasHapus
  14. Keren bgt
    http://pandaivb.blogspot.co.id

    BalasHapus
  15. Izin Share Bang, Bermanfaat ilmunya,
    kalo gak keberatan juga ane mau share tutorial membuat form input data lainnya :

    http://master-tutorialexpert.blogspot.co.id/2017/04/tutorial-membuat-form-input-data-di.html

    BalasHapus
  16. teman teman saya mau tanya bagaimana scrip vba untuk menghindari data ganda pada userform ( userform absensi siswa ) jika menginput siswa yang sama hari itu supaya ada peringatan.. siswa bersangkutan sudah absen"

    BalasHapus
  17. Mohon dibantu teman-teman

    saya praktek highlight vba row+colmn tapi hanya untuk 1 range.
    Gimana cara nya bisa untuk 2 range tapi masih dalam sheet yang sama,
    berikut contoh untuk 1 range :

    Dim rowN As Integer, colN As Integer
    Dim RArea As Range
    Set RArea = Range("A1:Q10")
    Cells.Interior.ColorIndex = 0
    If Intersect(ActiveCell, RArea) Is Nothing Then Exit Sub
    rowN = ActiveCell.Row
    colN = ActiveCell.Column
    Range(Cells(4, colN), Cells(rowN, colN)).Interior.ColorIndex = 37
    Range(Cells(rowN, 1), Cells(rowN, colN)).Interior.ColorIndex = 37

    nah, saya saya ingin highlight tersebut juga di range A18:Q22

    BalasHapus
  18. Ubah code Set RArea menjadi :
    Set RArea = Range("A1:Q10, A18:Q22")

    BalasHapus
  19. Ubah code Set RArea menjadi :
    Set RArea = Range("A1:Q10, A18:Q22")

    BalasHapus
  20. Ubah code Set RArea menjadi :
    Set RArea = Range("A1:Q10, A18:Q22")

    BalasHapus
  21. Maaf pak Hendrik dan teman-teman,
    pertanyaan saya ubah, 2x range yang saya maksud adalah Pivot dari sebuah data.
    1 range menampilkan Quantity, dan 1 range untuk Amount atau Price.
    (range A11:Q13 adalah range kosong)
    anggap aja kita pisah masing masing sheet, akan seperti berikut :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rowN As Integer, colN As Integer
    Dim RArea As Range
    Set RArea = Range("A6:Q9")
    Cells.Interior.ColorIndex = 0
    If Intersect(ActiveCell, RArea) Is Nothing Then Exit Sub
    rowN = ActiveCell.Row
    colN = ActiveCell.Column
    Range(Cells(5, colN), Cells(rowN, colN)).Interior.ColorIndex = 37
    Range(Cells(rowN, 1), Cells(rowN, colN)).Interior.ColorIndex = 37
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rowN As Integer, colN As Integer
    Dim RArea As Range
    Set RArea = Range("A18:Q21")
    Cells.Interior.ColorIndex = 0
    If Intersect(ActiveCell, RArea) Is Nothing Then Exit Sub
    rowN = ActiveCell.Row
    colN = ActiveCell.Column
    Range(Cells(17, colN), Cells(rowN, colN)).Interior.ColorIndex = 37
    Range(Cells(rowN, 1), Cells(rowN, colN)).Interior.ColorIndex = 37
    End Sub

    Nah, saya akan gabung di 1 sheet

    BalasHapus