EXCEL MAKRO ÖRNEKLERİ
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.

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 SubDö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 SubA, 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 SubStandart rapor başlığı tek tıkla uygulanır. Renk kodunu kurumsal kılavuza göre değiştirerek standart hale getirilir.

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 SubYabancı 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 SubPivot 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 SubAylı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 SubStok 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 SubSeç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
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 SubToplu 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 SubE 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 SubA1: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

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 Explicitekleyin; değişken tanımlamayı zorunlu hale getirir - Hata yakalama: Üretim ortamına dağıtacaksanız
On Error GoToile 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.



