excel makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/excel-makro.pdf ·...

108
Excel Makro Visual Basic For Application

Upload: others

Post on 03-Jun-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Excel Makro

Visual Basic For Application

Page 2: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Description: açıklama yazabileceğiniz alandır.

3. Record Macro penceresinde okey‟i tıklayın.

Makronuzu kaydetmeden önce gerekli olan her Ģeyi önceden düĢünmeniz gerekiyor.

4- ĠĢleminizi yapıp stop record düğmesine tıklayınız.

5-Excel 2007 uzantılı dosyalar xlsx olarak kaydedilir. Fakat dosyanızın içerisinde makro varsa uzantının

xlsm olması gerekir. Bunun için dosyanızı kaydederken, Office menüsünün altında Save As komutunu

buradan da Excel Makro- Enable Workbook seçeneği ile kaydedin. Aksi halde makrolarınız

çalıĢmayacaktır.

Page 3: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 4: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 5: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Page 6: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Sayısal Ġmzalar Hakkında

Sayısal imzanın amacı: Makro da ki sayısal imza zarftaki mühür gibidir. Makronun imzalayan geliĢtiriciden

geldiğini ve değiĢikliğe uğramadığını onaylar.

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.

Page 7: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Page 8: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Aritmetiksel Operatörler Sub UsOperatoru1()

Range("a1").Value = 2 ^ 3 'A1 hücresine 8 yazar

Range("a2").Value = 4 ^ 2 'A2 hücresine 16 yazar

End Sub

Sub UsOperatoru2()

Range("b1").Value = Range("a1") ^ Range("a2")

End Sub

Sub CarpimOperatoru()

Range("b1").Value = Range("a1") * Range("a2")

End Sub

Sub BolumOperatoru()

Range("b1").Value = Range("a1") / Range("a2")

End Sub

Sub TamsayiBolumOperatoru()

Range("b1").Value = Range("a1") \ Range("a2")

'sonucu tabana yuvarlar virgülden sonrasını atar

End Sub

Page 9: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sub ModOperatoru()

Range("b1").Value = Range("a1") Mod Range("a2")

End Sub

Sub ToplamOperatoru()

Range("b1").Value = Range("a1") + Range("a2")

End Sub

Sub CikartmaOperatoru()

Range("b1").Value = Range("a1") - Range("a2")

End Sub

Sub AndOperatoru()

Range("b1").Value = Range("a1") & Range("a2")

End Sub

Page 10: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

KarĢılaĢtırma Operatörleri Sub EsitOperatoru1()

Range("b1").Value = (150 = 100)

Range("b2").Value = (100 = 100)

End Sub

Sub EsitOperatoru2()

MsgBox 150 = 100

MsgBox 100 = 100

End Sub

Sub EsitOperatoru3()

If Range("a1") = Range("a2") Then

Range("b1") = "eĢit"

Else

Range("b1") = "eĢit değil"

End If

End Sub

Sub FarkliOperatoru()

Range("b1").Value = (150 <> 100) 'farklı olduğu için doğru

Range("b2").Value = (100 <> 100) 'farklı olmadığı için yanlıĢ

End Sub

Sub KucukOperatoru()

Range("b1").Value = (150 < 100) 'true

Range("b2").Value = (100 < 100) 'true

Range("b3").Value = (90 < 100) 'false

End Sub

Sub BuyukOperatoru()

Range("b1").Value = (150 > 100) 'true

Range("b2").Value = (100 > 100) 'false

Range("b3").Value = (90 > 100) 'false

End Sub

Page 11: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sub KucukesitOperatoru()

Range("b1").Value = (150 <= 100) 'false

Range("b2").Value = (100 <= 100) 'true

Range("b3").Value = (90 <= 100) 'true

End Sub

Sub BuyukesiOperatoru()

Range("b1").Value = (150 >= 100) 'true

Range("b2").Value = (100 >= 100) 'true

Range("b3").Value = (90 >= 100) 'false

End Sub

Sub LikeOperatoru1()

'iki string değeri karĢılaĢtırmak için kullanılır

MsgBox Range("b1") Like Range("b2")

End Sub

Sub LikeOperatoru2()

MsgBox Range("c1") Like "c*"

End Sub

Page 12: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Mantıksal Operatorler

Sub NotOperatoru1()

MsgBox Not False 'True

End Sub

Sub NotOperatoru2()

MsgBox Not True 'False

End Sub

Sub AndOperatoru1()

MsgBox True And True 'true

End Sub

Sub AndOperatoru2()

If Range("a1") > 10 And Range("a2") < 5 Then

MsgBox Range("a1") + Range("a2")

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

Page 13: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Help ten data type summary yazarsak değiĢken tiplerini görürüz.

Kaç Türlü DeğiĢken Vardır Ve Nerede Tanımlanır.

Iki türlü değiĢken vardır. Global değiĢken ve local değiĢken. DeğiĢkenler hazırladığımız program

modülünün içinde iki yerde tanımlanırlar. Prosedürün içinde ya da prosedürün dıĢında.

Global değiĢkenler, programın bütün prosedürleri tarafından kullanılabilirler. Bunlar prosedürün dıĢında

tanımlanırlar, tanımlandıkları yere genel olarak “tanımlama bölümü denir”. Genel değiĢkenler tanımlanırken

Public anahtar sözcüğü kullanılır.

Yerel değiĢkenler sadece tanımlandıkları prosedürlerde ve prosedürün içinde kullanılır. Dim ve static

anahtar sözcüklerinden herhangi biri ile kullanılırlar. Genelde dim sözcüğü yaygındır. Görevleri bitince hafızadan

silinirler. Satatic olarak tanımlanan değiĢkenlerde ise durum farklıdır. Prosedür durdurulsa ve tekrar çalıĢtırılsada ilk

değerini korur ve tekrar çağrıldığında değiĢken en son değerlerini kullanır.

Page 14: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Local Ve Global DeğiĢken

Bu örneklerde değiĢken tiplerinin farklı kullanımlarına baktık. Local ve Global

değiĢken mantığını inceledik

Sub degiskenler1()

„sadece değiĢken tanımlamayı gösterdik

Dim adi As String

Dim soyadı As String

Dim yası As Integer

Dim dogum_tarihi As Date

Dim dogum_yeri As Date

End Sub

Sub degiskenler2()

„değiĢkenlerin yan yana tanımlanmasını gösterdik

Dim adı As String, soyadı As String, yası As Integer

End Sub

Page 15: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Public z

‘tanımladığımız z değiĢkeni modülün en üstüne yazılır ve bu Ģekilde global tanımlanmıĢ

‘olur

Sub ilk1()

‘değiĢkenleri anlatırken ilk defa inputbox kullandık.

‘inputbox’taki açıklama,baĢlık,kendinden tanımlı değer ile x ve y eksenlerinden uzaklığın

‘girilmesini gösterdik

x = InputBox("ilk sayıyı yazın", "baĢlık", 5, 1000, 1000)

y = InputBox("ilk sayıyı yazın", "baĢlık", , 1000, 1000)

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

Page 16: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sub ilk2()

‘inputboxtan girilen değerleri integer’a çevirdik

x = Int(InputBox("ilk sayıyı yazın", "baĢlık", 5, 1000, 1000))

y = Int(InputBox("ilk sayıyı yazın", "baĢlık", , 1000, 1000))

z = x + y

MsgBox z

End Sub

Sub ilk3()

‘inputboxtan girilen değerleri decimal’a dönüĢtürdük

x = CDec(InputBox("ilk sayıyı yazın", "baĢlık", 5, 1000, 1000))

y = CDec(InputBox("ilk sayıyı yazın", "baĢlık", , 1000, 1000))

z = x + y

MsgBox z

End Sub

Sub ilk4()

x = CDec(InputBox("ilk sayıyı yazın", "baĢlık", 5, 1000, 1000))

y = CDec(InputBox("ilk sayıyı yazın", "baĢlık", , 1000, 1000))

z = x + y

End Sub

Page 17: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

x = CDec(InputBox("ilk sayıyı yazın", "baĢlık", 5, 1000, 1000))

y = CDec(InputBox("ilk sayıyı yazın", "baĢlık", , 1000, 1000))

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

Costants(Sabitler) DeğiĢken Tanımlama

Hazırlanan programlarda bazen hiç değiĢmemesini istediğimiz değiĢkenler kullanmak isteyebiliriz. Bu

durumda en üst kısma sabit olarak tanımlanırlar ve tekrar atama yapılmadan kullanılırlar

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

If alan > 78.5 Then

MsgBox buyuk & ":=" & alan

ElseIf alan = 78.5 Then

MsgBox tamam & ":=" & alan

ElseIf alan < 78.5 Then

MsgBox kucuk & ":=" & alan

End If

End Sub

Page 18: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

If… Then… Else

Bu komutun çeĢitli kullanıĢ tarzları vardır.

If Ģart Then ifade

Uygulaması

Sub kosul1()

If range(“a1”).value=10 then range (“b1”).value=500

End if

If Ģart then

Ifadeler

End If

Uygulaması

Eğer a1 hücresinin değeri 10 ise b1 hücresine 500 değerini ata.

Sub kosul2()

If Range("a1") = 10 Then

Range("b1") = 500

Range("c2") = 400

Range("d3") = 300

Range("e4") = 200

Range("f5") = 100

End If

End Sub

Page 19: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 20: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

If Ģart Then

ifadeler

ElseIf Ģart Then

Ifadeler

ElseIf Ģ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

Page 21: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Select case değiĢken

Case durum1

Komutlar

Case durum2

Komutlar

End select

Uygulaması

Sub kosul5()

Select Case Range("a1").Value

Case 1

Range("b1").Value = "bir"

Case 2

Range("b1").Value = "iki"

Case 3

Range("b1").Value = "üç"

Case 4

Range("b1").Value = "dört"

Case 5

Range("b1").Value = "beĢ"

End Select

End Sub

Page 22: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

For sayaç=baĢlangıç to bitiĢ step artıĢ

Komutlar

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

Page 23: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Aynı iĢlemi For.. Next döngüsü ile yapalım.

Sub dongu1()

Dim i As Integer

For i = 1 To 10

Cells(i, 1).Value = i

'cells(satır numarası, sütun numarası) Ģeklinde yazılan bir hücre tanımıdır

Next 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

Page 24: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 25: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Ġç 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

Page 26: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

For Each… Next

For each eleman in grup

Komutlar

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.

A1 hücresinden D10 hücresine kadar tüm hücrelere X yazalım

Sub dongu4()

Dim i As Range „dikkat edilirse i range olarak tanımlandı

For Each i In Range("a1:d10")

i.Value = "X"

Next i

End Sub

Page 27: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

For Each k In Range("a1:d10")

If k > 0 And k < 10 Then

k.Interior.ColorIndex = 45

k.Font.ColorIndex = 1

ElseIf k > 10 And k < 50 Then

k.Interior.ColorIndex = 6

k.Font.ColorIndex = 3

ElseIf k > 50 And k < 100 Then

k.Interior.ColorIndex = 37

k.Font.ColorIndex = 9

End If

Next k

End Sub

Page 28: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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… Loop While

Do

Komutlar

Loop while koĢul

Uygulaması

Sub doloop2()

Dim i As Integer

i = 1

Do

Cells(i, 1).Value = i

i = i + 1

Loop While i <= 10 'aradaki komutları yap, ta ki koĢul sağlanıncaya kadar

End Sub

Page 29: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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… Loop Until

Do

Komutlar

Loop until koĢul

Uygulaması

Sub doloop4()

Dim i As Integer

i = 1

Do

Cells(i, 1).Value = i

i = i + 1

Loop Until i > 10

End Sub

while koĢul doğru olduğu sürece döner

until koĢul doğru olana kadar döner

Page 30: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Loop While i <= 6

End Sub

Do…Loop While kullanarak 10‟a kadar olan sayıların toplamını bulalım

Sub doloop6()

Dim i As Integer

i = 1

toplam = 0

Do

toplam = toplam + i

Cells(i, 1).Value = toplam

i = i + 1

Loop While i <= 10

End Sub

Page 31: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

C1 hücresinin yanıp sönmesini sağlayalım

Sub yanson()

Dim durum As Boolean

Dim i As Integer

Do While (True)

If durum = True Then

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

Page 32: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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:

Yazdığımız komut satırlarından biri A1 hücresine caner yazdırırken biz bu satırın

goto döngüsü kullanarak atlnmasını sağlıyoruz

Sub go_to()

Dim i As Integer

i = InputBox("bir sayı giriniz")

GoTo topla

Range("a1").Value = "deneme"

topla:

i = i + 20

MsgBox "girdiğiniz sayının 20 fazlası:" & i

End Sub

Page 33: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Tanımladığımız function‟lar Ġnsert>>Function pencersesinden User Defined kısmından çalıĢtırılır

Stopaj hesaplayan bir fonksiyon hazırlayalım

Function stopaj(tutar)

stopaj = tutar * 0.15

End Function

Tutar ve oran değerlerini dıĢarıdan aldığımız ve bunun sonucunda kdv

hesapladığımız bir fonksiyon yazalım. Dikkat edildiği üzere fonksiyonlarda sonuç

fonksiyonun ismine atanır.

Function kdv1(tutar, oran)

kdv = tutar * oran / 100

End Function

Page 34: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Function kdv2(tutar, tur)

If tur = "temel" Then

oran = 2

ElseIf tur = "yiyecek" Then

oran = 8

ElseIf tur = "temizlik" Then

oran = 10

Else

oran = 25

End If

kdv2 = tutar * oran / 100

End Function

Page 35: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Yazdığımız türlerin dıĢındaki bir tür geldiğinde hücreye “lütfen türü kontrol ediniz”

yazan kodu ekleyelim

Function kdv3(tutar, tur)

If tur = "temel" Then

oran = 1

ElseIf tur = "yiyecek" Then

oran = 8

ElseIf tur = "temizlik" Then

oran = 10

ElseIf tur = "lüks" Then

oran = 25

Else

kdv3 = "Lütfen türü kontrol ediniz"

GoTo son „ya da end function kullanılabilir

End If

kdv3 = tutar * oran / 100

son:

End Function

Aynı fonksiyonu select case ile yazalım

Function kdv4(tutar, tur)

Select Case tur

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

kdv5 = tutar * oran / 100

End Function

Page 36: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 37: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Döngü Ve Karar Yapılarının Kullanıldığı Basit Uygulamalar

Parola doğru girilene kadar parola soran bir kod yazalım

Sub parola1()

Do

P = InputBox("parola")

If P = "123" Then

Exit Sub

Else

End If

Loop

End Sub

Aynı parola kodunda maksimum 3 hak verilmesini sağlayalım

Sub parola2()

Do

P = InputBox("parola")

i = i + 1

Loop Until P = "123" Or i = 3

If P = "123" Then

MsgBox "hoĢgeldin"

End If

End Sub

Page 38: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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"

ElseIf t < s Then

MsgBox "yukarı"

Else

MsgBox "aĢağı"

End If

i = i + 1

Loop Until t = s Or i = 5

End Sub

Page 39: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

a = Int(InputBox("1. sayıyı girinizi"))

b = Int(InputBox("2. sayıyı girinizi"))

c = Int(InputBox("3. sayıyı girinizi"))

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

Page 40: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Page 41: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

s = Int(InputBox("dizinin büyüklüğünü giriniz"))

ReDim x(1 To s)

For i = 1 To s

x(i) = Int(InputBox(i & ". sayıyı giriniz"))

Next i

For i = 2 To s

For j = 1 To i - 1

If x(j) > x(i) Then

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

Page 42: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Hücre aralığı seçmek

Sub makrom4()

Range("a3:c10").Select

End Sub

Sub makrom5()

Range("a1,b3:d5,c10:c12,f8").Select

End Sub

Page 43: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Satır seçmek

Sub makrom6()

Rows("14:14").Select

End Sub

Birden fazla satır seçmek için

Sub makrom7()

Range("2:2,5:5,11:14").Select

End Sub

Sütun seçmek

Sub makrom8()

Columns("b:b").Select

End Sub

Birden fazla sütunu seçmek

Sub makrom9()

Range("a:a,c:c,f:j").Select

End Sub

Bütün hücreleri seçmek

Sub makrom10()

Cells.Select

End Sub

Seçili hücrelere ait satırın tamamını seçmek

Sub makrom11()

Selection.EntireRow.Select

End Sub

Page 44: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Seçili hücrelere ait sütunun tamamını seçmek

Sub makrom12()

Selection.EntireColumn.Select

End Sub

Aktif hücrenin etrafındaki dolu hücreleri seçmek

Sub makrom13()

ActiveCell.CurrentRegion.Select

End Sub

Seçili hücrenin etrafındaki dolu hücreleri seçmek

Sub makrom15()

Selection.CurrentRegion.Select

End Sub

Seçili olan hücrelerin sayısını öğrenmek

Sub makrom16()

Range("a1").Value = Selection.Count

End Sub

Seçimin satır sütun sayısını bulmak

Sub makrom17()

MsgBox Selection.Rows.Count

MsgBox Selection.Columns.Count

End Sub

Page 45: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Seçili alan sayısını bulmak

Sub makrom18()

MsgBox Selection.Areas.Count

End Sub

Hücreye formül yazdırmak

Sub makrom19()

Range("b3").Formula = "=b1+b2"

End Sub

Sub makrom20()

Range("b3").Formula = "=sum(b1:b2)"

End Sub

r1 c1 baĢvuru stili

Sub makrom21()

Range("a1").FormulaR1C1 = "=R[4]C[2]+R[5]C[2]" 'a1 den sonraki 4. satır ve 2. sütun

End Sub

Sub makrom22()

Range("a1").FormulaR1C1 = "=sum(RC[1]+R[1]C[1])"

End Sub

Sub makrom23()

Range("a1").FormulaR1C1 = "=IF(RC[2]=15,""c1 deki sayı 15"",""c1'deki sayı 15 değil"")"

End Sub

Page 46: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Hücreye değer atamak

Sub makrom24()

Range("b2").Value = 125

End Sub

Seçili hücreye değer atamak

Sub makrom25()

Range("b2").Value = "merhaba"

End Sub

Seçili hücreye değer atamak

Sub makrom26()

Range("b2").Text = "merhaba"

End Sub

Seçili hücreye değer atamak

Sub makrom27()

Range("b2").Select

Range("b2").Value = 125

End Sub

Seçili hücreye değer atamak

Sub makrom28()

Range("b2").Select

Selection.Value = 125

End Sub

Seçili olan bütün hücrelere aynı değeri atamak

Sub makrom29()

Range("a1,b3:d5,c10:c12,f8").Select

Selection.Value = 150

End Sub

Page 47: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Seçili hücrelere değer atadıktan sonra A100 hücresi seçili kalsın

Sub makrom31()

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

'atif penceredeki kaydırma çubuğunu 1. satıra getir

'hangi rakamı yazarsak o rakama ait satır ekranın en baĢında olur.

End Sub

Hücre ve yazıtipinin (font) özelliklerini değiĢtirmek

Sub makrom33()

Range("b5").Value = "caner kılınç"

Range("b5").Interior.ColorIndex = 3 '3 kırmızıdır

End Sub

Page 48: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Bir önceki kodun yazı rengini değiĢtirelim geniĢliğini de değiĢtirelim

Sub makrom35()

Range("b5").Value = "caner kılınç"

Range("b5").Interior.ColorIndex = 3

Columns("b:b").ColumnWidth = 35

Range("b5").Font.ColorIndex = 6 'font: yazı tipi

End Sub

Bir önceki kodun bold ve italic özelliğini aktifleĢtirelim

Sub makrom36()

Range("b5").Value = "caner kılınç"

Range("b5").Interior.ColorIndex = 3

Columns("b:b").ColumnWidth = 35

Range("b5").Font.ColorIndex = 6 'font: yazı tipi

Range("b5").Font.Size = 20

Range("b5").Font.Bold = True

Range("b5").Font.Italic = True

End Sub

Page 49: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 50: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Hücre Ġçini Otomatik Doldurmak

Hücre içini otomatik olarak doldurmak

a1 hücresine 500 girdik f1 e kadar doldurmak istiyoruz

Sub sagadoldur()

Range("a1:f1").FillRight

End Sub

Sub soladoldur()

Range("a1:f1").FillLeft

End Sub

Sub asagıyadoldur()

Range("a1:a10").FillDown

End Sub

Page 51: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Hücreye Rastgele Sayı Atamak

Sub rasgele1()

Range("a1").Formula = "=rand()"

End Sub

Sub rasgele2()

Range("a1").Formula = "=rand()*100"

End Sub

Sub rasgele3()

Range("a1").Formula = Rnd

End Sub

Page 52: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Rastgele sayının ondalık kısmını atmak

Sub rasgele4()

Range("a1").Formula = Int(Rnd * 100)

End Sub

BaĢka Programları Çağırmak

hesap makinesi

Sub ac1()

Dim a

a = Shell("c:\windows\notepad.exe", vbMaximizedFocus)

End Sub

Word

Sub ac2()

Application.ActivateMicrosoftApp xlMicrosoftWord

End Sub

Aktif ÇalıĢma Kitabını Kaydetmek

Sub kayıt1()

ActiveWorkbook.Save 'belgelerime kaydeder

End Sub

Page 53: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Aktif ÇalıĢma Kitabını Kapatmak

Sub kapa1()

ActiveWorkbook.Close

End Sub

Sub kapa2()

ActiveWorkbook.Close True 'kayderek kapamak için

End Sub

Sub kapa3()

Workbooks("book2.xls").Close 'book 2 yi önceden kaydetmeliyiz.

End Sub

Yeni ÇalıĢma Kitabı Eklemek

Sub ekle()

Workbooks.Add

End Sub

Page 54: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Var olan çalıĢma kitabını açma belirtilen hücre aralığına veri kaydetmek

Sub ac1()

Workbooks.Open Filename:="C:\Documents and Settings\caner\Desktop\deneme.xls"

Range("a1:f10").Value = "merhaba"

End Sub

Var olan çalıĢma kitabını açma belirtilen sayfada belirtilen hücre aralığına veri

kaydetmek

Sub ac2()

Workbooks.Open Filename:="C:\Documents and Settings\caner\Desktop\deneme.xls"

Worksheets("sheet2").Select

Range("a1:f10").Value = "merhaba"

End Sub

Var olan çalıĢma kitabını açmadan belirtilen sayfada belitirlen hücre aralığına veri

kaydetmek

Sub ac3()

Workbooks.Open Filename:="C:\Documents and Settings\caner\Desktop\deneme.xls"

Worksheets("sheet2").Range("a1:f10").Value = "merhaba"

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()

Workbooks.Open Filename:="C:\Documents and Settings\caner\Desktop\deneme.xls"

Worksheets("sheet2").Select

Range("a1:f10").Value = "merhaba"

Workbooks("deneme.xls").Close True

End Sub

Page 55: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

ÇalıĢma Kiyabına Yeni Sayfa Eklemek

Sub sayfaekle1()

Worksheets.Add

End Sub

ÇalıĢma kiyabına yeni sayfa eklemek ve eklenen sayfaya isim vermek

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

Page 56: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Ç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

Birden fazla sayfayı seçmek

Sub sec2()

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

Page 57: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sayfa sayısını öğrenmek

Sub sayfasayisi1()

MsgBox Worksheets.Count

End Sub

5 sayfa ekledikten sonra uyaracak ve sayfa eklemeyecek

Sub sayfasayisi2()

If Worksheets.Count < 5 Then

Worksheets.Add

Else

MsgBox "sayfa sıyınız:" & Worksheets.Count

End If

End Sub

Aktif sayfanın adını öğrenmek

Sub adi1()

MsgBox ActiveSheet.Name

End Sub

Aktif sayfa ismini B2 hücresine yazar

Sub adi2()

Range("b2").Value = ActiveSheet.Name

End Sub

Page 58: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sayfaların isimlerini A1 hücresinden itibaren yazacak

Sub adi3()

Dim i As Integer

For i = 1 To Worksheets.Count

Cells(i, 1).Value = Worksheets(i).Name

Next i

End Sub

Sayfaları küçükten büyüğe doğru sıralamak

Sub sırala()

Dim i As Integer

Dim j As Integer

If Worksheets.Count = 1 Then Exit Sub

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

Aktif penceredeki seçimin adresini verir

Sub adres1()

MsgBox ActiveWindow.Selection.Address

End Sub

Sub adres2()

MsgBox ActiveWindow.Selection.Address(external:=True)

End Sub

Page 59: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Seçimdeki dolu hücre sayısı

Sub doluhucresayisi()

Dim adet As Integer

adet = Application.CountA(Selection)

MsgBox "seçimdeki dolu hücre sayısı: " & adet

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

b = InputBox("kelimeyi yazın.", "kelime gir")

i = 0

For Each k In Range("a1:f10")

If k = b Then i = i + 1

Next k

MsgBox "aranan kelimeden " & i & " adet bulunmaktadır."

End Sub

Page 60: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Ġnutbox a girilen hücre aralığına istenilen bilgiyi yazar

Sub inputboxpenceresi2()

hucre = InputBox("hücre aralığını girin")

Range(hucre).Value = InputBox("hücrelere yazılacak kelimeyi girin")

End Sub

Ġnutbox a girilen hücre aralığını seçer

Sub inputbocpenceresi3()

hucre = InputBox("hücre aralığını girin")

Range(hucre).Select

End Sub

Ġnputbox fonksiyonunda application nesnesi

Sub appinputbox1()

hucre = Application.InputBox("hücre aralığını giriniz.")

Range("d1").Value = hucre

End Sub

Seçtiğimiz hücrenin içini d1:f5 e yazdırır

Sub appinputbox2()

hucre = Application.InputBox("hücre aralığını giriniz.")

Range("d1:f5").Value = hucre

End Sub

Page 61: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

Cells(1, 1).Value = "adı"

Cells(1, 2).Value = "soyadı"

Cells(1, 3).Value = "d_tarihi"

Cells(1, 4).Value = "d_yeri"

End Sub

Sub offsetkullan2()

Cells(1, 1).offset(0, 0).Value = "adı"

Cells(1, 1).offset(0, 1).Value = "soyadı"

Cells(1, 1).offset(0, 2).Value = "d_tarihi"

Cells(1, 1).offset(0, 3).Value = "d_yeri"

End Sub

Sub offsetkullan3()

Cells(3, 4).offset(-1, 0).Value = "d3 referansımdır"

End Sub

Page 62: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Sub offsetkullan4()

Range("a1").offset(0, 0).Value = "adı"

Range("a1").offset(0, 1).Value = "soyadı"

Range("a1").offset(0, 2).Value = "d_tarihi"

Range("a1").offset(0, 3).Value = "d_yeri"

Range("a1").offset(1, 0).Value = "caner"

Range("a1").offset(1, 1).Value = "kılınç"

Range("a1").offset(1, 2).Value = "1977"

Range("a1").offset(1, 3).Value = "samsun"

End Sub

Bir önceki kodun aktif hücreye uyarlanması

Sub offsetkullan5()

ActiveCell.offset(0, 0).Value = "adı"

ActiveCell.offset(0, 1).Value = "soyadı"

ActiveCell.offset(0, 2).Value = "d_tarihi"

ActiveCell.offset(0, 3).Value = "d_yeri"

ActiveCell.offset(1, 0).Value = "caner"

ActiveCell.offset(1, 1).Value = "kılınç"

ActiveCell.offset(1, 2).Value = "1977"

ActiveCell.offset(1, 3).Value = "samsun"

End Sub

Page 63: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 64: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Mesajbox

Sub mesajkutusu()

cevap = MsgBox("a1 hücresine 500 yazsın mı?", vbYesNo)

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

Page 65: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 66: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

2. butona tıklayarak formu kapatmak için

Private Sub CommandButton2_Click()

Unload UserForm1

End Sub

Formun üzerine bir kez tıklayınca mesaj kutusunun açılması için

Private Sub UserForm_Click()

MsgBox "formun herhangi bir yerine tıkladınız"

End Sub

Butonların görünen ismini kodla değiĢtirmek için

Private Sub UserForm_Initialize()

CommandButton1.Caption = "veri ekle"

CommandButton2.Caption = "formu kapat"

End Sub

Page 67: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

2. Form : Oyun Makinası

Private Sub CommandButton1_Click()

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

Page 68: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Private Sub CommandButton1_Click()

TextBox1.Text = TextBox1.Text & "1"

End Sub

Private Sub CommandButton2_Click()

TextBox1.Text = TextBox1.Text & "2"

End Sub

Private Sub CommandButton3_Click()

TextBox1.Text = TextBox1.Text & "3"

End Sub

Private Sub CommandButton4_Click()

TextBox1.Text = TextBox1.Text & "4"

End Sub

Private Sub CommandButton5_Click()

TextBox1.Text = TextBox1.Text & "5"

End Sub

Private Sub CommandButton6_Click()

TextBox1.Text = TextBox1.Text & "6"

End Sub

Page 69: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Private Sub CommandButton7_Click()

TextBox1.Text = TextBox1.Text & "7"

End Sub

Private Sub CommandButton8_Click()

TextBox1.Text = TextBox1.Text & "8"

End Sub

Private Sub CommandButton9_Click()

TextBox1.Text = TextBox1.Text & "9"

End Sub

Private Sub CommandButton10_Click()

TextBox1.Text = TextBox1.Text & "0"

End Sub

Private Sub CommandButton11_Click()

TextBox1.Text = ""

End Sub

Private Sub CommandButton12_Click()

b = Int(TextBox1.Text)

Select Case islem

Case "+"

s = a + b

Case "-"

s = a - b

Case "x"

s = a * b

Case "/"

s = a / b

End Select

TextBox1.Text = s

End Sub

Private Sub CommandButton13_Click()

a = Int(TextBox1.Text)

islem = "+"

TextBox1.Text = ""

End Sub

Page 70: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Private Sub CommandButton14_Click()

a = Int(TextBox1.Text)

islem = "-"

TextBox1.Text = ""

End Sub

Private Sub CommandButton15_Click()

a = Int(TextBox1.Text)

islem = "x"

TextBox1.Text = ""

End Sub

Private Sub CommandButton16_Click()

a = Int(TextBox1.Text)

islem = "/"

TextBox1.Text = ""

End Sub

Page 71: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

4. Form : Kayıt Formu

Forma eklenen nesneler ve nesnelerde yapılan değiĢiklik bilgilerinin tablosu

Page 72: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Kodu

Private Sub cmdkapat_Click()

Unload frmpers

End Sub

Private Sub cmdkayit_Click()

Range("a2").Select

Do While Not IsEmpty(ActiveCell) „daha önce kullanacağımızı söylediğimiz kod

ActiveCell.Offset(1, 0).Select

Loop

If Range("a2").Value = "" Then

Range("a2").Value = 1

Range("a2").Select

Else

ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1

End If

ActiveCell.Offset(0, 1).Value = txtad.Text

ActiveCell.Offset(0, 2).Value = txtmeslek.Text

ActiveCell.Offset(0, 3).Value = txtdtarihi.Text

ActiveCell.Offset(0, 4).Value = txtdyeri.Text

aciklama = "kayit islemi tamamlandi"

dugme = vbOKOnly + vbInformation + vbDefaultButton1

baslik = "KAYIT"

MsgBox aciklama, dugme, baslik

End Sub

Page 73: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 74: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Page 75: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Kodun son haline cmdpercagir botununa çift tıklayarak eklediğimiz kod

Private Sub cmdpercagir_Click()

If txtad.Value = "" Then

MsgBox "Lütfen ad soyad kutusuna geçerli personel girin."

Exit Sub

End If

Set adsoyad = Range("b2:b30").Find(txtad.Value, searchdirection:=xlNext, MatchCase:=False)

If adsoyad Is Nothing Then

MsgBox "aradiginiz ad ve soyadda kayit yok"

Exit Sub

End If

ilksatir = adsoyad.Row

Set adsoyad = Range("b2:b30").FindPrevious(Range("b30"))

sonsatir = adsoyad.Row

Set adsoyad = Range(Cells(ilksatir, 2), Cells(sonsatir, 2)).Find(txtad.Value, searchdirection:=xlNext,

MatchCase:=False)

txtad.Value = Cells(ilksatir, 2).Value

txtmeslek.Value = Cells(ilksatir, 3).Value

txtdtarihi.Value = Cells(ilksatir, 4).Value

txtdyeri.Value = Cells(ilksatir, 5).Value

End Sub

Page 76: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 77: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Kodun son haline cboad ComboBox‟ına çift tıklayarak eklediğimiz kod

Private Sub cboad_Change()

Set adsoyad = Range("b2:b30").Find(cboad.Value, searchdirection:=xlNext, MatchCase:=False)

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)

txtmeslek.Value = Cells(ilksatir, 3).Value

txtdtarihi.Value = Cells(ilksatir, 4).Value

txtdyeri.Value = Cells(ilksatir, 5).Value

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

For Each ayni_mi In Range("b2:b30")

If ayni_mi.Value = txtad.Value Then

MsgBox "Bu personel kayitlarimizda zaten var"

Exit Sub

End If

Next ayni_mi

Page 78: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

cboad.RowSource = "sheet1!b2:b" & WorksheetFunction.CountA(Range("b2:b30")) + 1

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

Private Sub UserForm_QueryClose(cancel as integer,closemode as integer)

If closemode=vbFormControlMenu Then

Cancel=true

End If

End Sub

Eğer kodumuzun en üstündeki boĢ alana “Option Explicit » yazmıĢ olsaydık

kodumuz sırasında tanımlanmayan değiĢkenler için hata verecekti. Bu da bizi bütün

değiĢkenleri tanımlamaya zorunlu bırakacaktı. DeğiĢken tanımlamak bprogram

performansı açısından önemlidir.

Page 79: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Page 80: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

Dim conn As Database

Dim rs As DAO.Recordset

Dim a As Integer

a = 1

Set conn = OpenDatabase("c:\\deneme.mdb")

Set rs = conn.OpenRecordset("table1")

Do Until rs.EOF

If Range("a2").Value = rs.Fields("no") Then

bulundu = True

End If

rs.MoveNext

Loop

If bulundu = True Then

MsgBox ("Kayıt Zaten Var")

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

Page 81: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

2.kod

Access‟te kayıtlı olan verileri E2 hücresinden itibaren listeler.

Sub VeriAl()

Dim conn As Database

Dim rs As DAO.Recordset

Dim a As Integer

a = 2

Set conn = OpenDatabase("c:\\deneme.mdb")

Set rs = conn.OpenRecordset("table1")

Range("e2:g65536").Clear

Do Until rs.EOF

Cells(a, 5).Value = rs.Fields("no")

Cells(a, 6).Value = rs.Fields("ad")

Cells(a, 7).Value = rs.Fields("maas")

rs.MoveNext

a = a + 1

Loop

rs.Close

conn.Close

End Sub

Page 82: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

3. kod

Numarasını A2 hücresine yazdığımız veriyi günceller

Sub Veriguncelle()

Dim conn As Database

Dim rs As DAO.Recordset

Dim a As Integer

Set conn = OpenDatabase("c:\\deneme.mdb")

Set rs = conn.OpenRecordset("Table1")

deger = InputBox("Lütfen Bir Ġsim Girin")

deger1 = InputBox("Lütfen Ücret Girin")

Do Until rs.EOF

If Range("a2").Value = rs.Fields("no").Value Then

MsgBox ("Kayıt Güncellendi")

rs.Edit

rs.Fields("no").Value = Range("a2").Value

rs.Fields("ad").Value = deger

rs.Fields("maas").Value = Val(deger1)

rs.Update

End If

rs.MoveNext

Loop

rs.Close

conn.Close

End Sub

Page 83: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

4. kod

Numrasını A2 hücresine yazdığımız verinin bilgilerini getirir.

Sub Veribul()

Dim conn As Database

Dim rs As DAO.Recordset

Dim a As Integer

Set conn = OpenDatabase("c:\\deneme.mdb")

Set rs = conn.OpenRecordset("Table1")

Do Until rs.EOF

If Range("a2").Value = rs.Fields("no").Value Then

Range("a2").Value = rs.Fields("no").Value

Range("b2").Value = rs.Fields("ad").Value

Range("c2").Value = rs.Fields("maas").Value

End If

rs.MoveNext

Loop

rs.Close

conn.Close

End Sub

Page 84: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

5.kod

Girilen maaĢa göre maaĢların arka plan rengini kırmızı yapar.

Eğer girilen maaĢa eĢit maaĢların renklendirilmesi isteniyorsa “0” ,

Girilen maaĢtan büyük maaĢların renklendirilmesi isteniyorsa “2”,

Girilen maaĢtan küçük maaĢların renklendirilmesi isteniyorsa “1” seçeneği seçilir.

Sub renklendir()

Range("g2").Select

Range(Selection, Selection.End(xlDown)).Select

kacoldu = Selection.Count

Range("g1").Select

Range("g2:g" & kacoldu + 1).Interior.ColorIndex = xlNone

sor = InputBox("MaaĢı gireceksiniz")

sonuc = InputBox("Büyük için 2----Küçük için 1----EĢit için 0 Girin")

Application.ScreenUpdating = False

For I = 1 To kacoldu

If Val(sonuc) = 1 And Range("g" & I + 1) < Val(sor) Then

Range("g" & I + 1).Interior.Color = vbRed

End If

If Val(sonuc) = 0 And Range("g" & I + 1) = Val(sor) Then

Range("g" & I + 1).Interior.Color = vbRed

End If

If Val(sonuc) = 2 And Range("g" & I + 1) > Val(sor) Then

Range("g" & I + 1).Interior.Color = vbRed

End If

Next I

End Sub

Page 85: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

If Range("g" & i).Interior.Color = vbRed Then

topla = topla + Range("g" & i).Value

Range("I2") = topla

End If

Next i

End Sub

Page 86: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Page 87: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

OFFICE YARDIMCISINI ÇAĞIRMAK

Sub yardımcıkullanmak()

With Assistant.NewBalloon

.Heading = "excel sayfası ile irtibat"

.Text = "aĢağıdaki düğmelere tıklayarak seçeneklerdeki iĢleri yaptırabilirsiniz"

.Icon = msoIconTip

.Labels(1).Text = "a1 hücresine yazar"

.Labels(2).Text = "c sütununa sayı yazdırır"

.Labels(3).Text = "mesaj kutusu açar"

.Labels(4).Text = "yardımcıyı kapatır"

.BalloonType = msoBalloonTypeButtons

.Mode = msoModeModeless

.Callback = "makrom"

.Button = msoButtonSetOkCancel

.Show

End With

End Sub

Sub makrom(balon As Balloon, secenek As Long, mtk As Long)

Select Case secenek

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

Page 88: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

API’LER (APPLICATION PROGRAMMING INTERFACE)

CD Sürücüsünü Açıp Kapamak

Private Declare Function mciExecute Lib "winmm.dll" _

(ByVal lpstrCommand As String) As Long

Sub CD_ac()

Call mciExecute("Set CDaudio door open")

End Sub

Sub CD_kapa()

Call mciExecute("Set CDaudio door closed")

End Sub

Windows'un Bilgisayarı Kapat Penceresini ÇalıĢtırmak

Private Declare Function SHShutDownDialog Lib "shell32" _

Alias "#60" (ByVal YourGuess As Long) As Long

Private Sub ShutDown()

SHShutDownDialog 0

End Sub

Page 89: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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.

Tablomuz aĢağıdaki gibidir.

1. Ürün Listesi Çıkarılır.

2. Veriler Fitrelenir ve Sayfalara Kopyalanır.

3. Ürün Toplamları Alınır.

4. Baslama Modülü OluĢturulur

Resim 1

Ürün SatıĢlarını gösteren kaynak tablo

Page 90: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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()

Columns("B:B").AdvancedFilter Action:=xlFilterCopy,CopyToRange:=Range("K1"), Unique:=True

Range("K2").Select

Range(Selection, Selection.End(xlDown)).Select

ToplamUrunSayisi = Selection.Count

End Sub

ToplamUrunSayisi değiĢkeni farklı baĢka bir modülde de kullanılacağı için

sayfanın en üstüne Tanımlanır.

Dim ToplamUrunSayisi As Integer

Resim 2

UrunListesiVeSayisi Modülü sonrasında ki görünüm.

Page 91: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 3

VerileriKopyala Modülü sonrasında ki görünüm.

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

Page 92: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 4

UrunToplamlariAl Modülü sonrasında ki görünüm.

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()

Dim ToplamAdet As Integer

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

Page 93: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 5

Ürün Rapor iĢeminden sonra ki görünüm.

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

Ve bu modülü çalıĢtıracak bir buton ekleyelim.

Buton eklemek için Developer Ribonundan Insert Menüsünü kullanınız.

Açılan pencereden BaslamaModulunu seçelim.

Page 94: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

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.

Resim 1

MüĢteri Toplam ve BölgeToplamlarını gösteren kaynak tablo.

Page 95: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

BasliklariOlustur Modülünden sonraki görünüm.

Page 96: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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)

If Right(Cells(i, 1).Value, 7) = "Bölgesi" Then

sira = Application.WorksheetFunction.Find(" ", Cells(i, 1), 1)

sube = Left(Cells(i, 1), sira - 1)

mus_adet = 0

toplam_ara_para = 0

urun = Cells(i + 1, 2)

ElseIf (Left(Cells(i, 1).Value, 7) = "MüĢteri") Then

toplam_ara_para = toplam_ara_para + Cells(i, 5)

mus_adet = mus_adet + 1

yeni_urun = Cells(i + 1, 2)

If (yeni_urun <> urun) Then

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

Page 97: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

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

Sıralama Modülünden sonraki görünüm.

Page 98: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

4. Bölgelere Göre Toplam

Yeni oluĢturduğumuz tabloda bölge tekrarları mevcut. Bunlarında toplamını oluĢturacak yeni bir

tablo yapması için benzer mantıkla bir yeni bir tablo yapılır.

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

Sıralama Modülünden sonraki görünüm.

Page 99: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

5. Baslama Modülü Oluşturulur

Projemide Ģu anda kadar 4 modül oluĢturduk. Macro çalıĢırken diğer modüllerin

çalıĢtıracak Baslama modülü oluĢturalım.

Sub Basla() BasliklariOlustur

MusteriyeGoreTopla

Sirala

BolgelereGoretopla

End Sub

Ve bu modülü çalıĢtıracak bir buton ekleyelim.

Buton eklemek için Developer Ribonundan Insert Menüsünü kullanınız.

Açılan pencereden BaslamaModulunu seçelim.

Resim 5

Butona Basıdıktan sonraki görünüm.

Page 100: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

PROJE -3 (Grafik Rapor Oluşturmak)

Bu projemizde yine bir tekstil firmasının bütün satıĢlarını içeren bir tablodan Ürünler

bazında Firmlar Bazında ve Aylar bazında Grafik yapan bir makro oluĢturacağız.

Tablomuz AĢağıdaki gibidir

1. Ürün SatıĢları Tablosu.

2. Üretici Firma SatıĢ Tablosu

3. Aylıl SatıĢ Tablosu

4. Ġsimler Düzenlenir.

5. Ürün Grafiği OluĢturulur

6. Firmalar Grafiği OluĢturulur

7. Aylık Grafik OluĢturulur

8. Baslama Modülü OluĢturulur

Resim 6

Ürün SatıĢlarını gösteren kaynak tablo

Page 101: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

1. Ürün Satışları Tablosu

Tablonun B sütununda kayıtların ürün bilgisi mevcut. Ürün adına göre sıralama iĢlemi

yaptırılır. Daha Sonra Ürünlere göre altoplam alınır. Alttoplam modunda bütün toplamlar

sayfa 2 ye kopyalanır. Sayfa 1‟e geri gelerek alttoplam kaldırılır.

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

Page 102: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

2. Üretici Firma Satış Tablosu

Tablonun C sütununda kayıtların Üretici Firma bilgisi mevcut. Üretici Firma adına göre

sıralama iĢlemi yaptırılır. Daha Sonra Üretici Firmaya göre altoplam alınır. Alttoplam

modunda bütün toplamlar sayfa 2 ye kopyalanır. Sayfa 1‟e geri gelerek alttoplam

kaldırılır.

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

Page 103: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

3. Aylık Satış Tablosu

Tablonun D sütununda kayıtların Ay bilgisi mevcut. Aylara göre sıralama iĢlemi

yaptırılır. Daha Sonra Aylara göre altoplam alınır. Alttoplam modunda bütün toplamlar

sayfa 2 ye kopyalanır. Sayfa 1‟e geri gelerek alttoplam kaldırılır.

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.

Page 104: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

4. İsimler Düzenlenir

Sayfa2‟de oluĢan tablolarda Toplam kelimesini çıkartmak için bir modul yazılır. Ayrıca

Alttoplamdan dolayı tablolarımızın sonunda genel toplam satırı bulunmakdatır. Bu

satırlarıda silelim.

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

Duzenle modülünden sonraki görünüm.

Page 105: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

5. Urunler Grafiği Oluşturulur

Artık Grafik oluĢturmak için verimiz hazır. Ürünlerin bulunduğu alan seçilerek grafik

oluĢturulur.

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

UrunlerGrafigi modülünden sonraki görünüm.

Page 106: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 4

UreticiFirmalaGrafigi modülünden sonraki görünüm.

6. Firma Grafiği Oluşturulur

Firmaların bulunduğu alan seçilerek grafik oluĢturulur.

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

Page 107: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 5

AylarGrafigi modülünden sonraki görünüm.

7. Aylık Grafik Oluşturulur

Ayların bulunduğu alan seçilerek grafik oluĢturulur.

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

Page 108: Excel Makro - sametyazici.comsametyazici.com/wp-content/uploads/2017/06/Excel-Makro.pdf · Makrolarda Güvenlik Ve Makro Açarken Gelen Uyarı Örnek 1 de yaptığımız Tablo makrosu

Resim 5

Basla modülünden sonraki görünüm.

8. Baslama Modülü Oluşturulur

Projemide Ģu anda kadar 4 modül oluĢturduk. Macro çalıĢırken diğer modüllerin

çalıĢtıracak Baslama modülü oluĢturalım.

Sub Basla() Sheets("Sayfa1").Select

UrunToplam

UreticiFirmaToplam

AylikToplam

Duzenle

UrunlerGrafigi

UreticiFirmaGrafigi

AylikGrafik

End Sub