Ek Bölüm: Otomasyon

Temel Düzeyde VBA (Makro) ile Otomasyon

Veri analizi yaparken çoğu zaman Excel’in sunduğu araçlar yeterli olacaktır. Ancak bazı durumlarda tekrarlayan işlemleri hızlandırmak veya Excel’in sınırlarını aşmak için VBA (Visual Basic for Applications) ile makro yazmak gerekebilir. Bu ek bölümde, kodlama deneyimi olmayanlar için bile anlaşılabilir şekilde temel makro kavramlarına değineceğiz.

Makro Nedir?

Kısaca, Excel’de yaptığınız işlemleri kaydedip tek bir komutla tekrar etmeyi sağlayan bir programcıktır. Excel’in Makro Kaydedici (Macro Recorder) özelliği, yaptığınız tıklamaları, girilen değerleri vb. Visual Basic kodu olarak kaydeder ve bunu çalıştırdığınızda aynı adımları otomatik uygular.

Neden Kullanmalı?

Her ay gelen bir ham veriyi temizleyip rapor formatına getirmek için 10 adım uyguluyorsanız, bunları bir makroya kaydedip her ay tek tuşla yapabilirsiniz. Makrolar, rutin işleri otomatikleştirerek zamandan tasarruf sağlar ve insan kaynaklı hataları azaltır.

Analistler İçin Pratik VBA Kod Örnekleri

Makro Kaydedici harika bir başlangıç noktasıdır, ancak bazen kodu elle yazmak daha esnek çözümler sunar. İşte bir veri analistinin işini kolaylaştıracak birkaç temel VBA kodu örneği:

Örnek 1: Tüm Pivot Tabloları Güncelle

Dosyanızda birden fazla Pivot Table varsa, hepsini tek tek yenilemek yerine bu makroyu çalıştırabilirsiniz.

Sub TumPivotlariYenile()
    ' Bu makro, çalışma kitabındaki tüm PivotTable'ları günceller.
    Dim ws As Worksheet
    Dim pt As PivotTable

    Application.ScreenUpdating = False ' Ekran titremesini önle
    
    For Each ws In ThisWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.RefreshTable
        Next pt
    Next ws
    
    Application.ScreenUpdating = True
    MsgBox "Tüm Pivot Tablolar güncellendi!"
End Sub

Nasıl Kullanılır?

Bu kodu VBA editöründe bir modüle yapıştırın. Alt + F8 tuşlarına basıp açılan pencereden "TumPivotlariYenile" makrosunu seçin ve "Çalıştır"a tıklayın. Makro bittiğinde bir onay mesajı alacaksınız.

Örnek 2: Çalışma Sayfaları İçin Dizin Oluştur

Çok sayıda sayfanız varsa, bu makro ilk sayfaya tüm sayfa adlarını listeler ve onlara birer köprü (link) oluşturur.

Sub SayfaDiziniOlustur()
    ' İlk sayfaya diğer tüm sayfaların linkli bir listesini oluşturur.
    Dim ws As Worksheet
    Dim i As Integer
    i = 1

    Sheets(1).Cells.Clear ' İlk sayfayı temizle
    Sheets(1).Cells(i, 1).Value = "Sayfa Dizini"
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> Sheets(1).Name Then
            i = i + 1
            Sheets(1).Hyperlinks.Add Anchor:=Sheets(1).Cells(i, 1), _
                                Address:="", _
                                SubAddress:="'" & ws.Name & "'!A1", _
                                TextToDisplay:=ws.Name
        End If
    Next ws
End Sub

Nasıl Kullanılır?

Kodu bir modüle yapıştırın ve çalıştırın. Uyarı: Bu makro, kitabınızın en başındaki (ilk sıradaki) sayfanın tüm içeriğini silerek yerine sayfa listesini oluşturur. Önemli bir sayfanın ilk sırada olmadığından emin olun.

Örnek 3: Filtrelenmiş Veriyi Kopyala

Bir tablodaki veriyi belirli bir kritere göre filtreler ve sadece görünür olan sonuçları yeni bir sayfaya kopyalar.

Sub ElektronikSatislariniKopyala()
    ' "Veri" sayfasındaki tabloyu filtreler ve sonucu yeni sayfaya kopyalar.
    Dim wsVeri As Worksheet, wsRapor As Worksheet
    Set wsVeri = ThisWorkbook.Sheets("Veri")
    Set wsRapor = ThisWorkbook.Sheets.Add
    wsRapor.Name = "Elektronik Raporu"

    wsVeri.AutoFilterMode = False ' Önceki filtreleri temizle
    
    ' 3. sütuna göre "Elektronik" filtresi uygula
    wsVeri.Range("A1").AutoFilter Field:=3, Criteria1:="Elektronik"
    
    ' Filtrelenmiş veriyi kopyala
    wsVeri.UsedRange.SpecialCells(xlCellTypeVisible).Copy wsRapor.Range("A1")
    
    wsVeri.AutoFilterMode = False
    wsRapor.Columns.AutoFit
End Sub

Nasıl Kullanılır?

Bu makroyu çalıştırmadan önce, dosyanızda tam olarak "Veri" adında bir sayfa olduğundan ve bu sayfadaki tablonun başlıklarının 1. satırda yer aldığından emin olun. Makro, "Elektronik Raporu" adında yeni bir sayfa oluşturup sonuçları oraya yapıştıracaktır.

Örnek 4: Kendi Özel Fonksiyonunu Yazmak (UDF)

Excel'de olmayan bir fonksiyona mı ihtiyacınız var? VBA ile kendi fonksiyonunuzu (User-Defined Function) yazıp normal bir formül gibi kullanabilirsiniz.

Function TRtoEN(text As String) As String
    ' Bu fonksiyon, Türkçe karakterleri İngilizce karşılıkları ile değiştirir.
    Dim FindChars As Variant, ReplaceChars As Variant, i As Integer
    
    FindChars = Array("ç", "ğ", "ı", "ö", "ş", "ü", "Ç", "Ğ", "İ", "Ö", "Ş", "Ü")
    ReplaceChars = Array("c", "g", "i", "o", "s", "u", "C", "G", "I", "O", "S", "U")
    
    TRtoEN = text
    For i = LBound(FindChars) To UBound(FindChars)
        TRtoEN = Replace(TRtoEN, FindChars(i), ReplaceChars(i))
    Next i
End Function

Nasıl Kullanılır?

Bu kodu bir VBA modülüne yapıştırdıktan sonra, herhangi bir Excel hücresine =TRtoEN(A1) yazarak A1 hücresindeki "Şelâle" metnini "Selale" olarak çevirebilirsiniz. Artık bu, Excel'in yerleşik bir formülü gibi çalışır.


Yolculuğun Sonu: Neler Öğrendik?

Bu yolculuğun sonuna geldik. Buraya kadar, bir veri analistinin Excel’de ustalaşması için gereken hemen her konuya değinmeye çalıştık:

  • Excel arayüzünün doğru ayarlarından ve temiz veri yapılarından,
  • Temel veri düzenleme tekniklerine (sıralama, filtreleme),
  • En çok kullanılan formül ve fonksiyonların interaktif uygulamalarından,
  • Pivot Table ve Grafiklerle veriyi anlamlı hikayelere dönüştürmeye,
  • Ve yapılan yaygın hatalara kadar geniş bir yelpazeyi örneklerle ele aldık.

Artık elinizin altında, “Excel’de şunu nasıl yaparım?” diye düşündüğünüzde başvurabileceğiniz kapsamlı bir kaynak var. Unutmayın, öğrendikçe uygulayın; her bölümdeki örnekleri kendiniz deneyin ve kendi verilerinizle pratik yapın. Excel’in derinliklerine indikçe, aslında ne kadar çok şeyi mümkün kıldığını göreceksiniz.

Keyifli analizler!