Professional Documents
Culture Documents
wertyuintegeropasdfghjklzSelectqwe
rtyuiopasdfghjklzxForcvbnmqwertyui
opasdfghjklzxcvbnmqwerOffcetpasdfg
hjklzxcvbnGototyuiopasdfghjklzxcvbn
erComboBoxfghjklzxcvbDimwertAsy
uiopasdfghjklActivecellszxcvbnmqwe
Excel Ġle Programlama
rtyuiopasdfghjklzxcvbnmqwertyuiote
(Visual Basic For Application)
xtboxpasdfghjklzxcvbnmqwertyOffset
uiopaInputboxsdfghjklzxSelecttertrtAc
DERS NOTLARI VE UYGULAMALARI
tiveworkbookmqwertyuiopTrimasVB
Adfghjklzxcsheetsvbnmqwertyuiopasd
jklzxcvBilgeadambqcomboRangebox
eIfrtyuiopasdfghjklRangezxcvbnmqw
ertyuiopActivecellssasdfghjklzxcvbFu
nctionnmqwerEndSubtyuiopasdfghjk
lzxcvbnmqwertyiopaExitSubsdfghjklz
xcvbnmqEndIFwertyuiopasdfghjklzxc
MAKROLAR HAKKINDA GENEL BILGI ............................................................................................................. 4
MAKRO ÇEġĠTLERĠ ..................................................................................................................................................... 4
MAKRO KAYDETMEK ................................................................................................................................................. 4
KAYIT MAKROSU ÖRNEĞĠ ......................................................................................................................................... 5
MAKROLARI ÇALIġTIRMAK ........................................................................................................................................ 7
MAKROYU DÜZENLEMEK .......................................................................................................................................... 7
MAKROLARDA GÜVENLĠK VE MAKRO AÇARKEN GELEN UYARI.................................................................................. 8
SAYISAL ĠMZALAR HAKKINDA ................................................................................................................................... 8
VISUAL BASIC FOR APPLICATION‟DA OPERATÖRLER ............................................................................. 9
ARĠTMETĠKSEL OPERATÖRLER ................................................................................................................................. 10
KARġILAġTIRMA OPERATÖRLERĠ ............................................................................................................................. 12
MANTIKSAL OPERATORLER ..................................................................................................................................... 14
VBA PROGRAMLAMA YAPILARI ...................................................................................................................... 15
DEGISKENLER .......................................................................................................................................................... 15
KAÇ TÜRLÜ DEĞĠġKEN VARDIR VE NEREDE TANIMLANIR. ..................................................................................... 15
Local ve Global Değişken................................................................................................................................... 16
Costants(Sabitler) Değişken Tanımlama ............................................................................................................ 19
KOġUL ġART YAPILARI ............................................................................................................................................ 20
If…End If ............................................................................................................................................................ 20
End SubSelect Case ............................................................................................................................................ 22
Select Case.......................................................................................................................................................... 23
DÖNGÜLER ............................................................................................................................................................... 24
For … next .......................................................................................................................................................... 24
For each… next .................................................................................................................................................. 28
Do while… loop .................................................................................................................................................. 30
Do while… loop .................................................................................................................................................. 30
Do… loop while .................................................................................................................................................. 30
Do until… loop ................................................................................................................................................... 31
Do… loop until ................................................................................................................................................... 31
Goto döngüsü...................................................................................................................................................... 35
FUNCTĠON PROSEDÜRLER ........................................................................................................................................ 36
Döngü ve karar yapılarının kullanıldığı basit uygulamalar ............................................................................... 40
DĠZĠLER .................................................................................................................................................................... 43
EXCEL ĠLE PROGRAMLAMAYA GIRIġ ............................................................................................................ 45
WĠTH-END WĠTH ..................................................................................................................................................... 52
HÜCRE ĠÇĠNĠ OTOMATĠK DOLDURMAK .................................................................................................................... 53
HÜCREYE RASTGELE SAYI ATAMAK........................................................................................................................ 54
BAġKA PROGRAMLARI ÇAĞIRMAK .......................................................................................................................... 55
AKTĠF ÇALIġMA KĠTABINI KAYDETMEK .................................................................................................................. 55
AKTĠF ÇALIġMA KĠTABINI KAPATMAK .................................................................................................................... 56
YENĠ ÇALIġMA KĠTABI EKLEMEK .............................................................................................................................. 56
ÇALIġMA KĠYABINA YENĠ SAYFA EKLEMEK ............................................................................................................ 58
OFFSET..................................................................................................................................................................... 64
MESAJBOX ............................................................................................................................................................... 67
USER FORM VE ÖZELLIKLERI .......................................................................................................................... 68
1.FORM : COOMMANDBUTTON VE TEXTBOX‟I TANIMA ........................................................................................... 69
2. FORM : OYUN MAKĠNASI ....................................................................................................................................... 70
3. FORM : HESAP MAKĠNASI ...................................................................................................................................... 71
4. FORM : KAYIT FORMU .......................................................................................................................................... 74
MICROSOFT ACCESS BAĞLANTISI .................................................................................................................. 82
GRAFIK OLUġTURMAK........................................................................................................................................ 89
BilgeAdam Sayfa 2
VAW ÇALMAK......................................................................................................................................................... 89
OFFICE YARDIMCISINI ÇAĞIRMAK ................................................................................................................ 90
API‟LER (APPLICATION PROGRAMMING INTERFACE) ............................................................................ 91
PROJE-1 (ÜRÜNLERĠ SAYFALARA BÖLMEK) ................................................................................................ 92
1. ÜRÜN LĠSTESĠ ÇIKARILIR ............................................................................................................................... 93
2. VERĠLER FĠTRELENĠR VE SAYFALARA KOPYALANIR ...................................................................................... 94
3. ÜRÜN TOPLAMLARI ALINIR ............................................................................................................................ 95
4. BASLAMA MODÜLÜ OLUġTURULUR ............................................................................................................... 96
PROJE -2 (RAPORDAN TABLO OLUġTURMAK) ............................................................................................. 97
1. BAġLIKLAR YAZDIRILIR ................................................................................................................................. 98
2. TÜRE GÖRE VERĠ TOPLAMLARI ...................................................................................................................... 99
3. SIRALAMA MODÜLÜ ..................................................................................................................................... 100
4. BÖLGELERE GÖRE TOPLAM .......................................................................................................................... 101
5. BASLAMA MODÜLÜ OLUġTURULUR ............................................................................................................. 102
PROJE -3 (GRAFĠK RAPOR OLUġTURMAK).................................................................................................. 103
1. ÜRÜN SATIġLARI TABLOSU .......................................................................................................................... 104
2. ÜRETĠCĠ FĠRMA SATIġ TABLOSU ................................................................................................................... 105
3. AYLIK SATIġ TABLOSU ................................................................................................................................. 106
4. ĠSĠMLER DÜZENLENĠR ................................................................................................................................... 107
5. URUNLER GRAFĠĞĠ OLUġTURULUR ............................................................................................................... 108
6. FĠRMA GRAFĠĞĠ OLUġTURULUR .................................................................................................................... 109
7. AYLIK GRAFĠK OLUġTURULUR ..................................................................................................................... 110
8. BASLAMA MODÜLÜ OLUġTURULUR ............................................................................................................. 111
BilgeAdam Sayfa 3
MAKROLAR HAKKINDA GENEL BILGI
Makro, rutin iĢlemleri otomatik hale getirmektir. Makrolar hazırlanırken, excelin arka planında çalıĢan
Visual Basic programlama dili hazır halde beklemektedir. Herhangi bir kayıt yapıldığında bu programlama dili aktif
hale gelir. Sizin yapmıĢ olduğunuz herhangi bir hareketi Visual Basic programlama diline çevirir. Excel de
kullandığımız makro, dil olarak aynı olsa da, yapısal farklılıklar içerdiğinden Word Access ya da PowerPointte
kullanılmaz.
DıĢarıdan makro kullanabilirisiniz ama virüs içeriyor olabilir.
Makro ÇeĢitleri
1-Makro kaydetmek
2-Visual Basic‟te komut yazmak.
3-Fonksiyon (iĢlev) Hazırlamak
Bu üç yöntem de birbirinden farklı tarzda hazırlanmaktadır. Her birinin diğerlerine göre avantajları ve
dezavantajları vardır. Üç yöntemi de tek tek inceleyelim.
Makro kaydetmek
Makro kaydetmek, kasetçalara ses kaydetmek kadar kolay bir iĢtir. Bunun yapılması gerekenler Ģöyle
özetlenebilir.
1. Office menüsünden Excel Options komutunu, buradan Popular sekmesinden Show Developer
tab in the Ribbon iĢaretlenir. Böylece Developer Ribbon‟unu eklenir.
2. Developer ribonu‟nun Record New Macro komutunu tıkladığınızda ekrana makro kaydet
penceresi gelecektir.
Bu pencerede Macro Name alanına makronun adını yazmalısınız. Ġstenirse Shortcut key bölümüne bir kısa
yol tuĢu verilebilir. Daha sonra ise bu makronun nerede kayıt olduğu seçilmelidir. Store Macro in bölümü açıldığı
zaman üç seçenek bulunmaktadır. This Workbook seçeneği makroyu sadece aktif olan dosyaya kaydeder. BaĢka bir
Excel dosyasında çalıĢmaz. New Workbook seçeneği makroyu yeni bir excel dosyası açar ve o dosyanın için
kaydeder. Personel Macro Workbook seçeneği excel içerisinde tüm dosyalarda geçerli olması için Personel.xls
dosyasını açar ve o dosyaya kaydeder. Personel.xls dosyası içerisine kaydedilen her makro, excel içerisinde açılan
her dosyada çalıĢmasını sağlar.
Store Macro in bölümünden herhangi bir seçenek seçildikten sonra ok düğmesine tıklanır.
BilgeAdam Sayfa 4
Kayıt Makrosu Örneği
Bu örnekte kayıt makrosu kullanarak sayfanın sol tarafında görünen ay-gün tablosunu otomatik olarak
oluĢturan makroyu kayıt ettik. ĠĢleme B1 hücresinden baĢladık önce sırayla günleri ardından sırayla ayları yazdık.
Yazma iĢleminin ardından biçimlendirmeleri yaparak kaydı durdurduk. Alt + F11 tuĢu ile VBA„nin oluĢturduğu
kodu inceledik
Sub Tablo()
Range("B1").Select
ActiveCell.FormulaR1C1 = "Pazartesi"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Salı"
Range("D1").Select
ActiveCell.FormulaR1C1 = "ÇarĢamba"
Range("E1").Select
ActiveCell.FormulaR1C1 = "PerĢembe"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Cuma"
Range("G1").Select
ActiveCell.FormulaR1C1 = "Cumartesi"
Range("H1").Select
ActiveCell.FormulaR1C1 = "Pazar"
Range("A2").Select
ActiveCell.FormulaR1C1 = "Ocak"
Range("A3").Select
ActiveCell.FormulaR1C1 = "ġubat"
Range("A4").Select
BilgeAdam Sayfa 5
ActiveCell.FormulaR1C1 = "Mart"
Range("A5").Select
ActiveCell.FormulaR1C1 = "Nisan"
Range("A6").Select
ActiveCell.FormulaR1C1 = "Mayıs"
Range("A7").Select
ActiveCell.FormulaR1C1 = "Haziran"
Range("A8").Select
ActiveCell.FormulaR1C1 = "Temmuz"
Range("A9").Select
ActiveCell.FormulaR1C1 = "Ağustos"
Range("A10").Select
ActiveCell.FormulaR1C1 = "Eylül"
Range("A11").Select
ActiveCell.FormulaR1C1 = "Ekim"
Range("A12").Select
ActiveCell.FormulaR1C1 = "Kasım"
Range("A13").Select
ActiveCell.FormulaR1C1 = "Aralık"
Range("A2:A13").Select
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 2
Selection.Font.Bold = True
Range("B1:H1").Select
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 2
Selection.Font.Bold = True
Columns("B:H").Select
Selection.ColumnWidth = 10.86
Range("B2:H13").Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
BilgeAdam Sayfa 6
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("B2").Select
End Sub
Makroları ÇalıĢtırmak
Bir makroyu çalıĢtırmak için;
1-Developer >>macros seçenekleri ile kayıtlı makroların isimlerinin bulunduğu pencere açılır.
ÇalıĢtırılmak istenen makronun adı seçilir ve run düğmesine tıklanır.
2-Office menüsü >>Excel options seçeneğinden customize sekmesi tıklanır. Choose comands
from bölümünden ve buran macros bölümüne gelerek makro nesneleri Quick Access araç çubuğuna
taĢınır ve bu nesnelere makro atanır.
3- Developer >>Insert bölümünden açılır ve buradan button veya baĢka bir nesne seçilip excel
ekranına çizilir. Bu nesneye makro atanır.
4-Visual Basic For Application penceresinden run seçeneğine tıklanabilir.
Eğer oluĢturulan makro Örnek 1 deki Tablo makrosu gibi basit bir makro değilse ve içinde bağımsız
değiĢkenler barındırıyorsa saydığımız yöntemler bu makrıyu çalıĢtırmaz.
Makroyu Düzenlemek
OluĢturduğumuz Örnek 1 deki Tablo makrosunda bir ayın adını yanlıĢ yazmıĢsak ve düzeltmek istiyorsak
veya koda müdahale etmek istiyorsak kısaca makroda bazı değiĢiklikler yapmak istiyorsanız düzenle düğmesini
kullanabilirsiniz.
Bunun için Developer >>macros komutu tıklanır. Buradan edit seçeneği seçilir.
BilgeAdam Sayfa 7
Makrolarda Güvenlik ve makro açarken gelen uyarı
Örnek 1 de yaptığımız Tablo makrosu ile beraber excel dosyasını kaydedip kapatırsak(xlsm olmasına
dikkat), dosyayı yeniden açtığımızda karĢımıza bir uyarı gelir ve oluĢturduğumuz makronun çalıĢmadığını görürüz.
Çünkü oluĢturulan makro aslında bir programdır. Excel bizi bu konuda uyarır. Makronun devre dıĢı bırakılmasının
sebebi Developer >>security kısmında güvenlik seviyesini high olarak ayarlanmıĢ olasıdır. Buradaki seviyeyi
medium yaptıktan sonra dosyayı kapatır ve yeniden açarsak, excel makroyu etkinleĢtirmek isteyip istemediğimizi
bize soracaktır.
Sertifikanın amacı: ÇalıĢma kitabını açtığınızda veya sayısal imzalı makro içeren bir eklenti programını
yüklediğinizde, sayısal imza bilgisayarınızda bir sertifika gibi görünür. Sayısal imza bir makronun güvenlik garantisi
değildir. Kaynağından emin olmanızı sağlar ve kaynağına güveniyorsanız makroyu çalıĢtırırken güvendiğiniz
kaynaktan geldiğini doğrular.
BilgeAdam Sayfa 8
VISUAL BASIC FOR APPLICATION’DA OPERATÖRLER
1.aritmetiksel operatörler(arithmetic)
2.karĢılaĢtırma operatörleri(comparison)
3.mantıksal operatörler(logical)
1.aritmekiksel operatörler
^ üs (exponentiation)
* çarpma (multiplication)
/ bölme (division)
\ tamsayı bölme(integer division)
Mod mod (modulus arithmetic)
+ toplam (addition)
- çıkarma (subtrction)
& birleĢtirme(string concatenation)
2.karĢılaĢtırma operatörleri
= eĢit (equality)
<> eĢit değil (ınequality)
< küçük (less then)
> büyük (greater than)
<= küçük eĢit (less then or equal to)
>= büyük eĢit (greater then or equal to)
Like benzer (like)
Is var (is)
3.mantıksal operatörler
Not değil
And ve
Or veya
Xor
Eqv
Imp
Bu örneklerde VBA deki operatörlerin kullanımını sırasıyla gösterdik. VBA ekranında tek tırnak
kullanılarak baĢlanan cümleler açıklamalardır ve VBA tarafından dikkate alınmaz. Biz de Kullandığımız
operatörlerin isimlerini tek tırnak kullanarak belirttik.
BilgeAdam Sayfa 9
Aritmetiksel Operatörler
Sub UsOperatoru1()
Sub UsOperatoru2()
End Sub
Sub CarpimOperatoru()
End Sub
Sub BolumOperatoru()
End Sub
Sub TamsayiBolumOperatoru()
End Sub
BilgeAdam Sayfa 10
Sub ModOperatoru()
End Sub
Sub ToplamOperatoru()
End Sub
Sub CikartmaOperatoru()
End Sub
Sub AndOperatoru()
End Sub
BilgeAdam Sayfa 11
KarĢılaĢtırma Operatörleri
Sub EsitOperatoru1()
End Sub
Sub EsitOperatoru2()
End Sub
Sub EsitOperatoru3()
End Sub
Sub FarkliOperatoru()
End Sub
Sub KucukOperatoru()
End Sub
Sub BuyukOperatoru()
End Sub
BilgeAdam Sayfa 12
Sub KucukesitOperatoru()
End Sub
Sub BuyukesiOperatoru()
End Sub
Sub LikeOperatoru1()
End Sub
Sub LikeOperatoru2()
End Sub
BilgeAdam Sayfa 13
Mantıksal Operatorler
Sub NotOperatoru1()
End Sub
Sub NotOperatoru2()
End Sub
Sub AndOperatoru1()
End Sub
Sub AndOperatoru2()
End If
End Sub
Sub EqvOperatoru()
'mantıksal iki ifadenin karşılaştırması için kullanılır. sonuçlar aynıysa true sonucu verir
MsgBox False Eqv False
End Sub
BilgeAdam Sayfa 14
VBA PROGRAMLAMA YAPILARI
DeğiĢkenler
Veri tipi
Integer: VB‟de tamsayı değiĢkenleri tanımlamakta kullanılır. Hafızada 2 byte yer kaplar(-32768 ile
+32767 arasındadır) bir değiĢkenin sonunda % iĢareti varsa integer tipindedir.
Boolean:Mantıksal veri tipleri için kullanılır. Iki seçnekten birisini alır (True ya da false) bellekte 2 byte
yer kaplar.
Long:daha büyük bir aralıkta integer yani tamsayı tanımlamak için kullanılır. Hafızada 4 byte yer kaplar
(2147438647 ile -2147483648) değiĢken sonunda & iĢareti olabilir.
Double: VB de kullanılabilecek en büyük sayısal değerlerin veri tipidir. Hafızada 8 byte yer kaplar. 16
haneye kadar hassastırlar. Sonunda # iĢareti vardır.
Currency: sayısal tipteki veriler için tanımlanmıĢ özel bir veri tipidir. Hafızada 8 byte yer kaplar. 4 hane
ondalık kısmı olmak üzere toplam 19 haneden oluĢur. (nokta hariç) . sonunda @ iĢareti vardır.
Date:tarih türündeki bilgileri kullanmak için oluĢturulmuĢ bir veri tipidir. Hafızada 8 byte yer kaplar
String: metin türü bilgileri saklamak için kullanılabilecek veri türüdür. Sonunda $ sembolu sonunda
vardır.
Object:herhangi bir nesne türü olabilir. Hafızada 4 byte yer kaplar.
Variant:bu tüpte tanımlanmıĢ bir değiĢkene herhangi bir tip‟te veri yüklenebilir. Yani ne tür bir veri
gireceğimizi bilmediğimiz değiĢkenleri variant tipinde tanımlamalıyız.
BilgeAdam Sayfa 15
Local ve Global DeğiĢken
Sub degiskenler1()
End Sub
Sub degiskenler2()
End Sub
BilgeAdam Sayfa 16
Public z
Sub ilk1()
z=x+y
MsgBox z
‘msgboxtaki değer input boxtan girilen değerlerin yan yana yazılmış halidir. ‘Örneğin 1.
giriş 5 ve ikinci giriş de 5 ise sonuc 55 dir. Çünkü girilen değerler string kabul ‘edilmiştir
End Sub
BilgeAdam Sayfa 17
Sub ilk2()
z=x+y
MsgBox z
End Sub
Sub ilk3()
z=x+y
MsgBox z
End Sub
Sub ilk4()
z=x+y
End Sub
BilgeAdam Sayfa 18
Sub ilk4_1()
MsgBox z
‘z değeri başka bir sub içerisinde yazdırılabildi çünkü baştan global tanımlandı
End Sub
Sub ilk5()
z=x+y
ilk4_1
‘bir sub içerisinde başka bir sub ismi yazılarak diğer altyordam çağırılabilir ilk5 isimli
‘altyordam içinde ilk4_1 isimli yordam çağırılarak z değeri msgbox olarak yazdırıldı
End Sub
Uygulaması
Const pi = 3.14
Const buyuk = "aradığınızdan büyük değer buldunuz"
Const kucuk = "aradığınıdan küçük değer buldunuz"
Const tamam = "aradığınız değeri buldunuz"
Sub daire_alanı()
Dim r As Integer
r = InputBox("dairenin yarıçapını (r) giriniz")
alan = pi * r ^ 2
End Sub
BilgeAdam Sayfa 19
KoĢul ġart Yapıları
If…End If
IĢlemleri gerçekleĢtirirken aradığımız bazı kriterler sonucunda akıĢı değiĢtirmek istersek bu yapıyı
kullanırız.
Uygulaması
Sub kosul1()
End if
If Ģart then
Ifadeler
End If
Uygulaması
If Range("a1") = 10 Then
Range("b1") = 500
Range("c2") = 400
Range("d3") = 300
Range("e4") = 200
Range("f5") = 100
End If
End Sub
BilgeAdam Sayfa 20
If Ģart Then
ifadeler
Else
Ifadeler
End If
Uygulaması
Sub kosul3()
If Range("a1").Value = 10 Then
Range("b1").Value = 500
Else
Range("b1").Value = "a1 hücresinde 10 yok"
End If
End Sub
BilgeAdam Sayfa 21
If Ģart Then
ifadeler
Else
End If
Uygulaması
Sub kosul4()
If Range("a1").Value = 10 Then
Range("b1").Value = 500
ElseIf Range("a1").Value = 15 Then
Range("b1").Value = 500
ElseIf Range("a1").Value = 20 Then
Range("b1").Value = 500
Else
Range("b1").Value = "istediğimiz değerlerden herhangi birini bulamadınız"
End If
End Sub
BilgeAdam Sayfa 22
Select Case
If then elseif yapısı ile aynı mantıkla çalıĢır. Yapı bir değiĢkenin aldığı bir çok değere göre ayrı komutları
çalıĢtıran Ģart yapısıdır.
Case durum1
Komutlar
Case durum2
Komutlar
End select
Uygulaması
Sub kosul5()
End Sub
BilgeAdam Sayfa 23
Döngüler
Yazmak istediğimiz kodda, bazı ifadeleri tekrar tekrar yazmak isteyebiliriz ki aslında bu programlamanın
olmazsa olmaz koĢullarındandır. Bu tür durumlara aynı iĢlemi defalarca yapmak yerine döngüler kullanırız.
Döngü çeĢitleri :
For… next
For each…next
Do while…loop
Do…loop while
Do until…loop
Do…loop until
Go to
For … next
Next sayaç
Eğer A1 hücresinden A10 hücresine kadar sırayla 1 den 10‟a kadar sayıları yazmak
istersek bu iĢlemi döngü kullanmadan Ģu Ģekilde yapmamız gerekir.
Sub dongusuz()
Range("a1").Value = 1
Range("a2").Value = 2
Range("a3").Value = 3
Range("a4").Value = 4
Range("a5").Value = 5
Range("a6").Value = 6
Range("a7").Value = 7
Range("a8").Value = 8
Range("a9").Value = 9
Range("a10").Value = 10
End Sub
BilgeAdam Sayfa 24
Bu durum 10 hücre için yapılabilir gibi görünse de yine de zaman almaktadır. Eğer aynı iĢlemi çok daha
fazla hücre için yapmak istersek durumun ne kadar zorlaĢacağı gayet açıktır. ĠĢte bu durumu çok daha az satırla
yapmak için döngüleri kullanırız.
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
End Sub
Sub dongu2()
Dim i As Integer
For i = 1 To 10 Step 2
Cells(i, 1).Value = i
Next i
End Sub
BilgeAdam Sayfa 25
Eğer birden fazla iĢlemi birden çok kez yapmak istersek döngü içinde döngü kullanabiliriz. Bu durum
genelde dizi iĢlemlerinde kullanılmasına karĢın biz çok daha basit örnekleyeceğiz.
Tek bir döngü kullanarak yaptığımız kodu yazalım ve sağ taraftaki sonucu bulalım.
Sub dongu3()
Dim i As Integer
For i = 1 To 10
Cells(i, i).Value = "X"
Cells(i + 1, i).Value = "X"
Cells(i + 2, i).Value = "X"
Cells(i + 3, i).Value = "X"
Next i
End Sub
Aynı sonucu iç içe döngü kullanarak çok daha az kodla yapmamız mümkündür.
Sub donguicindedongu1()
Dim i As Integer
Dim y As Integer
For i = 1 To 10
For y = 1 To 3
Cells(i + y, i).Value = "X"
Next y
Next I
End Sub
BilgeAdam Sayfa 26
Ġç içe döngü ile çarpım tablosu oluĢturalım
Sub donguicindedongu2()
Dim i As Integer
Dim y As Integer
For i = 1 To 10
For y = 1 To 100
Cells(y, i) = i & "*" & y & "=" & i * y
Next y
Next i
End Sub
BilgeAdam Sayfa 27
For each… next
Next
Eğer iĢleme sokulacak elemanların hücre aralıkları biliniyorsa bu tip bir döngü kullanılabilir. Burada;
eleman:döngüde kullanılacak her bir birim, grup ise bu elemanların ait olduğu kümedir.
Eleman adını verdiğimiz “i”, a1 ile d10 aralığındaki 40 adet hücrenin elemanıdır. Daha açıkcası, , a1
hücresi, b5 hücresi, d10 hücresi olabilir. Sırasıyla iĢleme girer ve bu 40 hücre “i” demek olur.
Sub dongu4()
i.Value = "X"
Next i
End Sub
BilgeAdam Sayfa 28
A1 ile D10 arasındaki tüm hücrelere 0-100 arasında rastgele sayı atayıp bu sayıya
göre hücre içini ve yazıyı renklendirelim
Sub dongu5()
Dim k As Range
Range("a1:d10").Formula = "=rand()*100"
‘burada kullandığımız rand() komutu olduğu gibi hücreye yazılır ve excelden aşina
‘olduğumuz rand komutunu çalıştırır
k.Interior.ColorIndex = 45
k.Font.ColorIndex = 1
k.Interior.ColorIndex = 6
k.Font.ColorIndex = 3
k.Interior.ColorIndex = 37
k.Font.ColorIndex = 9
End If
Next k
End Sub
BilgeAdam Sayfa 29
Do while… loop
Do while koĢul
Komutlar
Loop
Uygulaması
Sub doloop1()
Dim i As Integer
i=1
Do While i <= 10 'koĢul doğruysa aradaki komutları çalıĢtır
Cells(i, 1).Value = i
i=i+1
Loop
End Sub
Do
Komutlar
Uygulaması
Sub doloop2()
Dim i As Integer
i=1
Do
Cells(i, 1).Value = i
i=i+1
End Sub
BilgeAdam Sayfa 30
Do until… loop
Do until koĢul
Komutlar
Loop
Uygulaması
Sub doloop3()
Dim i As Integer
i=1
Do Until i > 10
Cells(i, 1).Value = i
i=i+1
Loop
End Sub
Do
Komutlar
Uygulaması
Sub doloop4()
Dim i As Integer
i=1
Do
Cells(i, 1).Value = i
i=i+1
End Sub
BilgeAdam Sayfa 31
BilgeAdam Sayfa 32
Do…Loop While ile 6 faktoriyeli bulalım
Sub doloop5()
Dim i As Integer
i=1
fakt = 1
Do
fakt = fakt * i
Cells(i, 1).Value = fakt
i=i+1
End Sub
Sub doloop6()
Dim i As Integer
i=1
toplam = 0
Do
toplam = toplam + i
Cells(i, 1).Value = toplam
i=i+1
End Sub
BilgeAdam Sayfa 33
C1 hücresinin yanıp sönmesini sağlayalım
Sub yanson()
Do While (True)
Range("c1").Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
For i = 0 To 25000
DoEvents
Next
durum = False
Else
Range("c1").Select
Selection.Interior.ColorIndex = xlNone
For i = 0 To 25000
DoEvents
Next
durum = True
End If
Loop
End Sub
BilgeAdam Sayfa 34
Goto döngüsü
Bu tip bir döngüye koĢulsuz döngü adını verebiliriz. ġartlar ne olursa olsun, çalıĢan komut satırı bu
döngünün bulunduğu satıra gelince go to deyiminin gidilmesini istediği satıra gider.
Goto tanımlama
Ifadeler „aradaki ifadeler yapılmaz
Tanımlama:
Sub go_to()
Dim i As Integer
GoTo topla
Range("a1").Value = "deneme"
topla:
i = i + 20
End Sub
BilgeAdam Sayfa 35
Function Prosedürler
Option Compare Text
Büyük küçük harf ayrımı yapmadan text olarak karĢılaĢtırmasını sağlar alternatifi binary dir bu da sayısal
karĢılaĢtırır
Function stopaj(tutar)
End Function
End Function
BilgeAdam Sayfa 36
Sağ tarafta görüldüğü gibi tutar, tür ve kdv sonuçlarını tuttuğumuz bir tablo olsun.
Bu tabloda kdv yi türe göre hesaplayan bir fonksiyon yazalım
Else
oran = 25
End If
End Function
BilgeAdam Sayfa 37
Yazdığımız türlerin dıĢındaki bir tür geldiğinde hücreye “lütfen türü kontrol ediniz”
yazan kodu ekleyelim
End Function
Case "temel"
oran = 1
Case "yiyecek"
oran = 1
Case "temizlik"
oran = 1
Case "lüks"
oran = 1
Case Else
kdv5 = "lütfen türü kontrol ediniz"
End Select
End Function
BilgeAdam Sayfa 38
Puan Hesaplama Fonksiyonu
Function Puan(Notu As Integer)
Select Case Notu
Case Is > 100: Puan = "Hatalı not"
Case Is >= 90: Puan = "AA"
Case Is >= 85: Puan = "BA"
Case Is >= 75: Puan = "BB"
Case Is >= 70: Puan = "CB"
Case Is >= 60: Puan = "CC"
Case Is >= 55: Puan = "DC"
Case Is >= 50: Puan = "DD"
Case Is >= 40: Puan = "FD"
Case Is >= 0: Puan = "FF"
Case Else: Puan = "Hatalı not"
End Select
End Function
BilgeAdam Sayfa 39
Döngü ve karar yapılarının kullanıldığı basit uygulamalar
Do
P = InputBox("parola")
If P = "123" Then
Exit Sub
Else
End If
Loop
End Sub
Do
P = InputBox("parola")
i=i+1
If P = "123" Then
MsgBox "hoĢgeldin"
End If
End Sub
BilgeAdam Sayfa 40
1-100 arasında rastgele oluĢturulan bir sayıyı maksimum 5 tahminde bulma oyunu
yazalım
Sub oyun1()
Randomize
s = Int(Rnd() * 100) + 1
‘burada kullandığımız rnd() komutu daha önce kullandığımız rand() komutundan farklı
‘olarak VBA kodudur. Eğer başlangıçta Randomize yazmazsak bilgisayar hep aynı rastgele
‘sayıyı üretir.
MsgBox s
Do
t = Int(InputBox("tahmin"))
If t = s Then
MsgBox "bildin"
Else
MsgBox "aĢağı"
End If
i=i+1
Loop Until t = s Or i = 5
End Sub
BilgeAdam Sayfa 41
DıĢarıdan girilen 3 sayının if-else koĢul yapısı ile büyükten küçüğe sıralanması
Sub sırala1()
If a > b Then
t=a
a=b
b=t
End If
If a > c Then
t=a
a=c
c=t
End If
If b > c Then
t=b
b=c
c=t
End If
MsgBox a
MsgBox b
MsgBox c
End Sub
BilgeAdam Sayfa 42
Diziler
Aynı sıralama örneğini dıĢarıdan girilen çok daha fazla sayı için for…next döngüsü ile yapalım. Bu
örnekte dıĢarıdan girilen çok sayıdaki veriyi bir dizinin içine atıyoruz. Diziler
dim x(4) türü bildirile ile tanımlanır. x(4) dizisine 5 adet atama yapılır x(0)=sayı, x(1)=sayı … gibi. Eğer bir
dizinin büyüklüğü baĢtan bilinmiyorsa ve dıĢarıdan alınacak bir sayı ile sonradan tanımlanacaksa dizini baĢtan sınır
belirtilmeden tanımlanması ve sonrasında sınırlanarak yeniden tanımlanması gerekir.
Dim x()
a=Veri giriĢi
ReDimx(a) gibi
eğer dizinin 0 dan değil de 1 den baĢlanması isteniyorsa ReDimx(1 to a) Ģeklinde tanımlanması gerekir.
Burada tanımladığımız dizi 1 boyutlu dizidir. Ġhtiyaç halinde (örneğin bir matris hesabında) 2 ve daha çok
boyutlu diziler de tanımlanabilir.
BilgeAdam Sayfa 43
Sıralama örneğini dıĢarıdan girilen çok daha fazla sayı için for…next döngüsü ile
yapalım
Sub sırala2()
Dim x()
ReDim x(1 To s)
For i = 1 To s
Next i
For i = 2 To s
For j = 1 To i - 1
t = x(i)
x(i) = x(j)
x(j) = t
End If
Next j
Next i
For i = 1 To s
MsgBox x(i)
Next i
End Sub
BilgeAdam Sayfa 44
EXCEL ĠLE PROGRAMLAMAYA GIRIġ
Hücre Seçmek, Hücreye Değer Atamak, Hücreye Formül Yazdırmak
Hücre seçmek
Sub makrom1()
Range("b2").Select
End Sub
Sub makrom2()
Cells(2, 2).Select
End Sub
Sub makrom3()
[b2].Select
End Sub
Range("a3:c10").Select
End Sub
Sub makrom5()
Range("a1,b3:d5,c10:c12,f8").Select
End Sub
BilgeAdam Sayfa 45
Satır seçmek
Sub makrom6()
Rows("14:14").Select
End Sub
Range("2:2,5:5,11:14").Select
End Sub
Sütun seçmek
Sub makrom8()
Columns("b:b").Select
End Sub
Range("a:a,c:c,f:j").Select
End Sub
Cells.Select
End Sub
Selection.EntireRow.Select
End Sub
BilgeAdam Sayfa 46
Seçili hücrelere ait sütunun tamamını seçmek
Sub makrom12()
Selection.EntireColumn.Select
End Sub
ActiveCell.CurrentRegion.Select
End Sub
Selection.CurrentRegion.Select
End Sub
Range("a1").Value = Selection.Count
End Sub
MsgBox Selection.Rows.Count
MsgBox Selection.Columns.Count
End Sub
BilgeAdam Sayfa 47
Seçili alan sayısını bulmak
Sub makrom18()
MsgBox Selection.Areas.Count
End Sub
Range("b3").Formula = "=b1+b2"
End Sub
Sub makrom20()
Range("b3").Formula = "=sum(b1:b2)"
End Sub
r1 c1 baĢvuru stili
Sub makrom21()
End Sub
Sub makrom22()
Range("a1").FormulaR1C1 = "=sum(RC[1]+R[1]C[1])"
End Sub
Sub makrom23()
End Sub
BilgeAdam Sayfa 48
Hücreye değer atamak
Sub makrom24()
Range("b2").Value = 125
End Sub
Range("b2").Value = "merhaba"
End Sub
Range("b2").Text = "merhaba"
End Sub
Range("b2").Select
Range("b2").Value = 125
End Sub
Range("b2").Select
Selection.Value = 125
End Sub
Range("a1,b3:d5,c10:c12,f8").Select
Selection.Value = 150
End Sub
BilgeAdam Sayfa 49
Seçili hücrelere değer atadıktan sonra A1 hücresi seçili kalsın
Sub makrom30()
Range("a1,b3:d5,c10:c12,f8").Select
Selection.Value = 150
Range("a1").Select
End Sub
Range("a1,b3:d5,c10:c12,f8").Select
Selection.Value = 150
Range("a100").Select
End Sub
Seçili hücrelere değer atadıktan sonra A100 hücresi seçili kalsın fakat ekran 1. satıra
gelsin
Sub makrom32()
Range("a1,b3:d5,c10:c12,f8").Select
Selection.Value = 150
Range("a100").Select
ActiveWindow.ScrollRow = 1
End Sub
End Sub
BilgeAdam Sayfa 50
Bir önceki kodun sütün geniĢliğini de değiĢtirelim
Sub makrom34()
Range("b5").Value = "merhaba"
Range("b5").Interior.ColorIndex = 3
Columns("b:b").ColumnWidth = 35 ' 35 250 pikseldir, 8,43 64 pikseldir
End Sub
End Sub
End Sub
BilgeAdam Sayfa 51
With-End With
Bir önceki kodda range(“b5”) „i sürekli yazmak yerine with..end with özelliği
kullanarak bir sefer de yazabiliriz
Sub makrom37()
With Range("b5")
.Value = "caner kılınç"
.Interior.ColorIndex = 3
.Font.ColorIndex = 6
.Font.Size = 20
.Font.Bold = True
.Font.Italic = True
End With
Columns("b:b").ColumnWidth = 35
End Sub
Aynı Ģekilde font özelliğini de with..end with ile tek sefer yazalım
Sub makrom38()
With Range("b5")
.Value = "caner kılınç"
.Interior.ColorIndex = 3
With .Font
.ColorIndex = 6
.Size = 20
.Bold = True
.Italic = True
End With
End With
Columns("b:b").ColumnWidth = 35
End Sub
BilgeAdam Sayfa 52
Sütun geniĢliğini columns yerine range(“b5”) ile de değiĢtirebilirim. Bir hücrenin
geniĢliğini değiĢtrimek için sütunun geniĢliği değiĢmek zorundadır.
Sub makrom39()
With Range("b5")
.Value = "caner kılınç"
.Interior.ColorIndex = 3
.ColumnWidth = 35
With .Font
.ColorIndex = 6
.Size = 20
.Bold = True
.Italic = True
End With
End With
End Sub
Range("a1:f1").FillRight
End Sub
Sub soladoldur()
Range("a1:f1").FillLeft
End Sub
Sub asagıyadoldur()
Range("a1:a10").FillDown
End Sub
BilgeAdam Sayfa 53
Sub yukariyadoldur()
Range("a1:a10").FillUp
End Sub
Kaynak hücreleri referans alarak hedef hücreleri doldurmak ilk iki hücredeki
veriye göre dizi oluĢturmak
Sub doldur()
Range("a1:a2").AutoFill Destination:=Range("a1:a20")
End Sub
Range("a1").Formula = "=rand()"
End Sub
Sub rasgele2()
Range("a1").Formula = "=rand()*100"
End Sub
Sub rasgele3()
Range("a1").Formula = Rnd
End Sub
BilgeAdam Sayfa 54
Rastgele sayının ondalık kısmını atmak
Sub rasgele4()
End Sub
Dim a
a = Shell("c:\windows\notepad.exe", vbMaximizedFocus)
End Sub
Word
Sub ac2()
Application.ActivateMicrosoftApp xlMicrosoftWord
End Sub
End Sub
BilgeAdam Sayfa 55
Bütün çalıĢma kitaplarını kaydeder
Sub kayıt2()
Dim i As Integer
For i = 1 To Workbooks.Count
Workbooks(i).Save
Next i
End Sub
ActiveWorkbook.Close
End Sub
Sub kapa2()
End Sub
Sub kapa3()
End Sub
Workbooks.Add
End Sub
BilgeAdam Sayfa 56
Var olan çalıĢma kitabını açma belirtilen hücre aralığına veri kaydetmek
Sub ac1()
End Sub
Var olan çalıĢma kitabını açma belirtilen sayfada belirtilen hücre aralığına veri
kaydetmek
Sub ac2()
End Sub
Var olan çalıĢma kitabını açmadan belirtilen sayfada belitirlen hücre aralığına veri
kaydetmek
Sub ac3()
End Sub
Var olan çalıĢma kitabını açmadan belirtilen sayfada belitirlen hücre aralığına veri
kaydetmek ve sayfayı kaydederek kapatmak
Sub ac4()
End Sub
BilgeAdam Sayfa 57
Sayfa açıkken belirtilen sayfada belirtilen hücre aralığına veri kaydetmek
Sub acık()
Workbooks("deneme.xls").Worksheets("sheet2").Range("a1:f10").Value = "domates"
End Sub
Worksheets.Add
End Sub
Sub sayfaekle2()
Worksheets.Add
ActiveSheet.Name = "yeni"
End Sub
ÇalıĢma kiyabına yeni sayfa eklemek sayfayı sona taĢımak ve yeni isim vermek
Sub sayfaekle3()
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "yeni"
End Sub
BilgeAdam Sayfa 58
ÇalıĢma kiyabına yeni sayfa eklemek sayfayı sondan bir önceye taĢımak ve yeni isim
vermek
Sub sayfaekle4()
ActiveWorkbook.Sheets.Add before:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "yeni"
End Sub
Sayfa seçmek
Sub sec1()
Sheets("sheet2").Select
End Sub
Sheets(Array("sheet2", "sheet3")).Select
End Sub
Sayfa taĢımak
Sub tası1()
Worksheets("sheet1").Move after:=Worksheets("sheet3")
End Sub
Sub tası2()
Worksheets("sheet1").Move before:=Worksheets("sheet3")
End Sub
BilgeAdam Sayfa 59
Sayfa sayısını öğrenmek
Sub sayfasayisi1()
MsgBox Worksheets.Count
End Sub
End Sub
MsgBox ActiveSheet.Name
End Sub
Sub adi2()
Range("b2").Value = ActiveSheet.Name
End Sub
BilgeAdam Sayfa 60
Sayfaların isimlerini A1 hücresinden itibaren yazacak
Sub adi3()
Dim i As Integer
For i = 1 To Worksheets.Count
Next i
End Sub
Dim i As Integer
Dim j As Integer
For i = 1 To Worksheets.Count - 1
For j = i + 1 To Worksheets.Count
If Worksheets(j).Name < Worksheets(i).Name Then
Worksheets(j).Move before:=Worksheets(i)
End If
Next j
Next i
End Sub
MsgBox ActiveWindow.Selection.Address
End Sub
Sub adres2()
MsgBox ActiveWindow.Selection.Address(external:=True)
End Sub
BilgeAdam Sayfa 61
Seçimdeki dolu hücre sayısı
Sub doluhucresayisi()
End Sub
Aranan bir kelimenin belirtilen hücre aralığında kaç adet olduğunu bulur
Sub inputbocpenceresi1()
Dim k As Range
Dim i As Integer
If k = b Then i = i + 1
Next k
End Sub
BilgeAdam Sayfa 62
Ġnutbox a girilen hücre aralığına istenilen bilgiyi yazar
Sub inputboxpenceresi2()
End Sub
End Sub
End Sub
End Sub
BilgeAdam Sayfa 63
Offset
Offset kullanım: offset, bulunduğumuz hücreyi referans alarak bu hücereye göre gideceğimiz hücreyi
yazmamızı sağlar. Örneğin Cells(1,1).offset(0,0).value=”adı” kodu cells (1,1) hücresini referans al ve bu hücreden 0
sağa ve 0 sola giderek geldiğin hücrenin içine adı kelimesini yaz anlamına gelir
Uygulamaları
Sub offsetkullan1()
End Sub
Sub offsetkullan2()
End Sub
Sub offsetkullan3()
End Sub
BilgeAdam Sayfa 64
Sub offsetkullan4()
End Sub
End Sub
BilgeAdam Sayfa 65
ġimdi yazacağımız kod A2 hücresinden itibaren sırayla 1 den baĢlayarak
rakamların yazılamsını sağlar. Eğer sırayla yazılan değerlerden aradaki bir değer
silinirse bir sonraki sayının silinen sayıdan sonraki hücreye silinen sayıdan sonraki
değerle yazılasını sağlar. Bu kodu user form hazırlarken de kullanacağız.
Sub offsetkullan6()
Range("a1").Select
ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
If Range("a2").Value = "" Then
Range("a2").Value = 1
Else
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1
End If
End Sub
Program her çalıĢtığında en sona bir rakam daha ekler ve 11, 12 diye devam eder
Eğer aradan silinen değerler olursa program tekrar çalıĢtığında önce eksik
değerleri bir öneki hücreye bakarak o hücrenin bir fazlası değerle doldurur ve tüm
eksik hücreler dolduktan sonra en sondali hücreden sırayla doldurmaya devam
ederek ilerler.
BilgeAdam Sayfa 66
MesajBox
Sub mesajkutusu()
MsgBox cevap
‘msgbox ta yes yada no dediğimizde bir sayısal değer cevap seçeneğine atanır.
‘sayısal değeri görmek için bu satırı yazdık
If cevap = 6 Then
Range("a1").Value = 500
Else
MsgBox "a1 hücresine bir Ģey yaılmayacak"
End If
End Sub
BilgeAdam Sayfa 67
USER FORM VE ÖZELLIKLERI
VBA project: kitabın adı parantez içinde yazar istersek ismini tools>>VBAproject properties ten
değiĢtirebiliriz.
Bölümler
Appearance:elemanın görünüĢü ile ilgili özellikler
Behavior:elemanın durumu, davranıĢı ile ilgili özellikler
Font:yazıtipi ile ilgili özellikler
Misc:herhangi bir grubu bulunmayan farklı özellikler
Picture: resimle ilgili özellikler
Position:elemanın boyutları, form ve ekran üzerindeki konumları ile ilgili özellikler
BilgeAdam Sayfa 68
1.Form : CoommandButton ve TextBox’ı tanıma
Text box‟taki veriyi 1. botona tıklayarak A1
hücresine yazdırmak için
Private Sub CommandButton1_Click()
Range("a1").Value = TextBox1.Text
End Sub
Unload UserForm1
End Sub
End Sub
End Sub
BilgeAdam Sayfa 69
2. form : Oyun makinası
Randomize Timer
a = Int(Rnd() * 100)
b = Int(Rnd() * 100)
c = Int(Rnd() * 100)
Label1.Caption = a
Label2.Caption = b
Label3.Caption = c
If a = b And b = c Then
MsgBox "Büyük ikramiye!.."
ElseIf a = b Or a = c Or b = c Then
MsgBox "Amorti!.."
Else
End If
End Sub
BilgeAdam Sayfa 70
3. form : Hesap makinası
Captionlar
CommandButton1=1
CommandButton2=2
CommandButton3=3
CommandButton4=4
CommandButton5=5
CommandButton6=6
CommandButton7=7
CommandButton8=8
CommandButton9=9
CommandButton10=0
CommandButton11= “C”
CommandButton12= “=”
CommandButton13= “+”
CommandButton14= “-“
CommandButton15= “*”
CommandButton16= “/”
Kodu
Dim a, islem
BilgeAdam Sayfa 71
Private Sub CommandButton7_Click()
TextBox1.Text = TextBox1.Text & "7"
End Sub
BilgeAdam Sayfa 72
Private Sub CommandButton14_Click()
a = Int(TextBox1.Text)
islem = "-"
TextBox1.Text = ""
End Sub
BilgeAdam Sayfa 73
4. form : Kayıt Formu
Forma eklenen nesneler ve nesnelerde yapılan değiĢiklik bilgilerinin tablosu
BilgeAdam Sayfa 74
Kodu
Unload frmpers
End Sub
Range("a2").Select
ActiveCell.Offset(1, 0).Select
Loop
Range("a2").Value = 1
Range("a2").Select
Else
End If
End Sub
BilgeAdam Sayfa 75
Private Sub cmdtemizle_Click()
txtad = ""
txtmeslek = ""
txtdtarihi = ""
txtdyeri = ""
txtad.SetFocus
End Sub
‘formun excel sayfasından bir nesne ile çalıştırılması için (buton, custom menu item vd.)
‘yazılacak modül
Sub goster()
Frmpers.Show
End Sub
BilgeAdam Sayfa 76
Formumuza bir CommandButton ekleyelim bu buton txtad TextBox‟ına
yazacağımız ismin bilgilerini ekrana getirsin
Eklediğimiz CommendButton‟un Name‟ini “cmdpercagir”, caption‟unu “personel
cagir” yaptık.
BilgeAdam Sayfa 77
Kodun son haline cmdpercagir botununa çift tıklayarak eklediğimiz kod
Exit Sub
End If
End If
ilksatir = adsoyad.Row
Set adsoyad = Range("b2:b30").FindPrevious(Range("b30"))
sonsatir = adsoyad.Row
End Sub
BilgeAdam Sayfa 78
Formumuza bir ComboBox ekleyelim bu ComboBox‟tan seçeceğimiz ismin bilgileri
ekrana gelsin
Eklediğimiz ComboBox‟ın Name‟ini “cboad” yaptık.
Rowsource olarak B2:B30 hücre aralığını belirledik
BilgeAdam Sayfa 79
Kodun son haline cboad ComboBox‟ına çift tıklayarak eklediğimiz kod
ilksatir = adsoyad.Row
Set adsoyad = Range("b2:b30").FindPrevious(Range("b30"))
sonsatir = adsoyad.Row
Set adsoyad = Range(Cells(ilksatir, 2), Cells(sonsatir, 2)).Find(cboad.Value, searchdirection:=xlNext,
MatchCase:=False)
End Sub
Yeni eklediğimiz bir kayıdın daha önceden olup olmadığını kontrol etmek için
“cmdkayit” butonuna çift tıklayarak kodun en baĢına Private Sub‟ın altından
itibaren Ģu kodu da ekleyelim
Exit Sub
End If
Next ayni_mi
BilgeAdam Sayfa 80
Eklediğimiz ComboBox‟I kullsnırken dikkat ettiysek ComboBox açıldığında
rowsource‟unda belirttiğimiz B2:b30 arasındaki hücrelerin tamamı gelmektedir. Bu
durum bilgisayarımızın performansını düĢürür. ComboBox‟ta sadece kayıt edilen
hücrelerin gelmesi için önce rowsource‟unu siler ve Userform‟un initialize‟ına Ģu
kodu yazarız
Private Sub UserForm_Initialize()
End Sub
Formumuzun üzerinde bir kapat butonu var fakat form sol üst köĢesinde ki “X”
iĢaretine tıklanarak da kapatılabiliyor. Bu “X” ile kapatılmasını engellemek için
kodumuzun son haline Ģu kodu da ekleyerek formu bitirelim
If closemode=vbFormControlMenu Then
Cancel=true
End If
End Sub
BilgeAdam Sayfa 81
MICROSOFT ACCESS BAĞLANTISI
Bu örneğimizde Excele yazdığımız veriyi Access‟e kaydeden, Accesse yaptığımız kayıtları çağıran, silen,
güncelleyen, Excel‟e çağırdığımız kayıtların maaĢlarını verdiğimiz kritere göre renklendiren ve maaĢın rengine göre
toplama yapan bir kod yazalım.
Bu örnek için öncelikle kullanağımız veri tiplerini tanımalayabilmek için VBA‟in bazı kütüphane
dosyalarını aktif hale getirmemiz gerekiyor.
Bunun için VBA pencereinden tools>>references seçeneğine tıklarız. Bueada bulunan seçeneklerden
Microsoft DAO 3.6 Objects 2.1 Library ve Microsoft ActiveX Data Objects 2.1 Library
seçeneklerinin sol taraflarındaki kutucuğu iĢartleyerek ok düğmesine tıklarız. Artık tanımlayacağımız veri tipleri
VBA tarafından anlaĢılacaktır.
BilgeAdam Sayfa 82
Kodu
1.kod:
excel sayfasında A2, B2, C2 hücrelerindeki verileri C‟nin altında bulanan
“deneme.mdb” veritabanına kaydeder. Eğer girilen kayıdın numarası daha önceden
baĢka bir kayıda verilmiĢse “Kayıt Zaten Var” uyarısını verir.
Sub Ekle()
Do Until rs.EOF
ElseIf Range("a2") <> "" And Range("b2") <> "" And Range("c2") <> "" Then
rs.AddNew
rs.Fields("no").Value = Range("a2").Value
rs.Fields("ad").Value = Range("b2").Value
rs.Fields("maas").Value = Range("c2").Value
rs.Update
MsgBox ("Kayıt YapılmıĢtır")
End If
End Sub
BilgeAdam Sayfa 83
2.kod
Sub VeriAl()
Set rs = conn.OpenRecordset("table1")
Range("e2:g65536").Clear
Do Until rs.EOF
rs.Close
conn.Close
End Sub
BilgeAdam Sayfa 84
3. kod
Sub Veriguncelle()
Do Until rs.EOF
rs.Update
End If
rs.MoveNext
Loop
rs.Close
conn.Close
End Sub
BilgeAdam Sayfa 85
4. kod
Sub Veribul()
Do Until rs.EOF
End If
rs.MoveNext
Loop
rs.Close
conn.Close
End Sub
BilgeAdam Sayfa 86
5.kod
Sub renklendir()
Range("g2").Select
Range(Selection, Selection.End(xlDown)).Select
kacoldu = Selection.Count
Range("g1").Select
Application.ScreenUpdating = False
For I = 1 To kacoldu
End If
End If
End If
Next I
End Sub
BilgeAdam Sayfa 87
6.kod
MaaĢ sütununda kırmızı renkli hücreleri toplar. Toplamı “I2” hücresine yazar.
Sub renktopla()
Dim i As Integer
Dim topla As Integer
topla = 0
For i = 2 To 40
Range("I2") = topla
End If
Next i
End Sub
BilgeAdam Sayfa 88
GRAFIK OLUġTURMAK
Sayfa1 A1:A7 Hücrelerindeki Verilerden Grafik OluĢturmak
Sub grafik()
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Sayfa1").Range("A1:A7")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sayfa1"
End Sub
VAW ÇALMAK
Sub muzik_cal()
If Range("A1").Value > 5 Then
ExecuteExcel4Macro ("SOUND.PLAY(, ""C:\Windows\Media\Tada.wav"")")
End If
End Sub
BilgeAdam Sayfa 89
OFFICE YARDIMCISINI ÇAĞIRMAK
Sub yardımcıkullanmak()
With Assistant.NewBalloon
End With
End Sub
Case 1
Range("a1").Value = "iĢte a1 hücresine yazdım"
Case 2
For i = 3 To 10
Cells(i, 3).Value = i
Next i
Case 3
MsgBox "dediğim giibi bu bir mesaj kutusu"
Case 4
balon.Close
End Select
End Sub
BilgeAdam Sayfa 90
API’LER (APPLICATION PROGRAMMING INTERFACE)
CD Sürücüsünü Açıp Kapamak
Sub CD_ac()
Call mciExecute("Set CDaudio door open")
End Sub
Sub CD_kapa()
Call mciExecute("Set CDaudio door closed")
End Sub
BilgeAdam Sayfa 91
PROJE-1 (Ürünleri Sayfalara Bölmek)
Bu projemizde, bir tekstil firmasının bütün satıĢlarını içeren bir tablodan her ürün için
yeni bir sayfada ürün ile ilgili verileri alıp. Bu veriler üzerinden hesaplamalar yapacak.
Resim 1
BilgeAdam Sayfa 92
1. Ürün Listesi Çıkarılır
Tablonun B sütununda kayıtların ürün bilgisi mevcut. ġu anda tablomuz da13 ürün
mevcut ve ürün isimleri belirli ama bu listedeki ürünlerin sayısı ve adının
değiĢebileceğini varsayarak Ürün sayınsı ve listesini belirleyen bir modül ile baĢlayalım.
Sub UrunListesiVeSayisi()
End Sub
Resim 2
BilgeAdam Sayfa 93
2. Veriler Fitrelenir ve Sayfalara Kopyalanır
For döngüsü içerisinde Aktif olan hücrenin değeri Alınarak Tablodan Filtrelernir.
Filtrelediği alanida yeni bir sayfa açarak kopyalar sonra verinin bulunduğu sayfaya geri
dönüp bu iĢlemi tekrar yapar.
Sub VerileriKopyala()
For i = 1 To ToplamUrunSayisi-1
UrunAdi = ActiveCell.Value
Range("C1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$I$48").AutoFilter Field:=2, Criteria1:=UrunAdi
Selection.CurrentRegion.Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = UrunAdi
ActiveSheet.Paste
UrunToplamlariAl ‘(Üçüncü Modül)
Sheets("Veri").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("K2").Select
ActiveCell.Offset(i+1, 0).Select
Next i
End Sub
Resim 3
BilgeAdam Sayfa 94
3. Ürün Toplamları Alınır
VerileriKopyala Modülünde kopyalama iĢlemi bittikten sonra Veri sayfasına dönmeden
önce Ürünlerin Adet toplamını alan bir modül. Bu modülde ki kodlarıda Verileri Kopyala
modülünün içerisine yazabilirdik ama hem yaptıkları iĢ açısından hemde kodun okunabilirliği
açaısından farklı bir modülde yapmayı doğru bulduk.
Sub UrunToplamlariAl()
Range("H2").Select
Range(Selection, Selection.End(xlDown)).Select
Toplamkayit = Selection.Count
ToplamAdet = 0
For i = 1 To Toplamkayit
ToplamAdet = ToplamAdet + ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Next i
ActiveCell.Value = ToplamAdet
ActiveCell.Offset(0, -1).Value = "Toplam Adet"
End Sub
Resim 4
BilgeAdam Sayfa 95
4. Baslama Modülü Oluşturulur
Projemide Ģu anda kadar 3 modül oluĢturduk bunlardan UrunToplamlariAl modülü
VerileriKopyala modülünün içerisinde çalıĢıyor. Fakat UrunListesiVeSayisi modülünden
sonra VerileriKopyala modülünü tetikleyecek bir kod yok.
Macro çalıĢırken ekranın sabir tutacak ,diğer modüllerin çalıĢtıracak ve son olarak
oluĢturduğu ürün listesini Temizleyecek Baslama modülü oluĢturalım.
Sub BaslamaModulu()
Application.ScreenUpdating = False
UrunListesiVeSayisi
VerileriKopyala
Columns("K:K").Select
Selection.Delete Shift:=xlToLeft
End Sub
Resim 5
BilgeAdam Sayfa 96
PROJE -2 (Rapordan Tablo Oluşturmak)
Bir çoğumuzun makrolara asıl ihtiyaç duyguğumuz anlar genellikle standartların dıĢında
elimize ulaĢan verilerdir. Bazen elimize ulaĢan verilerde boĢ satırlar veya ara toplamlar gibi
kayıtlar bulunabiliyor. Bu durumda Excel fonksiyonları ile bir rapor oluĢturmak imkansız
hale geliyor.
Bu projemizde yukarıda bahsettiğim gibi bir tablomuz var aslında bu tablo zaten bir rapor.
Fakat bu rapordan baĢka raporlar oluĢturmak isteniyor. Nitekim bu tabloda da istenilen rapor;
Bölge Bazında Kredi türlerine göre müĢteri adetleri ve Ana Para Toplamı.
Resim 1
1. BaĢlıklar Yazdırılır.
2. Türe Göre Toplam alınır
3. Sıralama Yapılır
4. Bölgelere Göre Toplam Alınır
5. BaĢlama Modülü oluĢturulur.
BilgeAdam Sayfa 97
1. Başlıklar Yazdırılır
Yeni oluĢacak tablolarımızın baĢlıklarını aynı sayfada bulunan hücrelere yazan bir modül
oluĢturalım.
Sub BasliklariOlustur()
Range("G2") = "ġube"
Range("H2") = "Ürün"
Range("I2") = "MüĢteri Adedi"
Range("J2") = "Ana Para Risk Toplamı"
Range("L2") = "ġube"
Range("M2") = "Ürün"
Range("N2") = "MüĢteri Adedi"
Range("O2") = "Ana Para Risk Toplamı"
End Sub
Resim 2
BilgeAdam Sayfa 98
2. Türe Göre Veri Toplamları
Tablomuzda boĢluklar olduğu için direk olarak toplam alamamaktayız. Bu nedenle
müĢterileri adetini de alarak Konut ve TaĢıt olarak toplamları alan bir tablo oluĢturacağız.
Sub MusteriyeGoreTopla()
i=2
k=0
Do While (i < Range("a65536").End(xlUp).Row)
mus_adet = 0
toplam_ara_para = 0
urun = Cells(i + 1, 2)
Cells(k + 3, 7) = sube
Cells(k + 3, 8) = urun
Cells(k + 3, 9) = mus_adet
Cells(k + 3, 10) = toplam_ara_para
urun = yeni_urun
mus_adet = 0
toplam_ara_para = 0
k=k+1
End If
End If
i=i+1
Loop
End Sub
BilgeAdam Sayfa 99
3. Sıralama Modülü
Makro kullanarak oluĢturduğumuz yeni tabloda, Artık sıralama yaparak verileri toplattıra biliriz.
Sub Sirala()
Range("H7").Select
Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Key2:=Range("H3") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End Sub
Resim 3
Sub BolgelereGoretopla()
k=3
i=3
urun = Range("H3")
Do While (i < Range("H65536").End(xlUp).Row + 1)
yeni_urun = Cells(i + 1, 8)
If (yeni_urun <> urun) Then
Cells(k, 12) = Cells(i, 7)
Cells(k, 13) = Cells(i, 8)
Cells(k, 14) = mus_adet + Cells(i, 9)
Cells(k, 15) = toplam_ara_para + Cells(i, 10)
k=k+1
mus_adet = 0
toplam_ara_para = 0
Else
mus_adet = mus_adet + Cells(i, 14)
toplam_ara_para = toplam_ara_para + Cells(i, 15)
End If
urun = yeni_urun
i=i+1
Loop
End Sub
Resim 4
Sub Basla()
BasliklariOlustur
MusteriyeGoreTopla
Sirala
BolgelereGoretopla
End Sub
Resim 5
Resim 6
Sub UrunToplam()
Range("B2").Select
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sayfa1").Sort
.SetRange Range("A2:I52")
.Header = xlNo
.Apply
End With
Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(8), _
Replace:=True, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2
Range("B:B,H:H").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Sayfa2").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Sayfa1").Select
Application.CutCopyMode = False
Range("A1").Select
Selection.RemoveSubtotal
End Sub
Sub UreticiFirmaToplam()
Range("C2").Select
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Add Key:=Range("C2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sayfa1").Sort
.SetRange Range("A2:I52")
.Header = xlNo
.Apply
End With
Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(8), _
Replace:=True, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2
Range("C:C,H:H").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Sayfa2").Select
Range("D1").Select
ActiveSheet.Paste
Sheets("Sayfa1").Select
Application.CutCopyMode = False
Range("A1").Select
Selection.RemoveSubtotal
End Sub
Sub AylikToplam()
Range("D2").Select
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sayfa1").Sort.SortFields.Add Key:=Range("D2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sayfa1").Sort
.SetRange Range("A2:I52")
.Header = xlNo
.Apply
End With
Selection.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(8), _
Replace:=True, SummaryBelowData:=True
ActiveSheet.Outline.ShowLevels RowLevels:=2
Range("D:D,H:H").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Sayfa2").Select
Range("G1").Select
ActiveSheet.Paste
Sheets("Sayfa1").Select
Application.CutCopyMode = False
Range("A1").Select
Selection.RemoveSubtotal
End Sub
Alttoplam aldığımız Ürünler Firmalar ve ayların toplam tablolarını sayfa2‟ye almıĢ olduk . Fakat
söyle bir sorunla karĢılaĢıyoruz. Bütün tanımların baĢına Toplam kelimesi eklenmiĢ. Ġngilizce
versiyonda bu Total olarak görünülür.
Sub Duzenle()
Sheets("Sayfa2").Select
Range("A1").Select
Cells.Replace What:="Toplam ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows
Range("A1").Select
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
Range("D1").Select
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
Range("G1").Select
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearContents
End Sub
Resim 2
Sub UrunlerGrafigi()
Range("A1").Select
Selection.CurrentRegion.Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sayfa2!$A$1:$B$11")
ActiveChart.ChartType = xl3DPieExploded
ActiveChart.ApplyLayout (1)
ActiveChart.ChartTitle.Select
ActiveChart.ChartArea.Select
ActiveChart.Parent.RoundedCorners = True
ActiveChart.ChartTitle.Text = "Ürünler"
ActiveChart.ChartStyle = 45
End Sub
Resim 3
Sub UreticiFirmaGrafigi()
Range("D1").Select
Selection.CurrentRegion.Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sayfa2!$D$1:$E$5")
ActiveChart.ChartType = xl3DPieExploded
ActiveChart.ApplyLayout (1)
ActiveChart.ChartTitle.Select
ActiveChart.ChartArea.Select
ActiveChart.Parent.RoundedCorners = True
ActiveChart.ChartTitle.Text = "Firmalar"
ActiveChart.ChartStyle = 44
End Sub
Resim 4
Sub AylikGrafik()
Range("G1").Select
Selection.CurrentRegion.Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sayfa2!$G$1:$H$13")
ActiveChart.ChartType = xl3DPieExploded
ActiveChart.ApplyLayout (1)
ActiveChart.ChartTitle.Select
ActiveChart.ChartArea.Select
ActiveChart.Parent.RoundedCorners = True
ActiveChart.ChartTitle.Text = "Aylar"
ActiveChart.ChartStyle = 48
End Sub
Resim 5
Sub Basla()
Sheets("Sayfa1").Select
UrunToplam
UreticiFirmaToplam
AylikToplam
Duzenle
UrunlerGrafigi
UreticiFirmaGrafigi
AylikGrafik
End Sub
Resim 5