Makrolara ve VBA'ya giriş

Excel VBA'ya nasıl başlanır?
Sık kullanılan kodların listesi

VBA yazmaya başlamak için yapılan hazırlıkları ve sıklıkla kullanılan temel kodları özetledik. Hücre/aralık belirtimi, değişkenler, koşullu dallanma, tekrarlama ve işlevlerin nasıl yazılacağı dahil olmak üzere kopyalayıp deneyebileceğiniz örnekler sunacağız.

Makroların ve VBA'nın ne olduğunu öğrenmek istiyorsanız lütfen önce Makrolar/VBA giriş makalesi'a bakın.

Geliştirme ortamının hazırlanması (Windows)

VBA yazmak için başka bir yazılıma ihtiyacınız yoktur. Bunu Excel'de VBE(Visual Basic Editor)'a yazın ve olduğu gibi çalıştırın. Öncelikle aşağıdakileri yalnızca bir kez hazırlayın.

1. Geliştirici sekmesini gösterin

"Dosya" → "Seçenekler" → "Şeridi Özelleştir"i açın, sağdaki "Ana sekmeler" listesinde "Geliştirici"yi işaretleyin ve "Tamam"a basın. Şeritte bir “Geliştirici” sekmesi görünecektir.

2. VBE'yi açın

"Geliştirici" sekmesinde "Visual Basic"i tıklayın.Alt+F11Ama açabilirim. Tekrar bastığınızda Excel ekranına dönersiniz.

3. Standart modül ekleyin

VBE menüsünden "Ekle" → "Standart Modül" seçeneğini seçin. Sol taraftaki projede "Module1" oluşturulacak, sağ tarafta ise kod yazabileceksiniz. Bu standart modülde sıradan makrolar yazılır.

4. "Değişken bildirimini zorla" seçeneğini açın

VBE'nin "Araçlar" → "Seçenekler" → "Düzenle" sekmesindeki "Değişken bildirimini zorla" seçeneğini işaretleyin. Yeni oluşturulan modülün başına aşağıdaki satır otomatik olarak eklenir ve bir değişken adını yanlış yazıp yazmadığınızı bildiren bir hata mesajı görüntülenir.

modülün üst kısmı
Option Explicit   ' Değişkenlerin Dim ile bildirilmesini zorunlu kılmak için modülün başına ekleyin.

5. Yaz ve çalıştır

Kodu yazdıktan sonra Sub ~ End Sub içine tıklayın ve ardından araç çubuğundaki "▶" (Sub/Run User Form) tuşuna basın veyaF5Basın Excel ekranından "Makrolar"ya tıklayın (Alt+F8) bir ad seçip yürütmek için.

Ara değerleri kontrol etmek istiyorsanız VBE'nin "Görünüm" → "Anlık Pencere" seçeneğine gidin (Ctrl+G) ve koda "Debug.Print değişken adı" yazın, değer orada görünecektir.

6. Makrolar etkin çalışma kitabı (.xlsm) olarak kaydedin

VBA'yı yazdığınız çalışma kitabı için "Farklı Kaydet"te "Excel Makrolar özellikli çalışma kitabı (*.xlsm)" seçeneğini seçin. Normal bir .xlsx dosyası olarak kaydederseniz yazdığınız kod kaybolacaktır.

Çalışma kitabını açtığınızda, "Güvenlik Uyarısı: Makrolar devre dışı bırakıldı" şeklinde bir mesaj alırsanız, yalnızca çalışma kitabı sizin oluşturduğunuz veya güvendiğiniz bir kitapsa "İçeriği Etkinleştir" seçeneğini tıklayın. E-postadan veya İnternet'ten kaydedilen dosyalarda makrolar engellenmiş olabilir. Bu durumda, dosyaya sağ tıklayın → "Özellikler"i seçin ve "İzin Ver"i işaretleyin.

Makrolar kullanılarak yapılan değişiklikler Ctrl+Z kullanılarak geri alınamaz.Denerken çalışma kitabının veya pratik verilerinin bir kopyasını kullanın.

Mac için, "Excel" menüsü → "Tercihler" → "Şerit ve Araç Çubuğu"nu seçerek geliştirici sekmesini görüntüleyin ve geliştirici sekmesindeki "Visual Basic"te VBE'yi açın.

MacrowTarayıcıyı kullanma alıştırması yapınGeliştirme sekmesini görüntülemekten kodu çalıştırmaya kadar pratik yapın →

Sık kullanılan kodların hızlı referans listesi

Bu kadar okuyabilirseniz, yapay zeka tarafından oluşturulan kayıtlı makroların ve kodların çoğunu da okuyabilirsiniz. Her biri için ayrıntılı talimatlar aşağıdaki bölümlerde anlatılmaktadır.

nasıl yazılıranlam
Sub MacroName() 〜 End SubBir makronun başlangıcı ve sonu (prosedür)
' Yorum' Satır sonuna kadar yürütülmeyen notlar
Dim item As LongBir değişken hazırlayın (Uzun bir tamsayıdır)
Set item = Worksheets("çetele")Sayfaları, hücreleri vb. değişkenlere yerleştirin
Range("A1")A1 hücresi
Range("A1:C5")A1'den C5'e kadar aralık
Cells(row, column)Hücreleri satır/sütun numarasına göre belirtme
Cells(Rows.Count, 1).End(xlUp).RowA sütunundaki verilerin bulunduğu son satır
.Valuehücre değeri
If condition Then 〜 End IfYalnızca koşullar karşılandığında çalıştır
For i = 1 To 10 〜 Next ibelirli sayıda tekrarla
For Each item In targetRange 〜 NextAralıktaki hücreleri tek tek işleyin
Function MacroName() … End FunctionBir değer döndüren ev yapımı işlev
WorksheetFunction.Sum(targetRange)VBA ile çalışma sayfası işlevlerini kullanma
MsgBox "karakterler"mesajı göster

Makronun (Alt) ve yorumların temel biçimi

Makrolar "Alt Makrolar adı()" ile başlar ve "End Sub" ile biter. Bu süre içerisinde yazılan komutlar üstten başlayarak sırasıyla yürütülecektir. Japonca Makrolar adlarında da kullanılabilir.

Makronun temel biçimi
Sub SayHello()
    ' Bu satır yorumlanmıştır (yürütülmemiştir)
    MsgBox "Merhaba"
End Sub

「'” (tek alıntı) satırın sonuna kadar bir yorumdur. Yaptığınız şeyi yazmanız, daha sonra okumanıza veya başka birine aktarmanıza yardımcı olacaktır.

Diğer makroları çağırmak için "Ara" seçeneğini kullanın.

çağrı makrosu
Sub RunAll()
    Call CheckSales     ' başka bir Makrolar çağır
    Call SayHello
End Sub

Değişkenler ve sabitler nasıl yazılır

Değişkenler, hesaplanmakta olan değerleri veya birçok kez kullanılan değerleri saklayan kutulardır. "Dim değişken adı Tür olarak" ile hazırlayın ve değeri "=" ile girin.

Değişkenleri hazırlama ve kullanma
Sub VariablesExample()
    Dim total As Long        ' tamsayı
    Dim customer As String   ' dize
    Dim price As Double      ' ondalık sayılar
    Dim today As Date        ' Tarih
    Dim finished As Boolean  ' Doğru veya Yanlış

    total = 12
    customer = "Komorebi Shop"
    price = 1200.5
    today = Date
    finished = False

    Range("A1").Value = customer & ":" & total & "madde"
End Sub
kalıpNe koymalı
LongTamsayı (satır numarası, öğe sayısı vb.)
DoubleOndalık sayılar dahil sayılar (tutarlar, yüzdeler vb.)
Stringdize
DateTarih/saat
BooleanTrue / False
VariantHer şey sığabilir (bir türe karar vermediğinizde)
Worksheet / RangeSayfa/hücre (Set ile ekle)

Sayfalar veya hücreler gibi "şeyleri" (nesneleri) değişkenlerde saklarken, Başlangıçta "Ayarla" ekleyin. Eklemeyi unutursanız, sık sık tökezlediğim bir hata meydana gelir.

Sayfa hücrelerini değişkenlere yerleştirme
Dim ws As Worksheet
Set ws = Worksheets("çetele")    ' Set ile sayfa ve hücre ekleme
ws.Range("A1").Value = "Toplam satış"

Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContents

Tüketim vergisi oranı gibi süreç içerisinde değişmeyen değerler için sabit yapmak için "Const" kullanırsanız değiştirirken sadece bir yer değiştirmeniz yeterli olacaktır.

sabit
Const TAX_RATE As Double = 0.1   ' Süreç boyunca değişmeyen bir değer

Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)

Hücreler/aralıklar nasıl belirtilir?

VBA'da yazılacak en yaygın şey hücreleri belirtmektir. 「Range("A1")" hücre adresidir ve "Hücreler (satır, sütun)" sayıya göre belirtilir.Sayıya göre belirtilebilen hücreler, tekrarlama sırasında satırları birer birer kaydırırken kullanışlıdır.

Hücreleri/aralıkları belirtme
Range("A1").Value = 100                     ' A1
Range("A1:C3").Value = 0                    ' A1-C3 olarak gruplandırılmıştır
Range("A:A").Font.Bold = True               ' A sütununun tamamı
Range("2:2").Font.Bold = True               ' ikinci sıranın tamamı
Cells(2, 3).Value = "C2"                     ' 2. sıra/3. sütun (C2)
Range(Cells(1, 1), Cells(5, 3)).Select      ' A1〜C5
Worksheets("çetele").Range("A1").Value = "Toplam" ' Sayfayı belirtin

Sayfa adı yazmazsanız o anda açık olan sayfa (aktif sayfa) hedeflenecektir. Başka bir sayfayı çalıştırırken öğesine tıklayın.Worksheets("sayfa adı").” önünde.

son satırı bul

Satır sayısının her ay değiştiği tablolarda işleme başlamadan önce ne kadar veri bulunduğunu kontrol edin. Bu, A sütununun en alt hücresinden başlayıp yukarı doğru ilerleyerek veri içeren ilk hücrenin satır numarasını bulmak için yazmanın bir yoludur.

son satır
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   ' A sütununun altından üstüne doğru arama yapın

Range("A2:A" & lastRow).Font.Bold = True     ' Başlığın en altından son satıra kadar

Tablonun tamamı/kaydırma/genişletme

Geçerli Bölge・Ofset・Yeniden Boyutlandır
Range("A1").CurrentRegion.Select       ' Tüm tablo A1'e bağlı
Range("A1").Offset(1, 0).Value = "alt"    ' 1 satır aşağıda (A2)
Range("A1").Offset(0, 2).Value = "doğru"    ' 2. sıra sağ (C1)
Range("A1").Resize(3, 2).Select         ' A1'den 3 satır x 2 sütun (A1:B3)

Değerleri, formülleri ve biçimleri değiştirme

Hücre değerleri ".Value" kullanılarak okunur ve yazılır. Formül için, Excel'de ".Formula" alanına girerken kullandığınız dizenin aynısını girin.

Değer/Formül/Biçim
Range("D2").Formula = "=B2*C2"                  ' formülü girin
Range("A2:D10").ClearContents                   ' Yalnızca değeri silin (format kalır)
Range("A1").Font.Bold = True                    ' Kalın
Range("A1").Interior.Color = RGB(255, 242, 204) ' dolgu rengi
Range("D2:D10").NumberFormat = "#,##0"          ' 3 haneli ayırıcı
Range("A1:D10").Copy Destination:=Worksheets("rezerv").Range("A1")  ' kopyala ve yapıştır

Koşullu dallanma (If · Select Case)

İşlemeyi koşullara göre ayırmak için "If ~ Then" seçeneğini kullanın. Sonunda "End If" ifadesini unutmayın.Koşulu birden çok koşula bölmek için "ElseIf"i, koşullardan hiçbiri geçerli olmadığında "Else"yi kullanın.

If 〜 ElseIf 〜 Else
If Range("B2").Value >= 80 Then
    Range("C2").Value = "Geçti"
ElseIf Range("B2").Value >= 60 Then
    Range("C2").Value = "Yeniden doğrulama"
Else
    Range("C2").Value = "Başarısız"
End If
Boş değerlendirme/çoklu koşullar
If Range("A2").Value = "" Then
    MsgBox "A2 boş"
End If

' Ve (her ikisi de), Veya (her ikisi de), <> (eşit değil)
If Range("B2").Value >= 60 And Range("C2").Value <> "devamsızlık" Then
    Range("D2").Value = "OK"
End If

Tek bir değere dayalı olarak birden fazla yola bölerken "Büyük/Küçük Harf Seç" seçeneğinin okunması daha kolaydır.

Select Case
Select Case Range("B2").Value
    Case "Tokyo", "Yokohama"
        Range("C2").Value = "Kanto"
    Case "Osaka", "Kyoto"
        Range("C2").Value = "Kansai"
    Case Else
        Range("C2").Value = "Diğer"
End Select

Tekrarla (For · For Each · Do While)

Her satır için aynı işlemin yapılması VBA'nın en güçlü olduğu noktadır.i değişkeni 1 artırılırken "For ~ Next" tekrarlanır.

For … Next (2–10)
Dim i As Long
For i = 2 To 10
    Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i

Bir çalışma kitabındaki bir aralıktaki veya sayfalardaki hücreleri tek tek işlerken "Her Biri İçin" seçeneğini kullanın.

For Each
Dim cell As Range
For Each cell In Range("A2:A10")
    If cell.Value = "" Then
        cell.Interior.Color = RGB(255, 199, 206)   ' boşlukları kırmızıyla doldur
    End If
Next cell

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets   ' tüm sayfalar
    ws.Range("A1").Font.Bold = True
Next ws

Bitiş satırı belirlenmemişse, koşullar karşılandığı sürece tekrarlamak için "Do While" seçeneğini kullanın."r = r + 1" değerini unutursanız duramazsınız.Durmadığı zaman,EscveyaCtrl+Breakile kesebilirsiniz.

Do While 〜 Loop
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""   ' A sütunu boş olana kadar
    Cells(r, 5).Value = "Onaylandı"
    r = r + 1
Loop
Çıkış
For i = 2 To 100
    If Cells(i, 1).Value = "Toplam" Then Exit For   ' yarı yolda çıkmak
Next i

Fonksiyonlar nasıl yazılır ve kullanılır?

VBA'da "işlevler" hakkında konuştuğumuzda üç tür vardır:

Kendi fonksiyonunuzu yaratın (Fonksiyon)

"Fonksiyon"u kullanarak oluşturursanız hesaplanan değeri döndüren bir fonksiyon haline gelecektir. İşlev adına bir değer girerseniz sonuç budur.Standart bir modülde yazarsanız, bir hücreye "=Vergi dahil tutar (A2)" girip bunu çalışma sayfası işleviyle aynı şekilde kullanabilirsiniz.

Function
Function PriceWithTax(price As Double) As Double
    PriceWithTax = price * 1.1     ' Fonksiyon adına koyduğunuz değer sonuç olur.
End Function

Sub UseFunction()
    Range("B2").Value = PriceWithTax(Range("A2").Value)
End Sub

VBA ile çalışma sayfası işlevlerini kullanma

SUM ve COUNTIF gibi hücrelerde kullanılan işlevler "WorksheetFunction" ile çağrılabilir.

WorksheetFunction
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tokyo")

VBA işlevleri

VBA ayrıca tarihleri ve dizeleri işleyen işlevler de sağlar.

Biçim・Uzunluk・Sol・Değiştir vb.
Range("A1").Value = Format(Date, "yyyy-mm-dd")   ' metinde bugünün tarihi
Range("A2").Value = Now                           ' geçerli tarih ve saat
Range("A3").Value = Len("Komorebi Shop")             ' Karakter sayısı → 13
Range("A4").Value = Left("2026-10-06", 4)         ' Soldan 4 karakter → 2026
Range("A5").Value = Replace("Tokyo Şube", "Şube", "") ' Değiştir → Tokyo
Range("A6").Value = Trim("  Tokyo  ")               ' Önceki ve sonraki boşlukları silin

Mesaj ve giriş (MsgBox · InputBox)

İşlemenin sonunu bildirmek veya yürütmeden önce onaylamak için kullanılır. "InputBox" kullanıyorsanız programı her çalıştırdığınızda ayı, sorumlu kişiyi vb. girebilirsiniz.

MsgBox · InputBox
MsgBox "bitti"

If MsgBox("Çalıştırmak istiyor musun?", vbYesNo) = vbNo Then Exit Sub

Dim answer As String
answer = InputBox("Kaç ay?")
Range("A1").Value = answer & "Aylık"

Sayfa/kitap işlemleri

not defteri
Worksheets("Satış").Activate                    ' sayfaları değiştir
Worksheets("Satış").Copy After:=Worksheets(Worksheets.Count)  ' sayfayı kopyala
ActiveSheet.Name = "Eki"                        ' Sayfa adını değiştir
Worksheets.Add After:=Worksheets(Worksheets.Count)          ' sayfa ekle

Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False                    ' Kaydetmeden kapat
ThisWorkbook.Save                                ' Bu çalışma kitabını kaydet

Yapılacak çok fazla işlem varsa ekranın güncellenmesini durdurabilirsiniz ve işlem daha hızlı tamamlanır. "On Error GoTo" seçeneğini kullanarak bir hata oluştuğunda işlemi yazabilirsiniz.

Ekran güncellemelerini durdur
Sub RunFaster()
    Application.ScreenUpdating = False   ' Ekran güncellemelerini durdur
    ' ...Zaman alan bir süreç...
    Application.ScreenUpdating = True    ' sonuncuya dön
End Sub
Hatalara hazırlıklı olun
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("çetele").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Bir hatayla karşılaştım:" & Err.Description
End Sub

Birleşik örnek: Satış tablosu hesaplaması ve renklendirmesi

Buraya kadar olan kodu birleştirirsek şunu elde ederiz: "Satış" sayfasında, A sütununda ürün adı, B sütununda miktar ve C sütununda birim fiyat bulunan bir tabloda, D sütunundaki tutarı hesaplayın ve 100.000 yen veya daha fazla olan satırları yeşil renklendirin.

Satış kontrolü
Sub CheckSales()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Set ws = Worksheets("Satış")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        ' Tutar = Adet × Birim Fiyat
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
        ' 100.000 yen'in üzerindeyse yeşildir.
        If ws.Cells(i, 4).Value >= 100000 Then
            ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
        Else
            ws.Cells(i, 4).Interior.ColorIndex = xlNone
        End If
    Next i

    MsgBox lastRow - 1 & "satırı hesapladı"
End Sub

Değişkenleri (Dim), sayfa spesifikasyonunu (Set), son satırı, tekrarı (For) ve koşullu dallanmayı (If) içerir. "Hangi hücrede ne yapılıyor" satır satır okuyabiliyorsanız satır sayısını ve koşulları tablonuza uyacak şekilde değiştirebilirsiniz.

AI kod oluşturduğunuzda bile, eğer bu şekli okuyabiliyorsanız, hangi sütunun hesaplandığını ve koşulların karşılanıp karşılanmadığını kendiniz kontrol edebilirsiniz.

Daha fazla bilgi edinin

Nasıl yazılacağını görmek için kod listesini kontrol etmenizi ve ardından öğretim materyali dosyasını kullanarak denemenizi öneririz. Bu adım adım giriş kitabı, makroları kaydetmekten değişkenlere, tekrarlamaya ve bağlantılı örneklerle koşullu dallara ayırmaya kadar her konuda pratik yapmanızı sağlar.

Bunu tek başına yaparken sıkışıp kalanlar veya işlerinin otomatikleştirilebilecek alanlarını tartışmak isteyenler için, bir eğitmen tarafından verilen bir kursa katılmak da bir seçenektir.

Bir çalışma yönteminin nasıl seçileceği de Makrolar ve VBA nasıl incelenir?'da anlatılmaktadır.