Excel VBA ile Toplama Makrosu: 3 Farklı Yöntemle Hızlı Toplama
1. Örnek Veri Tablosu
Aşağıdaki tabloda farklı kategorilerde ürün fiyatları yer almaktadır. Bu tablo üzerinde 3 farklı toplama yöntemini test edeceğiz.
Tablo Bilgisi
Tabloda 6 adet ürün var. D sütunundaki fiyatlar toplamı: 45.100 TL.
2. Yöntem 1: WorksheetFunction.Sum ile Belirli Aralığı Toplama
WorksheetFunction.Sum fonksiyonu, belirtilen aralıktaki tüm sayıları toplar. Excel'deki SUM fonksiyonunun VBA karşılığıdır.
Sub BelirliAralikTopla()
' Dim: Değişken tanımlar
Dim sonuc As Double
' WorksheetFunction.Sum: Excel SUM fonksiyonunu kullanır
sonuc = WorksheetFunction.Sum(Range("D2:D7"))
' MsgBox: Sonucu ekranda gösterir
MsgBox "Toplam fiyat: " & sonuc & " TL"
End Sub
Kod Açıklaması
- Dim sonuc As Double →
sonucadında ondalıklı sayı değişkeni tanımlar - WorksheetFunction.Sum → Excel'in SUM fonksiyonunu VBA'da kullanır
- Range("D2:D7") → D2 ile D7 arasındaki hücreleri seçer
- MsgBox → Sonucu ekranda mesaj kutusu ile gösterir
Makro Sonucu (🟩 Sayılan hücreler):
📌 Sonuç: WorksheetFunction.Sum ile 45.100 TL toplam bulundu.
3. Yöntem 2: Dinamik Son Satır ile Toplama
End(xlUp).Row ile son satırı dinamik olarak bulup, veri eklendikçe otomatik olarak güncellenen bir toplama yöntemidir.
Sub DinamikSonSatirTopla()
' Dim: Değişken tanımlar
Dim sonSatir As Long
Dim toplam As Double
' End(xlUp).Row: B sütunundaki son dolu satırı bulur
sonSatir = Cells(Rows.Count, "D").End(xlUp).Row
' Range: Dinamik aralık oluşturur (D2'den son satıra kadar)
toplam = WorksheetFunction.Sum(Range("D2:D" & sonSatir))
' MsgBox: Sonucu ekranda gösterir
MsgBox "Dinamik toplam: " & toplam & " TL"
End Sub
Kod Açıklaması
- Dim sonSatir As Long →
sonSatiradında uzun sayı değişkeni tanımlar - Cells(Rows.Count, "D").End(xlUp).Row → D sütunundaki son dolu satırı bulur
- Range("D2:D" & sonSatir) → D2'den bulunan son satıra kadar dinamik aralık oluşturur
- & → Metin birleştirme operatörü
Neden Dinamik?
Yeni ürün eklendiğinde sonSatir otomatik güncellenir, kod değiştirmeden yeni verileri de toplar.
Makro Sonucu (🔵 Dinamik aralık):
📌 Sonuç: Dinamik son satır ile 45.100 TL toplam bulundu. Yeni veri eklendiğinde otomatik güncellenir.
4. Yöntem 3: For Each Döngüsü ile Koşullu Toplama
For Each döngüsü ile her hücreyi tek tek kontrol edip, sadece belirli bir kategoriye ait fiyatları toplayabiliriz. Bu örnekte "Bilgisayar" kategorisindeki ürünleri toplayacağız.
Sub KategoriyeGoreTopla()
' Dim: Değişken tanımlar
Dim hucre As Range
Dim toplam As Double
' For Each: Her hücreyi tek tek dolaşır
For Each hucre In Range("D2:D7")
' Offset: Aynı satırdaki C sütununu kontrol eder
If hucre.Offset(0, -1).Value = "Bilgisayar" Then
' IsNumeric: Değerin sayısal olup olmadığını kontrol eder
If IsNumeric(hucre.Value) Then
toplam = toplam + hucre.Value
End If
End If
Next hucre
MsgBox "Bilgisayar kategorisi toplamı: " & toplam & " TL"
End Sub
Kod Açıklaması
- Dim hucre As Range →
hucreadında hücre nesnesi tanımlar - For Each hucre In Range("D2:D7") → D2:D7 aralığındaki her hücreyi dolaşır
- Offset(0, -1) → Aynı satırdaki bir önceki sütunu (C) kontrol eder
- IsNumeric(hucre.Value) → Değerin sayı olup olmadığını kontrol eder
- Next hucre → Döngüyü bir sonraki hücreye yönlendirir
Esnek Kullanım
"Bilgisayar" yerine "Aksesuar" yazarak farklı kategorileri toplayabilirsiniz.
Makro Sonucu (🟣 Sayılan hücreler):
📌 Sonuç: For Each döngüsü ile "Bilgisayar" kategorisindeki 23.500 TL toplam bulundu.
5. VBA Makroları için Ön Hazırlık
1. Geliştirici Sekmesini Aktifleştirin
Excel'de VBA kodlarını yazabilmek için önce Geliştirici sekmesini aktif etmelisiniz. Detaylı bilgi için tıklayın.
3. Modül Ekleyin
Kodlarınızı yazmak için bir Modül eklemelisiniz. Makro yazma rehberi için tıklayın.
2. Visual Basic Düzenleyici'yi Açın
Alt + F11 (Windows) veya Option + F11 (Mac) ile hızlıca açabilirsiniz.
4. Kodu Çalıştırın
Yazdığınız kodu çalıştırmak için F5 tuşuna basın veya Çalıştır butonuna tıklayın. VBA makro nedir? öğrenmek için tıklayın.
F5
▶️ Makroyu çalıştır
6. Sıkça Sorulan Sorular
01 Excel VBA ile toplama makrosu nasıl yazılır?
WorksheetFunction.Sum(aralik) ile VBA'da toplama yapabilirsiniz. Örnek: WorksheetFunction.Sum(Range("D2:D7")).
02 Dinamik son satıra göre toplama nasıl yapılır?
Cells(Rows.Count, "D").End(xlUp).Row ile son satırı bulup, Range("D2:D" & lastRow) ile dinamik aralık oluşturabilirsiniz.
03 Sadece belirli bir kategoriyi nasıl toplarım?
For Each döngüsü ile Offset kullanarak kategori sütununu kontrol edip, koşula uyanları toplayabilirsiniz.
04 Toplama yaparken hatalar nasıl önlenir?
IsNumeric ile sadece sayısal değerleri kontrol edip toplayabilirsiniz.
05 Toplama sonucunu hücreye nasıl yazarım?
Range("E1").Value = toplam kodu ile sonucu E1 hücresine yazabilirsiniz.
06 Mac'te Excel VBA'da toplama yapabilir miyim?
Evet, Mac'te de aynı kodlar çalışır. Option+F11 ile VBA'ya erişin.