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 yaz | Range("A1").Value = ... |
| Sayısal döngü | For i = 1 To N |
| Aralık döngüsü | For Each hücre In ... |
| Koşul | If ... Then ... Else |
| Mesaj göster | MsgBox |
| Kullanıcı sor | InputBox |
| Hata yönet | Ön Error Resume Next |
Sık Yapılan Hatalar
Option Explicitkullanmamak; yazım hataları runtime'a kaçar..Selectile ç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.