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.
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.
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.
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:
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
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.
Ç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
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.
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
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.
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
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.
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:
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!