EXCEL MAKRO ÖRNEKLERİ

Excel yeşil X logosu yanında For Each döngü kod kartı kısa VBA satırlarıyla makro örneği

Excel'i her gün kullanan biri olarak şunu fark etmiş olabilirsiniz: aynı işi sürekli tekrarlıyorsunuz. Verileri başka sayfaya kopyalama, başlıkları biçimleme, raporu PDF'e çevirme, müşteriye mail atma... Hepsi 5-10 dakikalık küçük işler, ama gün içinde topladığınızda saatlere ulaşıyor. Excel makro örnekleri bu rutin işleri tek butona indirgemek için en pratik araçtır.

Bu yazıda 15 farklı makro örneği var. Her biri bağımsız çalışır; ihtiyacınız olanı kopyalayıp VBA editörüne (Alt + F11) yapıştırarak hemen kullanabilirsiniz. Tüm örnekler kurumsal raporlama ortamlarında gerçekten karşılaşılan işlere odaklıdır.

1. Hazırlık — Makroları Çalıştırma

Makroları kullanmak için Geliştirici sekmesi açık olmalı: Dosya > Seçenekler > Şeridi Özelleştir > Geliştirici işaretli. Alt + F11 ile VBA editörünü açın, Insert > Module ile yeni modül ekleyin ve aşağıdaki kodları yapıştırın. Çalıştırmak için imleç makronun içindeyken F5. Dosya .xlsm uzantısıyla kaydedilmeli.

VBA editör Insert menüsü açık Module seçeneği vurgulu yeni modül ekleme hazırlık adımı şeması

2. Tüm Sayfaları Tek Sayfada Birleştirme

Aynı yapıdaki birden çok sayfanın verisini tek bir özet sayfaya alt alta toplar:

Sub SayfalariBirlestir()
 Dim sh As Worksheet, ozet As Worksheet
 Dim sonSatir As Long, hedefSatir As Long

 Set ozet = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
 ozet.Name = "Birleşik"

 hedefSatir = 1
 For Each sh In ThisWorkbook.Worksheets
 If sh.Name <> "Birleşik" Then
 sonSatir = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
 sh.Range("A1:Z" & sonSatir).Copy ozet.Cells(hedefSatir, 1)
 hedefSatir = hedefSatir + sonSatir
 End If
 Next sh

 MsgBox "Tüm sayfalar Birleşik sayfasında toplandı."
End Sub

Şubelerden gelen aynı şablonlu raporları aylık konsolide etmek için kullanılır.

3. Boş Satırları Toplu Silme

Sub BosSatirlariSil()
 Dim sonSatir As Long, i As Long

 sonSatir = Cells(Rows.Count, "A").End(xlUp).Row

 Application.ScreenUpdating = False
 For i = sonSatir To 2 Step -1
 If WorksheetFunction.CountA(Rows(i)) = 0 Then
 Rows(i).Delete
 End If
 Next i
 Application.ScreenUpdating = True
End Sub

Döngü aşağıdan yukarı ilerler — silinen satır yüzünden satır numarası kaymaz. ScreenUpdating kapatılarak hız artırılır.

4. Yinelenen Satırları Kaldırma

Sub YinelenenleriKaldir()
 Dim son As Long
 son = Cells(Rows.Count, "A").End(xlUp).Row

 Range("A1:E" & son).RemoveDuplicates _
 Columns:=Array(1, 2, 3), Header:=xlYes
End Sub

A, B, C sütunlarının tümünün eşleştiği satırları temizler. Header parametresi başlık satırını korur.

5. Sütun Başlıklarını Toplu Biçimle

Sub BasliklariBicimle()
 With Range("A1:Z1")
 .Font.Bold = True
 .Font.Color = RGB(255, 255, 255)
 .Interior.Color = RGB(0, 112, 192)
 .HorizontalAlignment = xlCenter
 .Borders.LineStyle = xlContinuous
 .RowHeight = 22
 End With
 Columns("A:Z").AutoFit
End Sub

Standart rapor başlığı tek tıkla uygulanır. Renk kodunu kurumsal kılavuza göre değiştirerek standart hale getirilir.

Makro öncesi sade başlık satırı ve sonrası kalın beyaz yazı yeşil dolgu hizalı görünüm karşılaştırma

6. Türkçe Karakterleri Kaldırma

Sub TurkceKarakterTemizle()
 Dim hucre As Range
 Dim metin As String

 For Each hucre In Selection
 metin = hucre.Value
 metin = Replace(metin, "ç", "c")
 metin = Replace(metin, "ğ", "g")
 metin = Replace(metin, "ı", "i")
 metin = Replace(metin, "ö", "o")
 metin = Replace(metin, "ş", "s")
 metin = Replace(metin, "ü", "u")
 metin = Replace(metin, "Ç", "C")
 metin = Replace(metin, "Ğ", "G")
 metin = Replace(metin, "İ", "I")
 metin = Replace(metin, "Ö", "O")
 metin = Replace(metin, "Ş", "S")
 metin = Replace(metin, "Ü", "U")
 hucre.Value = metin
 Next hucre
End Sub

Yabancı sistemlere veri aktarırken sık ihtiyaç duyulur. Seçili aralık üzerinde çalışır.

7. Boş Hücreleri Yukarıdaki Değerle Doldurma

Sub BosluklariYukarıdandanDoldur()
 Dim sutun As String
 sutun = "A"
 Dim son As Long, i As Long
 son = Cells(Rows.Count, sutun).End(xlUp).Row

 For i = 2 To son
 If Cells(i, sutun).Value = "" Then
 Cells(i, sutun).Value = Cells(i - 1, sutun).Value
 End If
 Next i
End Sub

Pivot tablo için kategori sadece ilk satırda yazılmış verileri normalize etmenin standart yolu.

8. Aktif Sayfayı PDF Olarak Kaydetme

Sub PDFKaydet()
 Dim yol As String
 yol = ThisWorkbook.Path & "Rapor_" & _
 Format(Date, "yyyymmdd") & ".pdf"

 ActiveSheet.ExportAsFixedFormat _
 Type:=xlTypePDF, _
 Filename:=yol, _
 OpenAfterPublish:=False

 MsgBox "PDF kaydedildi: " & yol
End Sub

Aylık raporlama için butona bağlanır. Yazma alanı belli olmazsa ActiveSheet.PageSetup.PrintArea = "A1:H30" ile alan tanımlanır.

9. Outlook ile Mail Gönderme

Sub MailGonder()
 Dim ol As Object, mail As Object
 Set ol = CreateObject("Outlook.Application")
 Set mail = ol.CreateItem(0)

 With mail
 .To = "alici@firma.com"
 .CC = "kopya@firma.com"
 .Subject = "Haftalık Satış Raporu - " & Format(Date, "dd.mm.yyyy")
 .Body = "Merhaba," & vbNewLine & vbNewLine & _
 "Ekteki raporu inceleyebilirsiniz." & vbNewLine & _
 "İyi çalışmalar."
 .Attachments.Add ThisWorkbook.FullName
 .Display ' .Send doğrudan gönderir
 End With
End Sub

.Display dosyayı Outlook penceresinde açar, gönderme kullanıcıya bırakılır. .Send doğrudan postalar.

10. Belirli Koşulda Hücreleri Renklendirme

Sub KritikleriRenklendir()
 Dim sonSatir As Long, i As Long
 sonSatir = Cells(Rows.Count, "B").End(xlUp).Row

 For i = 2 To sonSatir
 Select Case Cells(i, "B").Value
 Case Is < 10
 Range("A" & i & ":E" & i).Interior.Color = RGB(255, 200, 200)
 Case 10 To 50
 Range("A" & i & ":E" & i).Interior.Color = RGB(255, 255, 200)
 Case Else
 Range("A" & i & ":E" & i).Interior.Color = xlNone
 End Select
 Next i
End Sub

Stok kritik seviye uyarısı, vade durumu, performans dilimi gibi senaryolarda kullanılır.

11. Tarih Sütunundan Gün Sayısı

Sub GunSayisi()
 Dim hucre As Range
 For Each hucre In Selection
 If IsDate(hucre.Value) Then
 hucre.Offset(0, 1).Value = Date - hucre.Value
 End If
 Next hucre
End Sub

Seçili sütundaki her tarih için yanındaki hücreye bugüne kalan/geçen gün sayısını yazar. Fatura vade takibinde işe yarar.

12. Klasördeki Tüm Excel Dosyalarını Birleştirme

Sub KlasorBirlestir()
 Dim yol As String, dosya As String
 Dim kaynakWB As Workbook
 Dim hedef As Worksheet
 Dim hedefSatir As Long

 yol = ThisWorkbook.Path & "Veriler"
 dosya = Dir(yol & "*.xlsx")

 Set hedef = ThisWorkbook.Sheets("Hepsi")
 hedefSatir = 2

 Application.ScreenUpdating = False
 Do While dosya <> ""
 Set kaynakWB = Workbooks.Open(yol & dosya)
 With kaynakWB.Sheets(1)
 Dim son As Long
 son = .Cells(.Rows.Count, "A").End(xlUp).Row
 .Range("A2:Z" & son).Copy hedef.Cells(hedefSatir, 1)
 hedefSatir = hedefSatir + son - 1
 End With
 kaynakWB.Close False
 dosya = Dir
 Loop
 Application.ScreenUpdating = True

 MsgBox "Tüm dosyalar birleştirildi."
End Sub
Klasör içinde altı küçük xlsx dosya simgesi soldan oklarla tek büyük birleşik dosyaya akış şeması

13. Her Satır İçin Ayrı PDF Üretme

Sub HerSatirPDF()
 Dim son As Long, i As Long
 Dim yol As String

 son = Cells(Rows.Count, "A").End(xlUp).Row
 yol = ThisWorkbook.Path & "Faturalar"
 If Dir(yol, vbDirectory) = "" Then MkDir yol

 For i = 2 To son
 Sheets("Sablon").Range("MusteriAd").Value = Cells(i, "B").Value
 Sheets("Sablon").Range("Tutar").Value = Cells(i, "D").Value
 Sheets("Sablon").Range("Tarih").Value = Cells(i, "C").Value

 Sheets("Sablon").ExportAsFixedFormat _
 Type:=xlTypePDF, _
 Filename:=yol & "Fatura_" & Cells(i, "A").Value & ".pdf", _
 OpenAfterPublish:=False
 Next i

 MsgBox son - 1 & " adet PDF üretildi."
End Sub

Toplu fatura/teklif/sertifika üretimi için klasik kalıp.

14. Çift Tıklamayla Hücreye Tarih Yazma

Bu makro modüle değil, sayfanın kendi koduna yazılır. Sayfa sekmesine sağ tık > Kod Görüntüle:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, Range("E:E")) Is Nothing Then
 Target.Value = Date
 Cancel = True
 End If
End Sub

E sütunundaki herhangi bir hücreye çift tıklandığında bugünün tarihini otomatik yazar.

15. Hücre Değişikliğini Otomatik Loga Yazma

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("A1:E1000")) Is Nothing Then Exit Sub

 Application.EnableEvents = False

 Dim log As Worksheet
 Set log = ThisWorkbook.Sheets("Log")
 Dim son As Long
 son = log.Cells(log.Rows.Count, 1).End(xlUp).Row + 1

 log.Cells(son, 1).Value = Now
 log.Cells(son, 2).Value = Environ("UserName")
 log.Cells(son, 3).Value = Target.Address
 log.Cells(son, 4).Value = Target.Value

 Application.EnableEvents = True
End Sub

A1:E1000 aralığındaki her değişikliği Log sayfasına tarih, kullanıcı, hücre adresi ve yeni değer ile kaydeder. Denetim izi gerektiren kurumsal şablonlarda kullanılır.

16. Makroları Hızlı Erişime Bağlama

  • Kısayol tuşu: Geliştirici > Makrolar > Seç > Seçenekler > CTRL + harf kombinasyonu atayın
  • Buton: Sayfaya buton ekleyip makroyu bağlayın. Kullanıcı için en sezgisel yöntem
  • Hızlı Erişim Araç Çubuğu (QAT): Dosya > Seçenekler > Hızlı Erişim Araç Çubuğu menüsünden makroyu seçip eklediğinizde pencere üst köşesinde tek tık alanı oluşur
  • Şerit özelleştirme: Kurumsal kullanım için Geliştirici > Şerit Özelleştir bölümünden özel sekme oluşturup makrolarınızı düğme olarak yerleştirebilirsiniz
Hızlı Erişim Araç Çubuğu konfigürasyonu sol listede makro öğesi sağ tarafa eklenmiş ok işareti vurgulu

17. Pratik Notlar

  • Yedek alın: Makro çalıştırmadan önce dosyanın kopyasını almak güvenli alışkanlıktır
  • Test ortamı: Yeni makroyu önce küçük bir test dosyasında çalıştırın
  • Option Explicit: Modülün üstüne Option Explicit ekleyin; değişken tanımlamayı zorunlu hale getirir
  • Hata yakalama: Üretim ortamına dağıtacaksanız On Error GoTo ile sarmalayın
  • Kişisel makro kitabı: Tüm Excel'lerde kullanmak istediğiniz genel araçları PERSONAL.XLSB içine koyun

18. Doğru Yerde Makro

Makrolar kurumsal raporlamada küçük ama belirleyici bir parçadır. Doğru yerlerde kullanıldığında haftalık iki-üç saatlik tasarruf sağlar; yanlış yerlerde ise bakım yükü üretip kendi sorununa dönüşür.

Kaydediciden bağımsız temiz kod yazma, hata yönetimi ve UserForm tasarımı için Excel makro eğitimi uygundur; raporlama disiplinini önce kurmak isteyenler için Excel için detaylı eğitim daha doğru bir başlangıçtır.