Ana içeriğe atla

Excel - Makro ve VB (Visual Basic)

Amaç 1: Variable (değişken) deklare etmek
Sub variableName()
Dim MüşteriAdı As String
Dim Ciro As Currency
Dim Risk As Integer
Dim Tarih As Date
Dim Tarih As Boolean (TRUE or FALSE)
Dim X As Range
End Sub

Not: Bütün kodlar Sub xxx() ve End Sub arasında yazılır. Sonraki örneklerde bu ihmal edilecek…
Not: As Range için Amaç 11’e bak


Amaç 2: Ekrana o günün tarihini getiren bir pop-up penceresi aç
Dim i As Date
i = Date
MsgBox (i)


Amaç: A1 hücresinde 1000'den büyük bir değer varsa ekrana yazdır ve 0,1 koordinatındaki hücreyi kırmızı yap
Range("A11").Select
If ActiveCell > 1000 Then
MsgBox (ActiveCell)
Else
ActiveCell.Offset(0, 1).Interior.Color = vbRed
End If

Not: (0,1) (X,Y) (satır, sütun)
Not: offset ile aktif hücreye göre başka bir hücre tarif edilir


Amaç 3: Açılan inputbox’a girdiğin tarih bugünün tarihinden 30 gün sonrasından sonrası ise veya 20 gün öncesinden öncesi ise; girdiğin tarihin ayını yaz.
yani bugün 14/9/2013 ise 24/08 ve öncesi, 15/10 ve sonrası tarih yazarsan ay gelecek.
24/8/2013 < xxx > 15/10/2013
Dim i As Date
i = InputBox("tarih giriniz")
If i > Date + 30 Then
MsgBox "kaydınızın yapılacağı ay " & Format(i, "mmmm"), vbCritical, "dikkat"
ElseIf i < Date - 20 Then
MsgBox "kaydınızın yapılacağı ay " & Format(i, "mmmm"), vbCritical, "dikkat"
End If

Kural: If Then Else ve Select Case aynı işi yapar



Amaç 4: Yukarıdaki örneğin aynısı
Dim i As Date
i = InputBox("Tarih Giriniz")
Select Case i
Case Is > Date + 30
MsgBox "Kaydınızın Yapılacağı Ay " & Format(i, "mmmm"), vbCritical, "Dikkat"
Case Is < Date - 20
MsgBox "Kayt için seçtiğiniz tarih " & Format(i, "mmmm"), vbCritical, "Dikkat"
End Select


KULLANILIR DÖNGÜLER
For ... Next
For Each ... Next
Do While ... Loop
Do ... Loop While
Do Until ... Loop
Do Loop ... Until


Amaç 5: belirtilen range içinde “İstanbul” ibaresini görürsen o hücrenin bulunduğu satırı sil

Dim x As Range ' As Range için bakınız Amaç 11
Dim i As Integer
Dim y As Integer
Set x = Range("A1:A5")
i = 1
For y = 1 To x.Rows.Count
If x.Cells(i) = "İstanbul" Then
x.Cells(i).EntireRow.Delete
Else
i = i + 1
End If
Next

Not: “İstanbul” ibaresini aynı ile görmek ister


Amaç 6: tüm hücreleri büyük harfe çevirme
For Each x In Range("A1:C3")
x.Value = UCase(x.Value) ' LCase (küçükharf - Application.Proper* (ilk harf)
Next

Not: Excel VB’de açıklama satırı kesme işareti (‘) ve bir boşluktur
Not: ilk harflerin büyük olması için kullanılan “Proper” öncesinde “Application” gelmesinin sebebi VB For App’de yazım düzeni fonksiyonu yoktur.  önce bir üst sınıfı (Application) çağırmak gerekir


Amaç 7: sayaç A1 sütunu ve altındaki 15 hücreye sırayla 1’den 15’e kadar sayı yazma

Dim i As Byte
For i = 5 To 22
Cells(i, 1) = i
Next
Not: ActiveCell kullanmadığımız için default olarak A sütununda(n başlayarak) işlem yapıyor. Başka bir sütunda işlem yapmasını istersek:


Dim i As Byte
For i = 5 To 22
Columns("B").Select
ActiveCell.Cells(i, 1) = i
Next


Amaç 8: A1 sütunundan itibaren çapraz olarak 15 hücreye sırayla 1’den 15’e kadar sayı yazma


Dim i As Byte
For i = 3 To 12
Cells(i, i).Select
Cells(i, i).Value = i
ActiveCell.Columns.AutoFit
Next


Amaç 9: iç içe döngüler (dene ve gör)
Dim i As Byte
Dim y As Byte
For i = 2 To 7
For y = 0 To 3
Cells(i + y, i).Value = "$"
Next y
Next i

Not: i + y ifadesi ile 4 satır 10 sütun ilerleme sağlandı. ilk çalıştırılan döngü en son bitmeli.



Amaç 10: sayaç’ın do while ile yapılması


Dim i As Byte
i =2
Do While i <= 9
Cells(i, 1).Value = i
i = i + 1
Loop

Not: DO WHILE döngüsü (Do While Loop ile değişken 1'den başlıyor, 15(dahil) ile bitiyor)



Amaç 11:  you can also declare an Excel VBA Range object


A1:D1 hücrelerine 8 yazmak
Dim example As Range
Set example = Range("A1:D1")
example.Value = 8

Not: “Dim” ve “Set” birlikte kullanılır

veya
A1:C4 hücrelerini seçmek
Dim example As Range
Set example = Range("A1:C4")
example.Select

veya
A1:C4 hücresinin 3’üncü satırını seçmek
Dim example As Range
Set example = Range("A1:C4")
example.Rows(3).Select

veya
A1:A2 hücrelerindekileri C4 hücresinden aşağı (C sütununa) kopyalamak
Range("A1:A2").Select
Selection.Copy
Range("C4").Select
ActiveSheet.Paste

veya
A1 hücresinin içeriğini temizlemek
Range("A1").ClearContents

veya
A1:C8 alanında bir satırda kaç hücre var
Dim example As Range
Set example = Range("A1:C8")
MsgBox example.Rows.Count

Not: son satırdaki Rows’u çıkartırsak alandaki tüm hücreleri sayar