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.
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.
Tarayı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ır | anlam |
|---|---|
| Sub MacroName() 〜 End Sub | Bir makronun başlangıcı ve sonu (prosedür) |
| ' Yorum | ' Satır sonuna kadar yürütülmeyen notlar |
| Dim item As Long | Bir 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).Row | A sütunundaki verilerin bulunduğu son satır |
| .Value | hücre değeri |
| If condition Then 〜 End If | Yalnızca koşullar karşılandığında çalıştır |
| For i = 1 To 10 〜 Next i | belirli sayıda tekrarla |
| For Each item In targetRange 〜 Next | Aralıktaki hücreleri tek tek işleyin |
| Function MacroName() … End Function | Bir 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.
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.
Sub RunAll()
Call CheckSales ' başka bir Makrolar çağır
Call SayHello
End SubDeğ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.
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ıp | Ne koymalı |
|---|---|
| Long | Tamsayı (satır numarası, öğe sayısı vb.) |
| Double | Ondalık sayılar dahil sayılar (tutarlar, yüzdeler vb.) |
| String | dize |
| Date | Tarih/saat |
| Boolean | True / False |
| Variant | Her şey sığabilir (bir türe karar vermediğinizde) |
| Worksheet / Range | Sayfa/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.
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.ClearContentsTü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.
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.
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ı belirtinSayfa 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.
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 kadarTablonun tamamı/kaydırma/genişletme
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.
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ırKoş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 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 IfIf 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 IfTek 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 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 SelectTekrarla (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.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iBir çalışma kitabındaki bir aralıktaki veya sayfalardaki hücreleri tek tek işlerken "Her Biri İçin" seçeneğini kullanın.
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 wsBitiş 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.
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
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Toplam" Then Exit For ' yarı yolda çıkmak
Next iFonksiyonlar 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 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 SubVBA ile çalışma sayfası işlevlerini kullanma
SUM ve COUNTIF gibi hücrelerde kullanılan işlevler "WorksheetFunction" ile çağrılabilir.
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.
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ı silinMesaj 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 "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
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ı kaydetYapı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.
Sub RunFaster()
Application.ScreenUpdating = False ' Ekran güncellemelerini durdur
' ...Zaman alan bir süreç...
Application.ScreenUpdating = True ' sonuncuya dön
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("çetele").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Bir hatayla karşılaştım:" & Err.Description
End SubBirleş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.
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 SubDeğ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.