VBA Başlangıç — İlk Makronuzu Yazma

VBA Nedir

VBA (Visual Basic for Applications); Excel başta olmak üzere Office uygulamalarına gömülü çalışan programlama dilidir. Makro Kaydet özelliği size hızlı bir başlangıç sunsa da gerçek esnekliğe yalnızca VBA kodu yazarak ulaşırsınız. Döngüler, koşullu yapılar, kullanıcı formları ve harici sistemlerle iletişim hep VBA dünyasında olur. Bu yazıda kod editörünü tanıyacak, ilk modülünüzü açacak ve tek satır da olsa kendiniz kod yazacaksınız.

VBA Editörünü Açma

Geliştirici menüsünden Visual Basic düğmesine basın ya da Alt + F11 kısayolunu kullanın. Açılan pencere; Office için ayrı bir uygulamadır. Solda Proje Gezgini panelinde dosyanız ve sayfaları görünür. Üstte Standart Araç Çubuğu, ortada büyük Kod penceresi vardır. İlk başta yabancı görünebilir; iki gün sonra alıştığınızda daha az yer kaplayan bir Excel hissi verir.

İlk Modül — Yeni Sayfa

Sol taraftaki Proje Gezgini panelinde dosyanıza sağ tıklayın, Ekle altından Modül seçeneğine basın. Yeni boş bir kod sayfası açılır; ismi varsayılan olarak Module1 gelir. Burası VBA kodlarınızı yazacağınız yerdir. Standart bir prosedür şu yapıdadır:

Sub MerhabaDunya()
    MsgBox "Merhaba Dünya"
End Sub

İmleci prosedürün herhangi bir yerine getirip F5 tuşuna basın. Excel; küçük bir mesaj kutusu çıkarır. İlk programınız çalıştı.

Hücreye Yazma

Sub HucreyeYaz()
    Range("A1").Value = "Selam"
    Range("A2").Value = 2026
End Sub

Bu prosedür A1 hücresine bir metin, A2 hücresine bir sayı yazar. Range nesnesi; hücre ya da aralık temsil eder. Value özelliği; o aralığın değerini okur ya da yazar.

Değişkenler ve Veri Tipleri

Sub DegiskenÖrnek()
    Dim ad As String
    Dim yas As Integer
    ad = "Ahmet"
    yas = 35
    MsgBox ad & " " & yas & " yaşında"
End Sub

Dim komutu; bir değişken tanımlar. String metin, Integer tam sayı, Double ondalık, Date tarih için kullanılır. Modülün başına Option Explicit yazarsanız tüm değişkenleri tanımlamayı zorunlu kılar; yazım hatalarını yakalamak için kritiktir.

Koşullu Yapı — If

Sub KosulÖrnek()
    Dim sayı As Integer
    sayı = Range("A1").Value
    If sayı > 0 Then
        MsgBox "Pozitif"
    ElseIf sayı = 0 Then
        MsgBox "Sıfır"
    Else
        MsgBox "Negatif"
    End If
End Sub

Klasik Excel EĞER fonksiyonunun VBA karşılığıdır. Birden fazla koşul için Select Case de kullanılabilir.

Döngü — For

Sub DonguÖrnek()
    Dim i As Long
    For i = 1 To 10
        Cells(i, 1).Value = i * i
    Next i
End Sub

Bu prosedür A1'den A10'a kadar olan hücrelere 1, 4, 9, 16, ..., 100 değerlerini yazar. Cells(satır, sütun) ifadesi; sayısal indislerle hücreye erişir. Döngü içinde son derece kullanışlıdır.

Aralık Üzerinde Döngü

Sub HerHucre()
    Dim hücre As Range
    For Each hücre In Range("A1:A10")
        If hücre.Value < 0 Then
            hücre.Interior.Color = vbRed
        End If
    Next hücre
End Sub

Negatif değerli hücreleri kırmızıya boyar. For Each döngüsü koleksiyonun her elemanı üzerinde gezer; kod daha okunur olur.

Hata Yönetimi

Sub HataYonetimi()
    Ön Error Resume Next
    Dim sonuç As Double
    sonuç = 10 / Range("A1").Value
    If Err.Number <> 0 Then
        MsgBox "Hata: " & Err.Description
    End If
    Ön Error GoTo 0
End Sub

Ön Error Resume Next komutu; hata oluştuğunda kodu durdurmaz. Err nesnesi; hata bilgisini taşır. Profesyonel kod yazımında hata kontrolü vazgeçilmezdir.

Olay Tetikleyici — Worksheet_Change

Sol panelde sayfaya çift tıkladığınızda o sayfaya özel kod sayfası açılır. Üst açılır kutudan Worksheet, sağdan Change seçin. Otomatik şu kalıp gelir:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        MsgBox "A1 değişti"
    End If
End Sub

Bu kod; A1 hücresi her değiştiğinde tetiklenir. Olay tabanlı programlama; ileri seviye kullanıcının vazgeçilmez aracıdır.

Karşılaştırma Tablosu

İhtiyaçVBA Yapısı
Tek hücre yazRange("A1").Value = ...
Sayısal döngüFor i = 1 To N
Aralık döngüsüFor Each hücre In ...
KoşulIf ... Then ... Else
Mesaj gösterMsgBox
Kullanıcı sorInputBox
Hata yönetÖn Error Resume Next

Sık Yapılan Hatalar

  • Option Explicit kullanmamak; yazım hataları runtime'a kaçar.
  • .Select ile çalışmak; kod yavaşlar, hücre seçimi gereksizdir.
  • Hata yönetimi hiç kullanmamak; bir hata tüm akışı çökertir.
  • Modül isimlerini varsayılan bırakmak; büyük projede karışıklık çıkar.

Sonuç

VBA; Excel'in altında yatan programlama dilini açan kapıdır. Bir hafta boyunca bu yazıdaki sekiz örneği kendi dosyanızda denerseniz; döngülerle gerçek otomasyonlar kurmaya başlarsınız. Makro Kaydet size öğretici bir başlangıç sunar; ama gerçek üretkenlik yazdığınız kodla gelir. Programlama öğrenmek isteyen herkes için Excel ortamı; ilk dersin verilebileceği en samimi yerlerden biridir.