Toplama Makrosu - Excel VBA

Excel VBA ile Toplama Makrosu: Kolay ve Hızlı Toplama
› Excel VBA › Toplama Makrosu

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.

Sütun A (Ürün Kodu) B (Ürün Adı) C (Kategori) D (Fiyat)
1 Ürün Kodu Ürün Adı Kategori Fiyat (TL)
2 PR001 Laptop Bilgisayar 15.000
3 PR002 Telefon Elektronik 8.500
4 PR003 Klavye Aksesuar 750
5 PR004 Monitör Bilgisayar 8.500
6 PR005 Kulaklık Aksesuar 350
7 PR006 Tablet Elektronik 12.000
Örnek veri tablosu (A1:D7) - 6 ürün ve toplam fiyatlar

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 → sonuc adı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):

Sütun A B C D
2 PR001 Laptop Bilgisayar 🟩 15.000
3 PR002 Telefon Elektronik 🟩 8.500
4 PR003 Klavye Aksesuar 🟩 750
5 PR004 Monitör Bilgisayar 🟩 8.500
6 PR005 Kulaklık Aksesuar 🟩 350
7 PR006 Tablet Elektronik 🟩 12.000
🟩 45.100 TL toplam · 6 hücre sayıldı

📌 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 → sonSatir adı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):

Sütun A B C D
2-7 PR001 - PR006 Tüm Ürünler Tüm Kategoriler 🔵 45.100
Dinamik aralık: D2'den D7'ye kadar (6 hücre)
🔵 Dinamik aralıkla 45.100 TL toplam

📌 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 → hucre adı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):

Sütun A B C D
2 PR001 Laptop 🟣 Bilgisayar 🟣 15.000
3 PR002 Telefon Elektronik 8.500
4 PR003 Klavye Aksesuar 750
5 PR004 Monitör 🟣 Bilgisayar 🟣 8.500
6 PR005 Kulaklık Aksesuar 350
7 PR006 Tablet Elektronik 12.000
🟣 23.500 TL "Bilgisayar" kategorisi toplamı

📌 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.

VBA - Geliştirici sekmesi
⚙️ Geliştirici sekmesini aktifleştirme

3. Modül Ekleyin

Kodlarınızı yazmak için bir Modül eklemelisiniz. Makro yazma rehberi için tıklayın.

VBA - Modül ekleme
📝 Modül ekleme

2. Visual Basic Düzenleyici'yi Açın

Alt + F11 (Windows) veya Option + F11 (Mac) ile hızlıca açabilirsiniz.

Visual Basic Düzenleyici'yi Açma
📝 Visual Basic Düzenleyici'yi Açma

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

📋 Makro çalıştırma

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.

💡 İpucu: Makroları çalıştırmadan önce dosyanızı yedeklemeyi unutmayın. Ctrl+S ile kaydedin.
🤖 Akıllı Arama Asistanı
💬 Merhaba! Size nasıl yardımcı olabilirim?
Excel Asistanı
👋 Merhaba! Excel ile ilgili ne öğrenmek istersin? Örn: DÜŞEYARA nasıl kullanılır?
DÜŞEYARA Pivot Tablo Gantt Şeması