Kaynak: https://oguzerol.com/excel-makro-vba/

[![Örnek senaryo: makro 12 bölgenin raporunu PDF'e kaydederken toplamı tutmayan B12 raporunu durdurur; sebep, 5.000 satırlık sabit şablon aralığının dışında kalan 130 satırdır ve düzeltme size bırakılır.](https://oguzerol.com/gorseller/senaryo/excel-makro-vba-senaryo-tr.webp)

Görseli büyüt](https://oguzerol.com/gorseller/senaryo/excel-makro-vba-senaryo-tr.webp)

# Excel Makro (VBA) Yaptırma: Hangi İş Makroya Uygun, Sağlam Makro Nasıl Olur?

[Oğuz Erol](https://oguzerol.com/hakkimda/)  |  16 dk okuma  |  Yayın: 29 Temmuz 2026  |  Güncelleme: 24 Ekim 2026

## Kısa özet

Tekrar eden Excel işiniz makroya uygun mu? Karar tablosu, 12 bölge raporu örneği, açıklamalı VBA kodu ve güvenlik ayarları. Yaptırmadan önce okuyun.

Makro (VBA), masaüstü Excel’de bir kişinin bilgisayar başında yaptığı ve her seferinde aynı adımları izleyen işte doğru araçtır: rapor sayfası üretmek, biçimlendirmek, birçok sayfayı tek tek dolaşmak, toplu PDF almak ya da yazdırmak. Her hafta aynı raporu elle hazırlıyorsanız işiniz çoğu zaman makroya uygundur. Ölçüt üç tane: işi bir kişi başlatıyor, dosya masaüstü Excel’de açılıyor, sonuç bir dosya ya da sayfa. Veriyi birleştirmekte Power Query, tarayıcıda ya da kimse yokken çalışan işte Office Script, birden çok kişinin veri girip onay verdiği işte web uygulaması daha doğrudur.

Makro yaptıracaksanız beş şeyi sorun: kaynağı denetliyor ve sabit aralık yerine tablo ya da son satır kullanıyor mu, hatada ne yapıyor, geri alınamazlığı söylüyor mu, her çalışmayı kaydediyor mu, ayarları ayrı sayfada mı? Aşağıdaki kurgusal örnekte bir dağıtıcının 12 bölgelik haftalık raporu elle 87 adım sürüyor ve 37 noktada uyarı vermeden yanlış PDF çıkabiliyor. Makroyla insana 3 adım, uyarısız hata için 1 nokta kalıyor.

*Bu sayfadaki Microsoft kaynaklarını 16 Ekim 2026’da okudum.*

## Makro hangi işte doğru araçtır?

Makro, masaüstü Excel’de aynı eylem dizisini her seferinde aynı sırayla yapan işe uyar: kural belli, karar yok, sonuç bir dosya ya da sayfa.

- **Dosya içinde biçimlendirme.** Her hafta gelen dökümde sütun genişliği, sayı biçimi, koşullu renk, başlık satırı.
- **Rapor sayfası üretme.** Bir şablon sayfasına bölge, bayi ya da proje seçip her biri için ayrı sayfa ya da ayrı dosya üretmek.
- **Toplu yazdırma ve PDF.** Bir sayfayı 12, 48 ya da 200 kez farklı filtreyle PDF’e kaydetmek. VBA’da bunu `ExportAsFixedFormat` yöntemi yapar ([Microsoft Learn](https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.exportasfixedformat)).
- **Birden çok sayfayı dolaşmak.** 30 sayfanın her birinde aynı hücreyi kontrol edip sonucu bir özet sayfasına yazmak.

## Makro hangi işte yanlış araçtır?

Makro; veriyi temizleyip birleştirmekte, tarayıcıda ya da kimse yokken çalışması gereken işte ve birden çok kişinin aynı veriye girdiği işte yanlış araçtır. Bu üç sınırı ve yerine geçen araçları [Excel otomasyonu rehberinde](https://oguzerol.com/excel-otomasyonu/) karşılaştırdım. Aşağıdaki tablo yalnız bu sayfanın sorusuna odaklanıyor.

## Makro yaptırmalı mıyım? Karar tablosu

Makro yaptırmanız gereken durum, işin masaüstünde, bir kişinin başlattığı ve dosya ya da çıktı üreten bir iş olmasıdır. Tablo başlangıç önerimdir:

| iş | makro uygun mu | neden |
| --- | --- | --- |
| Her bölgeye ayrı PDF, toplu yazdırma, sayfaları dolaşma | Evet | Masaüstünde, tek kişinin başlattığı eylem dizisi |
| Haftalık dökümü biçimlendirmek, şablondan rapor sayfası üretmek | Evet | Kural sabit, her hafta aynı |
| Klasördeki aynı yapıdaki dosyaları birleştirip temizlemek | Genelde hayır | Power Query bunun için var; makroda sütun adı değişince kod düzeltilir |
| Dosya tarayıcıda (Excel web) ya da iPhone/iPad’de açılıyor | Hayır | VBA orada çalışmıyor; Office Script web, Windows ve Mac’te çalışıyor |
| Belli saatte, kimse bilgisayar başında değilken çalışmalı | Hayır | VBA’nın Power Automate bağlayıcısı yok, makroyu bir kullanıcı başlatıyor |
| Dosya her hafta e-postayla dolaşıyor | Dikkatle | Windows’ta internetten gelen dosyada makro engelleniyor; tek konumda tutun |
| Birden çok kişi veri girip onay veriyor, kimin neyi değiştirdiği gerekiyor | Hayır | Bu dosyanın sorunu, makronun değil; web uygulaması |

Web ve iOS ile Power Automate satırlarının kaynağı Microsoft’un VBA ile Office Script karşılaştırması ([Microsoft Learn](https://learn.microsoft.com/en-us/office/dev/scripts/resources/vba-differences)). Aynı sayfaya göre Office Script kullanmak için kurumsal ya da eğitim (iş veya okul) lisansı gerekiyor, VBA ise masaüstü Excel’de ek lisans istemiyor.

## Örnek: 12 bölgenin haftalık raporu, elle ve makroyla

*Örnek veri, kurgusaldır.* Rulman, conta ve hidrolik sarf malzemesi satan bir dağıtıcı düşünün. Satış 12 bölgeye ayrılmış, B01’den B12’ye. Her pazartesi satış analisti ERP’den haftalık satış dökümünü alıyor ve her bölge müdürüne kendi bölgesinin tek sayfalık raporunu PDF olarak hazırlıyor. Kitapta Veri (döküm), Rapor (bölge seçilince dolan şablon) ve bir açılır liste var. ERP dökümün sonuna kayıt sayısını yazan bir TOPLAM satırı koyuyor.

Elle akışta haftada 3 sabit adım var: dökümü yapıştırmak, satır sayısına göz atmak, haftanın klasörünü açmak. Sonra her bölge için 7 adım: bölgeyi seçmek, hesaplamayı beklemek, rapor toplamını veri toplamıyla gözle karşılaştırmak, Farklı Kaydet’ten PDF seçmek, dosya adını yazmak, klasörü seçmek, kaydetmek.

|  | elle | makroyla |
| --- | --- | --- |
| İnsanın attığı adım | 87 (3 + 12 × 7) | 3 |
| Uyarı vermeden yanlış PDF çıkarabilen nokta | 37 (1 + 12 × 3) | 1 |
| Her çalışmada makronun yaptığı kontrol | Yok | 13 (1 döküm + 12 bölge toplamı) |
| İnsana kalan kontrol | Her bölgede gözle toplam karşılaştırma | Kayıt sayfasında uyarı var mı bakmak |
| Haftalık süre (kurgu varsayımı) | 58 dakika | 8 dakika |

Elle akıştaki 37 nokta: 12 bölgenin her birinde üç nokta (yanlış bölgeyi seçip doğru adla kaydetmek, dosya adını yanlış bölge koduyla yazmak, toplam karşılaştırmasını atlamak), bir de dökümü eksik ya da yanlış haftadan yapıştırmak. Hiçbiri Excel’de hata vermez.

Makrolu akışta insan dökümü yapıştırıyor, düğmeye basıp onay kutusunu kabul ediyor ve kayıt sayfasına bakıyor. Burada dikkat edilmesi gereken bir mantık var: **bölge toplamı kontrolü dökümün eksik yapıştırılmasını yakalamaz.** Rapor da makro da aynı eksik veriden hesap yapar, iki toplam yine tutar. Bunun için makro önce dökümün kendisini denetliyor: TOPLAM satırı var mı, Veri sayfasındaki satır sayısı ERP’nin yazdığı kayıt sayısıyla aynı mı? Kalan tek nokta yanlış haftanın dökümü. O döküm kendi TOPLAM satırıyla eksiksiz gelir, iki kontrolden de geçer. Ayarlar’daki hafta ile dökümdeki tarihleri karşılaştıran bir satır bu noktayı da kapatır. ERP’niz TOPLAM satırı ya da kayıt sayısı vermiyorsa, ERP ekranındaki kayıt sayısı Ayarlar’daki bir hücreye elle yazılır ve makro onunla karşılaştırır.

Aynı mantık sütun kaymasında da geçerli: ERP tutarın önüne yeni bir sütun eklerse şablon da makro da F sütununu okur, iki toplam yine tutar ve 12 yanlış PDF çıkar. Bu yüzden döküm kontrolü başlık satırında “Bolge” ve “Tutar” adlarının yerinde olup olmadığına da bakıyor.

Süre satırı ölçüm değil, bu kurgu örneğin hesabı: elle bölge başına 4 dakika ve haftalık 10 dakika sabit iş, makroyla 5 dakika yapıştırma ve 3 dakika kayıt okuma. Bu varsayımla haftada 50 dakika, yılda 48 çalışma haftasında 40 saat ediyor. Kendi işinizde önce süreyi bir hafta gerçekten yazın.

### Döküm 5.000 satırı geçtiği hafta ne oldu?

Önceki hafta döküm 4.870 satırdı. Bu hafta 5.130 satır geldi. Rapor şablonundaki formüller yıllar önce Veri!A2:A5001 aralığına bakacak şekilde kurulmuştu, yani en fazla 5.000 satır görüyordu. ERP dökümü bölge koduna göre sıralı verdiği için dışarıda kalan 130 satırın hepsi B12’nindi.

Elle akışta B12 raporu 1.969.446,92 TL toplamla PDF’e gidecekti. Doğrusu 2.640.408,82 TL. Aradaki 670.961,90 TL, bölgenin cirosunun yüzde 25,4’ü, 507 satırın 130’u. Diğer 11 bölge doğruydu, hiçbir hücre hata vermedi.

Döküm tamdı, döküm kontrolü geçti. Ardından makro her bölgenin toplamını son veri satırına kadar kendisi hesaplayıp şablonun toplamıyla karşılaştırdı. B12’de iki toplam tutmadı. Makro 11 PDF üretti, B12’yi üretmedi ve kayıt sayfasına uyarı yazdı. Analist şablonda sabit aralığı buldu. Kalıcı çözüm, Veri sayfasını Excel tablosuna çevirmek ve rapor formüllerini tablo başvurusuyla yazmaktı. Tablo yeni satırla kendiliğinden büyüyor.

Döküm kontrolü kaynağın eksikliğini, bölge toplamı kontrolü şablonun hatasını yakalıyor. Bu sayıları ve iki eksik yapıştırma durumunu (dökümün 4.900. satırda kesilmesi, ortadan 230 satır atlanması) Python’da kurgusal veriyle yeniden hesapladım. Bu bilgisayarda Excel yok, kodu Excel’de çalıştırmadım.

## Sağlam bir makroda ne olmalı?

Sağlam makro, kaynak dosya değiştiğinde sessizce yanlış sonuç üretmek yerine durup söyleyen makrodur. Yaptırdığınız makroda beş şeyi kontrol edin:

1. **Kaynak denetleniyor, sabit aralık yok.** Makro işe başlamadan dökümün tam geldiğini ve sütun başlıklarının yerinde olduğunu denetler. Kaydedilmiş bir makroyu açtığınızda `Range("A1:H4870")` gibi adresler görürseniz, o makro kayıt günündeki satır sayısına bağlıdır. Doğrusu, veriyi Excel tablosu olarak tutmak ya da son dolu satırı her çalışmada bulmak (`Cells(Rows.Count, "A").End(xlUp).Row`). Son satır yöntemi için tarih ya da belge numarası gibi hiç boş kalmayan bir sütun seçilir.
2. **Hata yönetimi.** Klasör yoksa, sayfa adı değişmişse, dosya yazılamıyorsa makro Excel’in hata kutusunda takılmamalı. Hatayı kaydetmeli, ekranı geri getirmeli ve “tamamlandı” demeden durmalı.
3. **Geri alınamazlık uyarısı.** Microsoft’a göre Excel’de makro çalıştırmak geri alma geçmişini siliyor ([Microsoft Destek](https://support.microsoft.com/en-us/office/undo-redo-or-repeat-an-action-84bdb9bc-4e23-4f06-ba78-f7b893eb2d28)). Ctrl+Z ne makronun yaptığını ne de ondan önceki adımlarınızı geri alır. Veriyi değiştiren makro önce onay sormalı; önerim, ondan önce dosyayı kaydetmek ya da kopyalamak.
4. **Çalıştırma kaydı.** Her çalışmada ayrı bir sayfaya tarih, saat, çalıştıran kişi, işlenen kayıt ve sonuç (“tamam”, “uyarı”, “hata”) yazılır.
5. **Ayarlar ayrı sayfada.** Klasör yolu, hafta numarası, bölge listesi kodun içine yazılmaz, Ayarlar sayfasındaki adlandırılmış hücrelerde durur. Yeni bölge açıldığında listeye bir satır eklenir, koda kimse dokunmaz.

## Örnek kod: her bölgenin raporunu PDF’e kaydetmek

Aşağıdaki makro önce dökümü denetliyor, sonra bölge listesini dolaşıp her bölgenin toplamını karşılaştırıyor, tutuyorsa PDF kaydediyor ve her adımı Kayit sayfasına yazıyor. Kod yazmayacaksanız bu bölümü okumadan geçebilirsiniz, yukarıdaki beş ölçüt yeter. Kodu Excel’de çalıştırmadım, kendi dosyanızın bir kopyasında deneyin.

```
Option Explicit

' Her bolgenin rapor sayfasini PDF olarak kaydeder.
' Ayarlar: Klasor, Hafta, Bolgeler (adlandirilmis hucreler)
' Rapor: SeciliBolge, RaporToplam
' Veri: A = tarih, B = bolge, F = tutar; son satir ERP'nin TOPLAM satiri (C = kayit sayisi)

Sub BolgeRaporlariniPdfYap()
    Dim ayar As Worksheet, veri As Worksheet, rapor As Worksheet, kayit As Worksheet
    Dim klasor As String, hafta As String, bolge As String, hataMetni As String
    Dim toplamSatiri As Long, sonVeri As Long, i As Long, adet As Long
    Dim veriToplam As Double

    On Error GoTo Hata
    Set ayar = ThisWorkbook.Worksheets("Ayarlar")
    Set veri = ThisWorkbook.Worksheets("Veri")
    Set rapor = ThisWorkbook.Worksheets("Rapor")
    Set kayit = ThisWorkbook.Worksheets("Kayit")

    klasor = ayar.Range("Klasor").Value
    hafta = ayar.Range("Hafta").Value
    If Right(klasor, 1) = "\" Then klasor = Left(klasor, Len(klasor) - 1)
    If Dir(klasor, vbDirectory) = "" Then Err.Raise vbObjectError + 1, , "Klasor yok: " & klasor
    klasor = klasor & "\"

    ' Dokum kontrolu: basliklar yerinde mi, TOPLAM satiri var mi, kayit sayisi tutuyor mu?
    If veri.Range("B1").Value <> "Bolge" Then Err.Raise vbObjectError + 4, , "Sutun eksik: B1 'Bolge' olmali"
    If veri.Range("F1").Value <> "Tutar" Then Err.Raise vbObjectError + 5, , "Sutun eksik: F1 'Tutar' olmali"
    toplamSatiri = veri.Cells(veri.Rows.Count, "A").End(xlUp).Row
    If veri.Cells(toplamSatiri, "A").Value <> "TOPLAM" Then _
        Err.Raise vbObjectError + 2, , "Dokum eksik: TOPLAM satiri yok"
    sonVeri = toplamSatiri - 1
    If sonVeri - 1 <> veri.Cells(toplamSatiri, "C").Value Then _
        Err.Raise vbObjectError + 3, , "Dokum eksik: " & (sonVeri - 1) & " satir var, ERP " & _
        veri.Cells(toplamSatiri, "C").Value & " diyor"

    If MsgBox(ayar.Range("Bolgeler").Rows.Count & " bolge icin PDF uretilecek." & vbCrLf & _
        "Bu islem Ctrl+Z ile geri alinamaz. Devam edilsin mi?", _
        vbYesNo + vbQuestion) = vbNo Then Exit Sub

    Application.ScreenUpdating = False
    For i = 1 To ayar.Range("Bolgeler").Rows.Count
        bolge = ayar.Range("Bolgeler").Cells(i, 1).Value
        rapor.Range("SeciliBolge").Value = bolge
        Application.Calculate

        veriToplam = Application.WorksheetFunction.SumIfs( _
            veri.Range("F2:F" & sonVeri), veri.Range("B2:B" & sonVeri), bolge)

        If Abs(veriToplam - rapor.Range("RaporToplam").Value) > 0.005 Then
            KayitYaz kayit, hafta, bolge, "UYARI: rapor toplami veriyle tutmuyor, PDF yok"
        Else
            rapor.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=klasor & bolge & "_Hafta-" & hafta & ".pdf"
            KayitYaz kayit, hafta, bolge, "tamam"
            adet = adet + 1
        End If
    Next i

Bitis:
    Application.ScreenUpdating = True
    If hataMetni = "" Then
        MsgBox adet & " PDF uretildi. Ayrinti: Kayit sayfasi.", vbInformation
    Else
        MsgBox "Islem durdu: " & hataMetni & vbCrLf & adet & " PDF uretildi.", vbCritical
    End If
    Exit Sub

Hata:
    hataMetni = Err.Description
    If Not kayit Is Nothing Then KayitYaz kayit, hafta, bolge, "HATA " & Err.Number & ": " & hataMetni
    Resume Bitis
End Sub

Private Sub KayitYaz(ws As Worksheet, hafta As String, bolge As String, durum As String)
    Dim r As Long
    r = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
    ws.Cells(r, 1).Value = Now
    ws.Cells(r, 2).Value = Application.UserName
    ws.Cells(r, 3).Value = hafta
    ws.Cells(r, 4).Value = bolge
    ws.Cells(r, 5).Value = durum
End Sub
```

Kodun beş ölçütle bağı:

1. **`Option Explicit` ve baştaki açıklama satırları:** yanlış yazılmış değişken adı kod çalışmadan yakalanır, açıklama da kodun hangi sayfa ve hücre adlarına bağlı olduğunu söyler.
2. **`On Error GoTo Hata`, `Hata` ve `Bitis` (ölçüt 2):** sayfa adlarını okumak dahil her hata Hata bölümüne gider, kayda yazılır. Bitis ekranı geri açar ve hata varsa “Islem durdu” der, “tamamlandı” demez.
3. **Klasör kontrolü (ölçüt 2 ve 5):** yol Ayarlar’dan okunur. Sondaki ters bölü kontrolden önce atılır, klasör yoksa hiçbir şey üretilmez, sonra ters bölü eklenir.
4. **Döküm kontrolü (ölçüt 1):** B1 ve F1 başlıkları beklenen ad değilse, son dolu satır TOPLAM değilse ya da satır sayısı ERP’ninkiyle tutmuyorsa makro durur ve nedenini yazar. Sütun kaymasını ve eksik yapıştırmayı yakalayan kısım bu.
5. **`sonVeri` (ölçüt 1):** son veri satırı her çalışmada bulunur. Döküm 4.870 ya da 5.130 satır olsun, aralık doğru kurulur.
6. **`MsgBox ... vbYesNo` (ölçüt 3):** kaç PDF üretileceğini ve işlemin geri alınamayacağını söyler. “Hayır” denirse hiçbir şey değişmez.
7. **`For` döngüsü, `SeciliBolge` ve `Calculate` (ölçüt 5):** bölge listesi Ayarlar’dan gelir. Liste 14 satıra çıksa da kod değişmez.
8. **`SumIfs` ve `Abs(...) > 0.005`:** bölgenin toplamı şablondan bağımsız hesaplanır, kuruşu aşan farkta PDF üretilmez. B12’yi yakalayan satır bu.
9. **`ExportAsFixedFormat` ve `KayitYaz` (ölçüt 4):** PDF adı bölge listesinden geldiği için yanlış ada kaydetme ortadan kalkar. Her bölgenin sonucu zaman ve Excel’deki kullanıcı adıyla kayda düşer. Bu ad Excel seçeneklerindeki addır, kimlik doğrulaması değildir.

Makroyu bir düğmeye bağlamak için Ekle sekmesinden bir şekil koyup sağ tıklayarak “Makro Ata” demek yeter.

## Makro güvenliği: .xlsm, engelleme, güvenilir konum ve dijital imza

Makrolu dosyayı ekibe dağıtmadan önce biçimi, internetten gelen dosyadaki engellemeyi, güvenilir konumu ve imzayı çözün.

**Dosya biçimi .xlsm olmalı.** Microsoft’a göre .xlsx biçimi VBA makro kodunu saklayamıyor. Makrolu kitap .xlsm (Makro İçerebilen Excel Çalışma Kitabı) olarak kaydedilir ([Microsoft Destek](https://support.microsoft.com/en-us/office/file-formats-that-are-supported-in-excel-0943ff2c-6014-4e8d-aaea-b83d51d46247)). Biri dosyayı .xlsx olarak “temiz” kaydederse kod gider.

**İnternetten gelen dosyada makro engellenir.** Microsoft, Windows’ta internetten indirilen ya da e-posta ekiyle gelen dosyalardaki makroları varsayılan olarak engelliyor. Değişiklik Current Channel’da 2206 sürümüyle 27 Temmuz 2022’de yayılmaya başladı. Kullanıcı “İçeriği etkinleştir” düğmesi olmayan bir güvenlik riski şeridi görüyor. Mac, Android, iOS ve web sürümü bu değişiklikten etkilenmiyor. Ağ paylaşımı IP adresiyle açılıyorsa ve paylaşım yerel intranet ya da güvenilen siteler bölgesinde değilse oradaki dosyada da makro engellenir ([Microsoft Learn](https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked)).

Aynı sayfaya göre tek bir dosyada engeli kaldırmanın yolu dosyaya sağ tıklayıp Özellikler’de “Engellemeyi kaldır” kutusunu işaretlemek. OneDrive ya da SharePoint’teki dosyayı “Masaüstü uygulamasında aç” ile açmak da işaretin hiç oluşmamasını sağlıyor. Makrolu dosyayı e-postayla dolaştırmak yerine herkesin açtığı tek bir konumda tutun.

**“İçeriği etkinleştir” şeridi çıkınca ne yapılır?** İnternetten gelmeyen makrolu dosyada makrolar varsayılan ayarla kapalı açılır ve şeritte bu düğme görünür ([Microsoft Learn](https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked)). Microsoft’un uyarısı açık: makroların ne yaptığını bildiğinizden emin değilseniz etkinleştirmeyin; dosyayı görmek ya da düzenlemek için gerekmez ([Microsoft Destek](https://support.microsoft.com/en-us/office/enable-or-disable-macros-in-microsoft-365-files-12b036fd-d140-4e74-b45e-16fed1a7e5c6)).

**Güvenilir konum.** Güvenilen konuma konan dosyalara Güven Merkezi’nin bazı güvenlik denetimleri uygulanmaz. Dosya > Seçenekler > Güven Merkezi > Güven Merkezi Ayarları > Güvenilen Konumlar yolundan eklenir ([Microsoft Destek](https://support.microsoft.com/en-us/office/add-remove-or-change-a-trusted-location-in-microsoft-office-7ee1cdc2-483e-4cbb-bcb3-4e7c67147fb4)). Microsoft güvenilen konumların dikkatle yönetilmesini ve az kullanılmasını istiyor, ağ konumunu güvenilen konum yapmayı önermiyor ([Microsoft Learn](https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked)). Önerim, güvenilen konumu yalnız makroyu kullanan kişinin bilgisayarında tek bir klasör olarak açmak ve o klasöre kimin dosya koyabildiğini bilmek.

**Dijital imza.** İmza, projenin imzalandıktan sonra değiştirilmediğini gösteriyor. Microsoft’a göre kendi oluşturduğunuz (SelfCert) sertifika yalnız kendi bilgisayarınızda test için uygun. İmzalı projede kod değişirse imza kalkıyor ([Microsoft Destek](https://support.microsoft.com/en-us/office/digitally-sign-your-macro-project-956e9cc8-bbf6-4365-8bfa-98505ecd1c01)). Microsoft’un kurumsal güvenlik temeli, makro kullananlar için “dijital olarak imzalananlar dışındaki bütün makroları devre dışı bırak” ayarını ve güvenilen yayımcı şartını öneriyor ([Microsoft Learn](https://learn.microsoft.com/en-us/microsoft-365-apps/security/internet-macros-blocked)). Şirketinizde bu ayar varsa, düzenlenen makro şirketin sertifikasıyla yeniden imzalanmadan diğer bilgisayarlarda çalışmayabilir. BT ekibinize “makro ayarımız ne, sertifika kimde” diye sorun.

**Yaptırdığınız makronun kötü bir şey yapmadığını nasıl anlarsınız?** Önerim iki ölçüt: parolayla kilitli makroyu teslim almayın, kodu başka biri okuyabilsin. Makro dosya siliyor, başka dosya açıyor ya da dış adrese bağlanıyorsa nedeni yazılı açıklanmış olsun. Yukarıdaki örnek kod yalnız PDF yazıyor ve kendi kitabına kayıt düşüyor.

## Makro nerede duruyor: dosyada mı, bilgisayarda mı?

Makroyu kaydederken seçtiğiniz yer, dosyanın başka bir bilgisayarda çalışıp çalışmayacağını etkiler. İş akışının kodunu tek bir çalışanın bilgisayarına bırakmadan bu ayrımı yapın.

| Konum | Uygun olduğu iş | Devirde kontrol edilecek |
| --- | --- | --- |
| Bu Çalışma Kitabı, `.xlsm` | Belirli rapora veya şablona bağlı kod | Kod dosyayla gider; farklı kopyaların sürümleri ayrışabilir |
| Kişisel Makro Çalışma Kitabı, `Personal.xlsb` | Kişinin kendi biçimlendirme ve temizlik işleri | Raporu göndermek kişisel makroyu göndermez |
| Excel eklentisi, `.xlam` | Aynı işlevin birçok dosyada ve ekipte kullanılması | Kurulum, güvenlik, sürüm ve güncelleme yöntemi ayrıca yönetilir |

[Microsoft’un kişisel makro çalışma kitabı belgesi](https://support.microsoft.com/en-us/excel/copy-your-macros-to-a-personal-macro-workbook), `Personal.xlsb` dosyasının bilgisayarda tutulduğunu ve XLStart üzerinden Excel’le açıldığını açıklar. Paylaşım için dosya veya modülün diğer bilgisayara aktarılması gerekir. Ortak bir klasöre kopyalamak, bütün açık Excel oturumlarının yeni kodu anında yüklediğini kanıtlamaz; yeniden açma ve sürüm kontrolü yapılmalıdır.

**Elinizdeki makroyu bulun.** Geliştirici → Makrolar listesinde `PERSONAL.XLSB!` öneki kişisel dosyayı işaret eder. Windows’ta Alt+F11 ile Visual Basic Düzenleyicisi’ni açıp ilgili modülü hedef çalışma kitabına kopyalayabilir, kitabı `.xlsm` olarak kaydedebilirsiniz. Kaynak ve hedefin kopyasında deneyin; sayfa adları, dosya yolları ve düğme bağlantıları da kontrol edilmelidir.

**Kayıt modu da taşınabilirliği etkiler.** Mutlak başvurulu bir kayıt aynı hücre adreslerine gider; göreli başvuru etkinse başlangıç seçimine göre hareket eder. Değişen satır sayılı bir raporda yalnız kaydedilmiş adımlara güvenmem. Son dolu satır, gerekli başlıklar ve hedef alan kodda kontrol edilir. Ekip makrosunu teslim ederken doğru dosyayı açmak kadar doğru kod sürümünü açmak da kabul koşuludur.

## Makro devredilirken ne yazılı olmalı, bakımı kim yapar?

Makro ilk değişiklik gerektiğinde sınanır. Devirde yazılı olmasını önerdiğim içerik:

- **Kitabın içinde bir “Nasıl çalışır” sayfası.** Döküm nereden gelir, hangi sayfa ne işe yarar, Ayarlar’da hangi hücre neyi değiştirir, kayıtta “UYARI” görülürse ilk neye bakılır.
- **Kodun dışında bir kopya.** Makro kodu .xlsm dosyanızın içinde durur. Kaynak kodun tamamı ayrıca sizin erişiminizdeki bir depoda, çalıştırma talimatı ve bilinen sınırlar listesiyle durur. Dosya bozulursa ya da biri .xlsx kaydederse kod kaybolmaz.
- **Bir sahip ve bakım.** Bölge eklemek ya da klasör değiştirmek kod bilgisi istemiyor; bunu Excel’i iyi kullanan biri Ayarlar sayfasından yapabilir. Kodun kendisini kimin değiştireceği ve imzalı makroda kimin yeniden imzalayacağı baştan belli olmalı.

**Excel sürümü değişince ne olur?** Üç durum makroyu bozabilir:

- **64 bit Office.** Office 2019 ve Microsoft 365’te varsayılan kurulum 64 bit; Windows işlevlerini çağıran eski `Declare` satırları `PtrSafe` ve 64 bit veri türleri olmadan hata veriyor ([Microsoft Learn](https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/64-bit-visual-basic-for-applications-overview)). Örnek kodda `Declare` yok; devraldığınız eski makroda önce bu satırları arayın.
- **VBScript’in kaldırılması.** Microsoft’un Eylül 2025 duyurusuna göre VBScript Windows’ta 2026 ya da 2027 civarında varsayılan olarak kapanacak, tarihi belirlenmemiş sonraki aşamada makrodan .vbs çağırmak ve VBScript RegExp kitaplığına başvurmak Office güncellenmedikçe çalışmayacak ([Microsoft 365 Developer Blog](https://devblogs.microsoft.com/microsoft365dev/how-to-prepare-vba-projects-for-vbscript-deprecation/), takvim Ekim 2026 itibarıyla).
- **Dosyanın web’e ya da Teams’e taşınması.** Ekip dosyayı tarayıcıda açmaya başlarsa düğme işe yaramaz. Bu, Office Script ya da uygulama düşünmenin işaretidir.

## Makrodan çok kullanıcılı uygulamaya ne zaman geçilir?

Makrodan çok kullanıcılı, rol ve yetki tabanlı bir uygulamaya, aynı veriye birden çok kişi girmeye ya da onay vermeye başladığında geçilir. İş yalnız rapor dağıtmaksa makroda kalın.

Örnek dağıtıcıda makro işini yapıyor: 12 PDF, 13 kontrol, bir kayıt sayfası. Bir gün bölge müdürleri rapordaki rakama itiraz edip kendi düzeltmelerini girmek istiyor. Excel’de yolu 12 kopya gönderip 12 dosya toplamak. Makro bunları birleştirir ama şunları cevaplayamaz:

- B07’nin müdürü yalnız kendi bölgesini mi gördü, yoksa dosyada diğer 11 bölge de var mıydı?
- B03’teki düzeltmeyi kim, ne zaman, hangi gerekçeyle girdi? İki kişi aynı satırı farklı değiştirdiyse hangisi geçerli?
- Onaydan sonra rakam değişti mi?

Dört işarete bakın: birden çok kişi aynı veriye giriyor ya da onay veriyor, herkes yalnız kendi kısmını görmeli, kimin neyi değiştirdiği kayıtlı olmalı, iş tarayıcıdan ya da telefondan yapılacak. İkisi ya da daha fazlası varsa uygulamayı ciddi olarak tartın. Yalnız biri varsa önce Excel’de sıkılaştırın: tek konumda duran tek dosya, kayıt sayfası, düzeltmeler için ayrı bir sayfa; birkaç ay sonra yeniden bakın. Hiçbiri yoksa uygulama yaptırmanızı önermem.

Geçiş gerekiyorsa makronun kuralları kaybolmaz: toplam kontrolü, bölge listesi ve PDF şablonu uygulamanın iş kuralları olur, ay sonunda biri dosyayı kontrol ederken değil, veri girilirken uygulanır. Rol, yetki, iz kaydı, sunucu ve verinin kimde durduğunu [ekibinize özel web uygulamaları sayfasında](https://oguzerol.com/ekibiniz-icin-ozel-web-uygulamalari/) anlattım.

## Nasıl başlanır?

Önce tekrar eden Excel işlerinizi ve her birinin haftalık süresini bir liste hâlinde çıkarın. Otomasyon projelerinde en sık gördüğüm hata, ilk otomasyonu en karmaşık süreçten seçmek. Örnek dağıtıcıda ilk iş itiraz ve onay akışı değil, 12 bölgenin PDF’iydi: tek kişinin işi, kuralı belli, sonucu ertesi pazartesi görülüyor.

Süre ve fiyat kapsama bağlı, burada rakam vermiyorum; kapsam ilk adımda yazılı belirlenir. Belirlenenler: rapor ve bölge sayısı, kaynak dosyanın biçimi, imza şartı ve çalıştırma kaydının istenip istenmediği.

Elle yaptığınız adımları sırasıyla yazıp örnek bir dosyayla birlikte [iletişim sayfasından](https://oguzerol.com/iletisim/) gönderin.

## Sıkça Sorulan Sorular

### Makroyu kendim kaydedebilir ya da yapay zekâya yazdırabilir miyim?

Evet, tek kişinin küçük ve sabit bir işinde çoğu zaman yeter. Microsoft’a göre Makro Kaydedici neredeyse her hareketinizi VBA koduna yazıyor, istemeden yaptığınız adımlar da kayda giriyor ([Microsoft Destek](https://support.microsoft.com/en-us/office/automate-tasks-with-the-macro-recorder-974ef220-f716-4e01-b015-3ea70e64937b)); kod kayıt günündeki satır sayısını ve sütun sırasını ezberler. Yapay zekâya yazdırdığınız kodu da yukarıdaki beş ölçütle okuyun: sabit aralık var mı, hata yönetimi var mı, kayıt tutuyor mu. Yapay zekâdan Excel’de nasıl doğru sonuç alınacağını [ChatGPT ile Excel rehberinde](https://oguzerol.com/chatgpt-ile-excel/) test tablosuyla anlattım. Birden çok kişinin kullanacağı ya da veriyi değiştiren makroda kodu bilen birine okutmanızı öneririm.

Ekip kullanacak ve kod o dosyaya bağlıysa kayıt sırasında “Bu Çalışma Kitabı”nı seçin; çok dosyada ortak kullanım için yukarıdaki eklenti ve kişisel dosya ayrımına bakın.

### Makro Mac’te, Excel’in web sürümünde ve telefonda çalışır mı?

Microsoft’un tablosuna göre VBA makroları Windows ve Mac’teki Excel’de çalışıyor, web ve iOS’ta çalışmıyor ([Microsoft Learn](https://learn.microsoft.com/en-us/office/dev/scripts/resources/vba-differences)). Güvenlik bölümündeki internetten gelen dosya engellemesi Mac’i etkilemiyor. Mac’te çalışacaksa bunu baştan söyleyin. Yukarıdaki örnekte klasör yolu ters bölüyle kuruluyor, örnek kodu Mac’te denemedim.

### Makro yaptırmak için gerçek verimi göndermem gerekir mi?

Örnek bir dosyayla başlanabilir. Önerim, aynı sütun ve sayfa yapısında birkaç satır göndermeniz; tutar ve adları değiştirebilirsiniz. Son denemenin kendi dosyanızın bir kopyasında yapılmasını öneririm.

[Başa dön ↑](https://oguzerol.com/excel-makro-vba/#icerik)

## Bunları da okumak ister misiniz?

[Excel Otomasyonu: Hangi İş Formülle, Power Query'yle, Makroyla ya da Web Uygulamasıyla Çözülür?Tekrar eden Excel işini formül, Power Query, makro, Office Script ya da web uygulamasından hangisiyle çözersiniz? Dört soruluk karar tablosu ve örnek ay.](https://oguzerol.com/excel-otomasyonu/)[ChatGPT ile Excel: Formül Yazdırma, Hata Kontrolü ve AnalizChatGPT'ye Excel formülü yazdırırken istemi nasıl kurarsınız, ayırıcı ve boş hücre hatalarını nasıl yakalarsınız? Betikle doğrulanmış dört örnek.](https://oguzerol.com/chatgpt-ile-excel/)[Excel Çoklu Seçim Açılır Liste: VBA Kodu ve AlternatiflerExcel açılır listede birden fazla seçim: doğrulama neden tek değer seçtirir, kopyalanabilir VBA kodu, makrosuz ayrı satır yöntemi ve karar tablosu.](https://oguzerol.com/excel-coklu-secim-acilir-liste/)

[Tüm yazılara göz atın →](https://oguzerol.com/yazilarim/)
