Excel'de VBA ile Sayfa Yönetiminin Otomasyonu

Kerem Aydın·8 Temmuz 2026·⏱3 dk

Excel'de sayfalarla çalışmak için makro oluşturmak, rutin görevleri otomatikleştirmenizi sağlar: istenen adlarla yeni sekmeler anında oluşturma, aralarında veri kopyalama, boş sayfaları silme veya çok sayıda kaynaktan özet raporlar toplama. Çalışmaya başlamak için şerit ayarlarında "Geliştirici" sekmesini etkinleştirmeniz, VBA düzenleyicisini açmak için Alt + F11 tuşlarına basmanız ve hazır kodu yeni bir modüle yapıştırmanız gerekir.

Ortamın Hazırlanması ve Temel Prensipler

Kod yazmaya başlamadan önce, geliştirici araçlarına erişiminiz olduğundan emin olun.

  1. Dosya > Seçenekler > Şeridi Özelleştir yolunu izleyin.
  2. Geliştirici seçeneğini işaretleyin.
  3. Görünen sekmede Visual Basic düğmesine tıklayın (veya Alt + F11 kısayol tuşlarını kullanın).
  4. Düzenleyici penceresinde kod için temiz bir alan oluşturmak üzere Insert > Module seçeneğini belirleyin.

Önemli: Makro içeren dosyaları Makro Etkin Excel Çalışma Kitabı (.xlsm) formatında kaydetmeniz gerekir. Standart format (.xlsx) kodunuzu kaydetmez.

Sayfalarla Temel İşlemler: Hazır Çözümler

Aşağıda en sık karşılaşılan görevler için test edilmiş betikler verilmiştir. Bunları doğrudan modüle kopyalayabilirsiniz.

Benzersiz Adla Sayfa Oluşturma

Bu makro, geçerli tarihle yeni bir sayfa oluşturur. Böyle adlı bir sayfa zaten varsa, kopya hatasını önlemek için sayısal bir sonek ekler.

Sub CreateDatedSheet()
    Dim baseName As String
    Dim i As Integer
    Dim newName As String
    
    baseName = Format(Date, "yyyy-mm-dd")
    newName = baseName
    i = 1
    
    ' Sayfanın var olup olmadığını kontrol et
    Do While SheetExists(newName)
        newName = baseName & " (" & i & ")"
        i = i + 1
    Loop
    
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = newName
    MsgBox "Sayfa '" & newName & "' başarıyla oluşturuldu."
End Sub

' Yardımcı varlık kontrol fonksiyonu
Function SheetExists(sName As String) As Boolean
    On Error Resume Next
    SheetExists = Not Sheets(sName) Is Nothing
    On Error GoTo 0
End Function

Sayfalar Arası Veri Kopyalama

Betik, verileri "Kaynak" sayfasından "Hedef" sayfasına taşır. Kod içindeki sayfa adlarının, çalışma kitabınızdaki adlarla tam olarak eşleşmesi gerektiğini unutmayın.

Sub CopyDataBetweenSheets()
    Dim src As Worksheet
    Dim dst As Worksheet
    
    On Error Resume Next
    Set src = Sheets("Kaynak")
    Set dst = Sheets("Hedef")
    On Error GoTo 0
    
    If src Is Nothing Or dst Is Nothing Then
        MsgBox "Belirtilen sayfalardan biri bulunamadı!"
        Exit Sub
    End If
    
    ' A1:D100 aralığını kopyala
    src.Range("A1:D100").Copy Destination:=dst.Range("A1")
    MsgBox "Veriler kopyalandı."
End Sub

Boş Sayfaları Silme

Çalışma kitabını kullanılmayan sekmelerden otomatik olarak temizler. Makro, önemli bir yapıyı yanlışlıkla silmemek için ilk sayfayı (genellikle ana rapor) atlar.

Sub DeleteEmptySheets()
    Dim ws As Worksheet
    Application.DisplayAlerts = False ' Silme onaylarını devre dışı bırak
    
    For Each ws In ThisWorkbook.Worksheets
        ' En az bir dolu hücre olup olmadığını kontrol et
        If Application.WorksheetFunction.CountA(ws.Cells) = 0 Then
            If ws.Name <> ActiveWorkbook.Sheets(1).Name Then
                ws.Delete
            End If
        End If
    Next ws
    
    Application.DisplayAlerts = True ' Onayları geri yükle
    MsgBox "Temizleme tamamlandı."
End Sub

Silme işlemine dikkat: Bir makro aracılığıyla sayfa silme işlemi, standart "Geri Al" (Ctrl+Z) düğmesiyle geri alınamaz. Toplu silme betiklerini çalıştırmadan önce her zaman dosyanın yedeğini alın.

Gelişmiş Teknikler: Veri Konsolidasyonu

Çalışma kitabındaki tüm sayfalardaki verileri tek bir nihai raporda toplamak istiyorsanız, döngü yinelemesini kullanın. Bu makro "Özet" sayfasını oluşturur, temizler ve diğer tüm sekmelerden verileri sırayla kopyalar.

Sub ConsolidateAllSheets()
    Dim ws As Worksheet
    Dim summary As Worksheet
    Dim nextRow As Long
    
    ' Özet sayfasını oluştur veya temizle
    On Error Resume Next
    Set summary = Sheets("Özet")
    If summary Is Nothing Then
        Set summary = Sheets.Add(Before:=Sheets(1))
        summary.Name = "Özet"
    Else
        summary.Cells.Clear
    End If
    On Error GoTo 0
    
    nextRow = 1
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> summary.Name Then
            ' Kullanılan alanı kopyala
            ws.UsedRange.Copy Destination:=summary.Cells(nextRow, 1)
            nextRow = nextRow + ws.UsedRange.Rows.Count
        End If
    Next ws
    
    MsgBox "Özet rapor oluşturuldu."
End Sub

Hata İşleme ve Güvenlik

Güvenilir bir makro, olası arızaları öngörmelidir. On Error Resume Next yapısını yalnızca belirli kod bölümleri için kullanın (örneğin, bir nesnenin varlığını kontrol ederken) ve hemen ardından hata işlemeyi standart moda geri döndürün (On Error GoTo 0).

Arayüzde istenmeyen değişikliklere karşı korunmak için makronun başında Application.ScreenUpdating = False ve sonunda True kullanın. Bu, Excel'in her işlemden sonra ekranı yeniden çizmemesini sağlayarak kodun yürütülmesini de hızlandırır.

Sık Karşılaşılan Hatalar

  • "Ad zaten mevcut" hatası: Bir sayfayı, adı zaten kullanılan bir ada yeniden adlandırmaya çalıştığınızda ortaya çıkar. Ad atamadan önce her zaman varlık kontrol fonksiyonunu kullanın.
  • Yanlış sayfa adı: Kod, büyük/küçük harfe ve boşluklara duyarlıdır. "Sayfa1" ve "sayfa 1" farklı adlardır. Çalışma kitabı yapısı dinamikse, kodlanmış adlar veya indeksler kullanmak daha iyidir.
  • Sayfa koruması: Makro, korumalı bir sayfayı değiştiremez. Korumanın programlı olarak kaldırılması gerekir: ws.Unprotect Password:="şifreniz".

SSS

Oluşturulan makro nasıl çalıştırılır? Excel'e dönün, "Geliştirici" sekmesine gidin, "Makrolar" düğmesine tıklayın, listeden prosedür adını seçin ve "Çalıştır" düğmesine basın. Alternatif olarak, makroyu bir düğmeye veya klavye kısayoluna atayabilirsiniz.

Makro eylemi geri alınabilir mi? Hayır, çoğu makro eylemi (özellikle sayfa silme veya içerik temizleme) Excel'in standart geri alma geçmişi üzerinden geri alınamaz. İşlem kritikse, yedek kopya kaydetme mantığını makronun içine uygulayın.

Neden makro başka bir bilgisayarda çalışmıyor? Hedef bilgisayarda Güvenlik Merkezi'nde makro desteğinin etkin olduğundan emin olun. Ayrıca, koddaki sayfa adlarının diğer PC'deki gerçek çalışma kitabı yapısıyla eşleştiğini kontrol edin.