You are on page 1of 68

0

BİLGİSAYAR YAZILIM UYGULAMALARI

DERS NOTU
1

1.BİLGİSAYAR PROGRAMI

Bir problemin bilgisayar ortamında çözümü hatasız ve etkin bir bilgisayar programı ile
gerçekleştirilebilmektedir. Problemin bilgisayar ortamında çözümünde aşağıdaki aşamalardan
geçilmelidir.

1.1. PROBLEMİN ANALİZ EDİLMESİ

Problemin çözümüne yardımcı olacak girdilerin, bu girdiler ile yapılacak işlemlerin ve bu işlemler
sonucunda elde edilecek çıktıların belirlenmesi aşamalarından oluşmaktadır.

1.2. BİLGİSAYAR PROGRAMI AKIŞININ OLUŞTURULMASI

Problemin çözümü için oluşturulacak bilgisayar programının akış diyagramının çizilmesi aşamasıdır.
Bilgisayar programında değişik koşullara bağlı olarak yapılacak işlemleri ve program akışını gösteren
diyagrama akış diyagramı (Flowcharts) adı verilmektedir. Bu diyagramlarda programlama diline
bağlı olarak, program kapsamında geçekleştirilecek olan işlemleri temsil eden temel şekiller
kullanılmaktadır.

Bir akış diyagramı dolayısıyla bilgisayar programı, Girdiler, İşlemler ve Çıktılar olmak üzere üç ana
kısımdan oluşmaktadır.

BAŞLA

GİRDİLER

İŞLEMLER

ÇIKTILAR

DUR
2

Akış diyagramı ile program kapsamında yapılacak işler ve gidiş yolu (akışı) ayrıntılı ve açık bir
şekilde ortaya konulmaktadır. Böylece programın yazılımı, kontrolü ve hatalarından
arındırılması kolaylaşmaktadır. Akış diyagramları bir nevi bilgisayar programın planıdır. Bu
plana göre bilgisayar programı oluşturulmaktadır.

1.3. BİLGİSAYAR PROGRAMININ YAZILMASI VE KONTROLÜ

Bu aşama kod yazma ve programı çalıştırma aşamasıdır. Çizilen akış diyagramı dikkate
alınarak, işlemleri gerçekleştirecek olan programlama diline ait kodlar belirlenir. Akış
diyagramındaki program akışına bağlı olarak bu kodlar yazılır ve programlama aşaması
tamamlanır. Program değişik koşullar için çalıştırılır ve çıktılar kontrol edilir. Eğer hata
bulunursa program yeniden gözden geçirilerek hata ayıklama işlemi yapılır.

1.4. AKIŞ DİYAGRAMLARINDA KULLANILAN SİMGELER VE ANLAMLARI

Bilgisayar programını oluşturan girdiler, aritmetik ve mantıksal işlemler, döngü yapıları ve


çıktılar, akış diyagramında çeşitli simgeler ile gösterilmektedir. Aşağıda akış diyagramlarında
kullanılan bazı simgeler karşılarında yerine getirdikleri görevler yazılarak açıklanmıştır.
3

BAŞLA
Başla-Start- Run (Program başı; Program bu simgeyle başlar)

DUR
Stop-Dur-Son (Program Sonu; Program bu simgeyle sona erer.)

GİRİŞ
Giriş (Program girdilerinin yazıldığı simge)

ÇIKIŞ Çıkış (Program çıktılarının yazıldığı simge)

İŞLEM
İşlem ( Değişkene atama işlemi yada herhangi bir işlemi gösteren
simge)

E
Koşul

H
Koşul ( Mantıksal karşılaştırma veya karar simgesi)

Döngü (Başlangıç değerinden başlayarak artış miktarına göre bitiş


i= x,y,z

değerine kadar devam eden döngü simgesi; i: Sayaç adı,


x:başlangıç değeri, y: bitiş değeri, z: artış miktarı)

Programın akışını gösteren yön simgeleri


4

2.MS EXCEL ve VBA MAKRO PROGRAMLAMA

MS Excel programı uygulama yazılımlarından biri olan elektronik hesap tablosu yazılımları
içerisinde incelenmektedir. MS Excel, aritmetik işlemlerin ve mantıksal karşılaştırmaların
yapılmasına, değişik türdeki grafiklerin ve tabloların oluşturulmasına, veri çözümleme
işlemlerinin gerçekleştirilmesine, makro programların yazılmasına olanak sağlayan ve çeşitli
gelişmiş fonksiyonlara (Tarih ve Saat, Matematik ve Trigonometri, İstatistiksel, Arama ve
Başvuru, Veritabanı, Metin, Mantıksal, Bilgi, Mühendislik, Küp) sahip bir programdır.

MS Excel, MS Office toplu program listesi içerisinde yer alan bir programdır. MS Excel
programı, Başlat→ Tüm Programlar→ Microsoft Office→ MS Excel 2010 tıklanarak
çalıştırılmaktadır. Bunun dışında başlat menüsündeki program listesine aktarılarak yada
masaüstüne kısa yol oluşturularak da MS Excel 2010 programı çalıştırılabilir. MS Excel 2010

programının simgesi olup, dosya uzantısı .xlsx dir. Ms Excel dosyası bir bütün olarak
çalışma kitabı olarak tanımlanmaktadır. Bundan dolayı program çalıştırıldığında dosya adı
Kitap olarak adlandırılmaktadır.

MS Excel 2010 ekranı aşağıdaki elemanlardan oluşmaktadır.

1- Hızlı erişim araç çubuğu 8- Satırlar


2- Şerit (Ribon) 9- Hücreler
3- Ad kutusu 10- Düşey kaydırma çubuğu
4- Formül Çubuğu 11- Yatay kaydırma çubuğu
5- Sütun adres çubuğu 12- Çalışma sayfası adres çubuğu
6- Sütunlar 13- Çalışma sayfaları
7- Satır adres çubuğu 14- Durum çubuğu
5
1

3 4

5,6

7,8

9 10

12,13
11

14

2.1. MS EXCEL 2010 VERİ GİRİŞİ

MS Excel’de verilerin girildiği ortam satırlardan, sütunlardan ve satır ve sütunların birleşmesinden


meydana gelen hücrelerden oluşmaktadır. Satırların adresleri rakamlarla (1,2,3,…….) sütunların
adresleri harflerle (A,B,C,…….) belirtilmektedir. Hücrelerin adresleri ise önce sütun adresi daha
sonra satır adresi yazılarak belirlenmektedir. Örneğin, 3. Satır 4. Sütunun kesişmesinden meydana
gelen hücrelerinin adresi “D3” olarak adreslenmektedir. MS Excel’de veri girişi hücre bazında
gerçekleştirilmektedir. Veri girilecek hücre seçilir. Veri, seçilen hücreye yazılır ve daha sonra enter
ya da yön tuşları yardımıyla veri girişi onaylanır. Hücrenin seçimi ise aşağıdaki şekilde görüldüğü
gibi imlecin hücreye fare ya da klavye tuşları yardımıyla getirilmesiyle gerçekleşmektedir. Aşağıdaki
şekilde imleç B3 hücresinde bulunmaktadır. Ayrıca ad kutusunda da seçilen hücrenin adresi
mevcuttur.

Hücrelere girilen verilerin düzeltilmesi için verinin bulunduğu hücre seçilerek F2 tuşu ile bu
hücredeki veri düzeltilebilir.
6

2.2. MS EXCEL 2010’DA HÜCRELERİN BİÇİMLENDİRİLMESİ

MS Excel 2010’da seçilen hücrelerin çeşitli özelliklerine göre biçimleri Hücreleri Biçimlendir
penceresi yardımıyla ayarlanmaktadır. Hücreleri Biçimlendir penceresine, seçilen hücreler üzerinde
farenin sağ tuşu tıklanarak ulaşılacağı gibi, Ctrl→1 kısa yol tuşu ile de ulaşılabilir.

Yukardaki şekilden de görüleceği üzere Hücreleri Biçimlendir penceresi çeşitli sekmelerden


oluşmaktadır. Bu sekmeler Sayı, Hizalama, Yazı tipi, Kenarlık, Dolgu, Koruma sekmeleridir. Bu
sekmelerin yerine getirdiği işlevler aşağıda ayrıntılı bir şekilde açıklanmıştır.

Sayı: Bu sekme ile hücrelere girilen verilerin tipleri tanımlanmaktadır. Girilen verilerin tipleri bu
sekmede, tamsayı ya da ondalıklı sayı, finansal, tarih, saat, yüzde oranı, kesir, bilimsel, Metin, Özel
yada isteğe uyarlanmış olarak belirlenebilmektedir. Bu sekmede hiçbir ayarlama yapılmaz ise Genel
biçimli hücreler olarak kalmaktadır.

Hizalama: Bu sekme ile hücreler içerisine girilen verilerin yatay ve dikey yöndeki hizaları ayarlanır.
Girilen verilerin hangi yönde yazılacağı (metin yönü) belirlenir. Seçilen hücreler tek bir hücre olarak
birleştirmeleri hücreleri birleştir komutu ile bu sekme üzerinde gerçekleştirilir.
7

Yazı Tipi: Hücrelere giren verilerin yazı tipleri, yazı tipi stilleri, boyutları, yazı renkleri, ve efektleri
bu sekmeden ayarlanmaktadır.

Kenarlık: Hücrelerin yatay ve dikey kenarlıklarının oluşturulduğu sekmedir.


8

Dolgu: Hücrelerin dolgu renklerinin verildiği (hücrelerin boyandığı) ve desenlerinin belirlendiği


sekmedir.

Koruma: Bu sekmede hücrelerin kilit ayarları yapılmaktadır. Sekme ilk açıldığında kilitli seçeneği
işaretlidir. Gözden geçir sekmesinden Sayfa koruması verildiğinde bu hücrelere hiçbir şekilde
müdahale yapılamayacaktır. Örneğin bir MS Excel tablosu veya makro program oluşturulduğunda
sayfa koruması yapılmadan kullanıcıların veri girebileceği ve biçimlerini değiştirebilecekleri
hücrelerin kilitleri Kilitli seçeneğinin yanındaki seçim kaldırılarak açılması gerekir. Sayfa
korunduktan sonra kilitli seçeneği kaldırılan hücrelerde işlem yapılabilecek diğer hücrelerde hiçbir
şekilde işlem yapılamayacaktır.
9

2.3. MS EXCEL VİSUAL BASİC FOR APPLİCATİON (VBA) MAKRO PROGRAMLAMA

MS Excel programı üzerinde, kullanıcıların problemlerinin çözümüne yönelik çeşitli programları


geliştirebilecekleri ve çeşitli işlemleri otomatik yaptırabilecekleri Makro adı verilen bir özellik
bulunmaktadır. MS Excel içerisinde kendisine uyarlanmış olarak bulunan, Visual Basic Programlama
dili ile makro programlar oluşturulmaktadır. Bundan dolayı bu programlamaya Visual Basic For
Application (VBA) Makro Programlama adı verilmektedir. Bu programlama dili yardımıyla makro
komutları oluşturularak, kullanıcıların programlarını oluşturmasına ve MS Excel üzerinde
gerçekleştirdiği birçok işlemi tek bir seferde otomatik olarak gerçekleştirilmesine olanak
sağlanmaktadır.

MS Excel 2010 programında Makro ile ilgili komutlara ve Visual Basic ortamına Şerit (Ribon)
üzerinde bulunan Geliştirici sekmesi yardımıyla ulaşılmaktadır. MS Excel 2010 programı ilk
yüklenip çalıştırıldığında şerit üzerinde geliştirici sekmesi bulunmamaktadır.

2.3.1. MS Excel 2010 Programına Geliştirici Sekmesinin Eklenmesi

MS Excel 2010 programı ilk yüklenip çalıştırıldığında şerit üzerinde geliştirici sekmesi
bulunmamaktadır. Geliştirici sekmesi Dosya→ Seçenekler→ Şeridi Özelleştir seçeneği tıklanır.
Açılan pencerenin sağ tarafında bulunan ana sekmeler içerisindeki Geliştirici sekmesinin yanında
bulunan onay kutusu işaretlenir ve Tamam komut düğmesine tıklanır. Böylece Geliştirici sekmesi
şerit üzerine eklenmiş olacaktır.
10

2.3.2. Geliştirici Sekmesindeki Komutlar

Visual Basic: Bu komut düğmesi tıklandığında makro programların oluşturulduğu ve kodların


yazıldığı Visual basic programlama diline ait pencereye ulaşılmaktadır.

Makrolar: Komut düğmesine tıklandığında, MS Excel çalışma kitabında makro olarak


oluşturulan tüm programların listelendiği bir pencere açılır.

Bu pencere yardımıyla visual basic ortamında oluşturulan makrolar öncelikle seçilip, Çalıştır komut
düğmesi tıklanarak çalıştırılabilir, Sil komut düğmesi tıklanarak silinebilir ya da Düzenle komut
düğmesi seçilerek visual basic kod sayfası ortamına gidilerek tekrar düzenlenebilir.
11

Makro Kaydet: Bu komut yardımıyla kullanıcı tarafından MS Excel çalışma


sayfasında yapılan tüm işlemler Visual Basic Makro koduna çevrilerek bir makro programı haline
getirilir. Bu makro çalıştırıldığında makro kodu olarak kaydedilen tüm işlemler tek seferde otomatik
olarak gerçekleştirilmiş olur. Makro kaydet komut düğmesine tıklandığında aşağıdaki komut
penceresi açılmaktadır.

Bu pencerede makronun adı yazılır, istenirse bu makroyu çalıştıran CTRL→ kısayol tuşu ve
makronun saklanacağı yer belirlenir. Daha sonra Tamam komut düğmesine tıklanarak makro kaydı
başlatılır.

Makro kaydet komutunun yerine Kaydı Durdur komutu yerleşir. Kullanıcı


tarafından çalışma sayfaları üzerinde yapılan işlemler tamamlandığında Kaydı Durdur komut
düğmesine tıklanarak makro kaydı tamamlanmış olmaktadır.

Makro kaydet komutunu bir örnek ile açıklayacak olursak; Geliştirici → Makro Kaydet komutu
seçilir. Açılan pencereden makro adı Bicim Kısayol tuşu Ctrl→Shift→L, Makronun saklanacağı yer
Bu çalışma Kitabı olarak belirleyelim ve Tamam komut düğmesine tıklayalım. Bu aşamadan sonra
kayıt başlamıştır ve Makro Kaydet komutunun yerinde Kaydı Durudur komutu yer alacaktır.
12

Daha sonra çalışma sayfası üzerinde aşağıdaki işlemler yapılsın;

1- A1:D5 hücre aralığı seçilsin


2- Bu aralıktaki hücrelere kenarlıklar çizilsin
3- Yazı tipi Times New Roman, yazı tipi büyüklüğü 12 punto ve yazı tipi stili Koyu olarak
ayarlansın.
4- A1:D1 hücre aralığı seçilsin ve bu aralıktaki hücrelerin dolgu rengi Bordo olarak belirlensin.

Tüm bu işlemler tamamlandıktan sonra Kaydı Durdur komut düğmesine tıklanarak makro kaydı
tamamlanmış olacaktır. Geliştirici→Makrolar→Bicim Makrosu seçilip Çalıştır komut düğmesine
tıklandığında yukarıdaki adımlarda belirtilen tüm işlemler otomatik olarak tek seferde yapılacaktır.
Aşağıdaki ekran görüntüsü elde edilecektir.
13

Bu komut düğmesi ile çalışma sayfası üzerine makro programın ara yüzünü oluşturmak için
gerekli olan çeşitli denetimler görüntülenecektir.

Bu denetimler yukarıdaki şekilden de görüleceği üzere Form Denetimleri ve ActiveX Denetimleri


olarak iki kısımda listelenmektedir. Kullanılacak denetim yukarıdaki listeden seçilerek çalışma
sayfası üzerine kullanıcının uygun gördüğü bölgeye istenilen büyüklükte çizilebilir ve adlandırılıp
yazı tipi de değiştirilebilir. Makro programlamada çok sık kullanılan denetim, Form Denetimleri
içerisinde yer alan ve sol üst köşede bulunan Komut Düğmesi denetimidir. Bu denetim VBA
ortamında oluşturulan bir makro programı çalıştırmakla görevlidir. Çalışma sayfası üzerine eklenir
ve denetim üzerine gelinip, Fare Sağ Tuş→Makro Ata işlemi yapılır. Bu işlem sonucunda Makro
Ata penceresi ekrana gelir bu komut düğmesinin çalıştıracağı makro program listeden seçilerek
Tamam komut düğmesine tıklanır. Böylece form denetimi komut düğmesine seçilen makro atanmış
olacaktır. Örneğin daha öce oluşturulan Bicim Makrosunun Komut düğmesine eklenmesi ile ilgili
şekil aşağıda verilmiştir.
14

: Makro içeriğinde bazen virüs yazılımı barındırabilir. Bu nedenle bu tür makroyu


içeren bir MS Excel dosyası açıldığında makro etkinleşip bilgisayar sistemine zarar verebilmektedir.
Bunu önlemek için makronun güvenlik ayarlarının yapılması gerekmektedir. Bu komut düğmesi ile
makroların güvenlik ayarları yapılmaktadır. Düğme tıklandığında Güven Merkezi penceresi açılır ve
bu pencerede makro ayarları için geçerli olan seçenekler bulunmaktadır.

Bu seçeneklerden “Bildirimde bulunarak tüm makroları devre dışı bırak” seçeneği seçilmelidir.
Kullanıcı makro içeren bir MS Excel dosyası açtığında makro devre dışı bırakılacak, kullanıcıya bu
dosyanın makro içerdiği bildirilerek, makroyu etkinleştirip etkinleştirmeyeceği sorulacaktır.
15

2.3.3. VBA Ortamında Makro Kodlarının Yazılması

Visual Basic ortamında kodlar çalışma sayfalarına ait kod sayfalarına, Modüle sayfalarına ya da
Kullanıcı Formu (User Form) kod sayfalarına yazılmaktadır. Bu kod sayfalarına VBA ortamında
Project – VBA Project (Project Explorer) penceresinden ulaşılmaktadır.

Yukarıdaki şekilden de görüleceği üzere VBA ortamında 3 adet çalışma sayfası 1’er adet Kullanıcı
Formu ve Modüle nesneleri bulunmaktadır. Makro kodu hangi nesnenin kod sayfasına yazılacaksa o
nesne Project – VBA Project (Project Explorer) penceresinden tıklanır. Çalışma sayfalarına ya da
Modüle kod sayfalarına ait kodların yazılmasında bağımsız makro program parçaları kodlanabilir.
Kullanıcı formuna ait kod sayfalarında ise kullanıcı formu ve bu forma ait nesnelerin makro kodları
birlikte yazılmaktadır. Kullanıcı formu kod yazım kuralları daha sonraki bölümlerde işlenecektir.

Makro programının kodları, program girdilerinin alındığı ve program sonunda elde edilecek çıktıların
gönderileceği çalışma sayfasının altına yazılması gerekmektedir. Bu durumda hücre adreslerinin
önüne çalışma sayfalarının adreslerinin yazılmasına gerek olmayacaktır. Eğer bu kod Modüle
sayfasına yazılacaksa o zaman girdilerin alındığı ve çıktıların gönderildiği çalışma sayfasının
adresinin hücre adreslerinin önünde belirtilmesi gerekmektedir.

Bir problemin çözümü için VBA ortamında makro programının oluşturulmasında aşağıdaki aşamalar
takip edilmelidir.
16

Makro programın adının belirlenerek program kod aralığının oluşturulması: Bu aşama kod
yazımının başlangıcıdır. Makro programının kodlarının yazımına Sub deyimi ile başlanır. Bu
deyimden sonra programın adı yazılır ve Enter tuşuna basılarak aşağıdaki görüntü elde edilir.

Sub program_adi( )

Kodlar

End Sub

Böylece kod yazma aralığı da tanımlanmış olur. Diğer kodlar Sub program_adi( )- End Sub aralığına
yazılmaktadır. Program adında Türkçe karakterler ve alt çizgi ( _ ) dışında noktalama işaretleri
kullanılmamalıdır. Program adı harf ve rakamlardan oluşabilir. Fakat rakamlar program adında ilk
karakter olarak kullanılmazlar.

Makro program girdilerinin çalışma sayfasından programa alınması: Program girdileri çalışma
sayfalarındaki hücrelere girilmiş ise bu girdiler hücre adresleri ile programa alınmaktadır. Bu veriler
birbirinden bağımsız hücrelerde bulunacağı gibi belli bir hücre aralığında da bulunabilir. VBA
ortamında yazılan makro programa ait kodlarda hücre adresleri iki şekilde yazılmaktadır. Örneğin C5
hücresinin makro program kodu içerisindeki adresi Cells(5,3) yada Range(“C5”) dir. Cells deyiminde
parantez içerisinde ilk önce hücrenin kaçıncı satırda olduğunu belirten satır numarası araya virgül
konarak hücrenin kaçıncı sütunda olduğunu gösteren sütun numarası yazılır. C5 hücresi 5. Satır,
3.Sütunda bulunduğu için adresi Cells(5,3) olmaktadır.

Makro programında girdiler, işlemler aşamasında kullanılmaktadır. Bu nedenle işlem aşamasında


girdinin bulunduğu hücrenin adresi direkt olarak kullanılacağı gibi bu hücre adresi bir değişkene
atanarak atanan değişken kullanılmaktadır. Örneğin A1 ve B1 hücrelerindeki değerleri toplayan bir
makro program oluşturalım. Çalışma sayfasındaki A1 hücresinin VBA ortamındaki adresi Cells(1,1),
B1 hücresinin adresi Cells(1,2) olmaktadır. A1 hücresindeki ( Cells(1,1) ) değeri x değişkenine, B1
hücresindeki ( Cells(1,2) ) değeri y değişkenine atayarak toplama işlemini yaparak bir z değeri elde
edildiğinde program kodu ;

Sub toplama ( )
x=Cells(1,1)
y=Cells(1,2)
z=x+y
End Sub
17

olarak elde edilmektedir. Kodlardan da dikkat edileceği üzere girdiler programa alınırken öncelikle
Değişken adı =Hücre adresi şeklinde tanımlama yapılmalıdır. Değişken ataması yapılmasaydı bu
durumda program kodu;
Sub toplama ( )
z= Cells(1,1) + Cells(1,2)
End Sub

olmaktadır. Komut yapılarında da görüleceği üzere değişken atamadan yapılan program kodları daha
az satıra sahip olmaktadır. Ancak özellikle kapsamlı programların yazımında işlemler aşamasında
komutların anlaşılması zorlaşacaktır. Bundan dolayı mutlaka girdiler bir değişkene atanarak
kullanılmalıdır.

Makro programının yerine getireceği işlemlerin belirlenmesi: İşlemler aşaması programın akışına
göre aritmetik işlemler, mantıksal karşılaştırmalar (karar yapıları) ve döngü yapılarından
oluşmaktadır.

Makro program çıktılarının çalışma sayfasına yazdırılması: Makro programında işlemler


aşamasından sonra çıktılar oluşmaktadır. Bu çıktılar hücre adresleri belirtilerek çalışma sayfasına
yazdırılır. Yukarıdaki örneği tekrar ele alırsak programın girdileri A1 hücresindeki ( Cells(1,1) ) x
değeri B1 hücresindeki ( Cells(1,2) ) y değeri, işlemleri x ve y değerlerinin toplanması, çıktısı ise
toplama işleminin sonucu elde edilen z değeridir. Bu z değerini de C1 (Cells(1,3)) hücresine
yazdıralım. Bu durumda program kodu;

Sub toplama ( )
x=Cells(1,1)
y=Cells(1,2)
z=x+y
Cells(1,3)=z
End Sub
olarak elde edilmektedir. Kodlardan da dikkat edileceği üzere çıktılar çalışma sayfasına yazdırılırken,
girdilerin tersi olarak öncelikle Hücre adresi=Değişken adı şeklinde tanımlama yapılmalıdır.
Değişken ataması yapılmasaydı bu durumda program kodu;
Sub toplama ( )
Cells(1,3)= Cells(1,1) + Cells(1,2)
End Sub
olmaktadır. Komut yapılarında da görüleceği üzere değişken atamadan yapılan program kodları daha
az satıra sahip olmaktadır. Ancak özellikle kapsamlı programların yazımında işlemler aşamasında
komutların anlaşılması zorlaşacaktır. Bundan dolayı mutlaka çıktılarda, girdilerde olduğu gibi bir
değişkene atanmalıdır.
18

2.3.4. VBA Ortamında Kullanılan Bazı Operatörler

VBA ortamında gerçekleştirilen makro programlarda çeşitli işlemleri ve karşılaştırmaları yerine


getiren operatörler kullanılmaktadır. Bu bölümde aritmetik işlemlerde kullanılan aritmetik operatörler
ve mantıksal karşılaştırmalarda kullanılan karşılaştırma operatörleri aşağıdaki tabloda verilmiştir.

Aritmetik Operatörler Mantıksal Karşılaştırma Operatörleri


Yerine Getirdiği Yerine Getirdiği
Operatör Operatör
İşlem İşlem
+ Toplama > Büyüktür
- Çıkarma < Küçüktür
* Çarpma >= Büyük Eşit
/ Bölme <= Küçük Eşit
^ Üs Alma = Eşittir
Bölme işleminde
Mod <> Eşit değildir
kalanı verir
Sayısal veriler ile And Ve
& metin veriler Or Yada
birleştirilir Not Değil

2.3.5. VBA Ortamında Sabit Ve Değişkenlerin Tanımlanması

VBA ortamında makro programında kullanılacak bazı sabit ve değişkenlerin tanımlanması


gerekmektedir. Çalışma sayfalarına ve Modül sayfalarına ait kod sayfaları Sub – End Sub deyimleri
arasına yazılmış birden fazla makro programı içerebilirler.
19

Yukarıdaki şekilden de görüleceği üzere Sayfa1 çalışma sayfasına ait kod sayfasında toplam 4 adet
makro program rutini oluşturulmuştur. Bu makro programlar aynı zamanda kod sayfasının sağ üst
köşesinde bulunan açılır pencerede listelenmektedir. Hangi makro program üzerinde çalışılacaksa bu
pencerede o makro programın adının üzerine tıklanarak o makro programın rutinine ulaşılabilir.
Çalışma sayfasına veya Modüle sayfasına ait kod sayfasındaki makro programların tümünde geçerli
olabilen ve değeri programlara göre değişmeyen değerlere Sabit (Constant) adı verilmektedir.

Sabitler kod sayfasının sağ üst köşesinde bulunan Declaration kısmı tıklanarak ulaşılan General
Declaration bölümünde Const deyimi ile tanımlanmaktadır.

Yukarıdaki şekilden de görüleceği üzere General Declaration kısmında Const x=25 olarak
tanımlama yapılmıştır. Bu çalışma sayfasına ait kod sayfasına yazılan tüm makro programlarda artık
x değişkeni kullanılması durumunda değeri 25 olarak kabul edilecektir.

VBA ortamında oluşturulan makro programlarda, verilerinin saklandığı, ismi ve barındırdığı bir veri
tipi olan nesnelere değişken adı verilmektedir. VBA makro kodlarında değişken tanımlaması
aşağıdaki şekilde yapılmaktadır.

Dim Degisken Adı As Veri Tipi


20

Değişken adı verilirken aşağıdaki hususlar dikkate alınması gerekir.

1- Değişken isimleri mümkün olduğunca kısa olmalıdır


2- Değişken isimleri rakam ve harflerden oluşmalıdır.
3- Değişken isimlerini oluşturan karakterler arasında boşluk olmamalıdır.
4- Değişken isimleri mutlaka harf ile başlamalı rakamla başlamamalıdır. Rakamlar ilk karakter
dışında diğer karakterle kullanılabilir.
5- Değişken isimlerinde noktalama işaretleri ve operatörler (<, >, = , <=, >= vb..) kullanılamaz.
Sadece alt çizgi ( _ ) kullanılabilir.
6- Değişken isimleri en fazla 255 karakter olmalıdır.

Örnek olarak aşağıdaki doğru ve yanlış yazılmış değişken isimleri bulunmaktadır.

X1 (Doğru) 1X (Yanlış)
Stl_Hacm (Doğru) Stl:Hacm (Yanlış)
Ad_Soyad (Doğru) Ad Soyad (Yanlış)

Değişkenler yukarıda da belirtildiği gibi atandıkları verilerin tiplerini de barındırmaktadır. Bu veri


tipleri ve özellikleri aşağıda açıklanmıştır.

String: Bu veri tipi ile metin türünde sayısal olmayan veriler tanımlanmaktadır.

Boolean: Bu veri tipi ile mantıksal veriler tanımlanmaktadır. Bu veriler Doğru (True) ya da Yanlış
(False) değerlere sahiptir. Örneğin cinsiyet mantıksal bir veri türüdür. İki değere sahiptir. Erkek ise
True Kadın ise False ya da bu durumun tam tersi olabilecektir.

Date: Tarih formatındaki veriler tanımlanmaktadır.

Integer: Kısa tamsayıları tanımlamak için kullanılan veri tipidir. Değer aralığı -32768 ile 32767
arasındadır.

Long: Uzun tamsayıları tanımlamak için kullanılan veri tipidir. Değer aralığı -2.147.483.648 ile
+2.147.483.647 arasındadır.

̅ 1.401298*10-45 ve
Single: Ondalıklı sayıların tanımlanması için kullanılır. Değer aralığı +
̅ 3.402823*1038 arasındadır.
+

Double: En uzun ondalıklı sayıları tanımlayan bir veri tipidir. Değer aralığı
̅ 1.79769313486232*10308 ile +
+ ̅ 4.94065645841247*10-324 arasındadır.

Currency: Finansal (Parasal) türdeki verileri tanımlamak için kullanılır.


21

Variant: Değişkene eğer bir veri tipi tanımlanmamış ise o zaman değişken bu veri tipi ile
tanımlanmaktadır. Bilgisayar hafızasında en fazla yeri kaplayan bir veri tipidir.

Örneğin bir orman işletmesinde çalışan yangın işçilere ait bilgilerin saklanacağı bir VBA makro
programı oluşturulsun. Bu programdaki değişkenler aşağıdaki gibi tanımlanmalıdır.

Dim adı As String


Dim soyadı As String
Dim yası As Integer
Dim dogumyeri As String
Dim dogumtarihi As Date
Dim cinsiyet As Boolean
Dim maası As Currency

2.3.6. VBA Ortamında Karar Yapıları (Mantıksal Karşılaştırmalar)

VBA ortamında hazırlanan makro programların işlemler aşamasını oluşturan unsurlardan biriside
mantıksal karşılaştırmalardır. Mantıksal karşılaştırmaları sağlayan çeşitli karar yapıları mevcuttur.
Bu bölümde karar yapıları ve özellikleri açıklanarak bunlarla ilgili çeşitli örneklere yer verilmiştir.

If Koşul Then
.
.
.
Else
.
.
.
End If

Bu karar yapısı bir koşula bağlı olarak oluşan iki farklı durum için kullanılmaktadır. If deyiminden
sonra yazılan koşul sağlanmış ise Then komutundan sonra yazılan ifadeler icra edilecektir. Eğer bu
koşul sağlanmamış ise bu durumda Else ifadesinden sonra gelen ifadeler icra edilecektir.

Örnek 1:

Bir öğrencinin ara sınav ve final notuna göre geçme notunu hesaplayan ve daha sonra geçme notuna
göre geçme durumunu belirleyen MS Excel VBA makro programını oluşturunuz.

(Geçme Notu: Ara Sınav Notu*0,40 + Final Notu*0,60 olarak hesaplanacak, Geçme Durumu: geçme
notu 50 ve daha yüksek ise öğrenci geçecek, aksi takdirde kalacaktır.)
22

Çözüm 1:

Bir problemin bilgisayar programı yardımıyla çözümünde, öncelikle bilgisayar programının


aşamaları olan girdiler, işlemler ve çıktılar aşamaları açıklanmalı, bu aşamalara göre akış diyagramı
oluşturulmalı ve bu akış diyagramına göre VBA makro program kodu yazılmalıdır.

Yukarıdaki çalışma sayfasında 601970087 no’lu öğrencinin ara sınav notu B2 hücresine, Final Notu
ise C2 Hücresine girilmiştir. Program sonucunda elde edilen geçme notu D2 hücresine, geçme
durumu ise E2 hücresine yazdırılacaktır. Bu durumda programın aşamaları aşağıdaki gibi olacaktır.

Girdiler: Ara sınav notu ve final notu olmaktadır. Ara sınav notu: asn ve final notu: fn isimli
değişkenlere atanmıştır.

İşlemler: Geçme Notu: Ara Sınav Notu*0,40 + Final Notu *0,60 ve Geçme Notu >= 50 olması
durumunda öğrencinin Geçme Durumu “Geçti”, bu şartın sağlanmaması durumunda öğrencinin
Geçme Durumu “Kaldı” olacaktır.

Çıktılar: Geçme Notu ve Geçme Durumu programın çıktıları olmaktadır. Geçme Notu: gn, Geçme
Durumu: gd isimli değişkenlere atanmıştır. Programın Akış diyagramı ve VBA Makro kodu
aşağıdaki gibi olmaktadır.
Sub gecme()
asn = Cells(2, 2)
fn = Cells(2, 3)
gn = asn * 0.4 + fn * 0.6
If gn >= 50 Then
gd = "Geçti"
Else
gd = "Kaldı"
End If
Cells(2, 4) = gn
Cells(2, 5) = gd
End Sub
23

BAŞLA Sub gecme_notu()

asn asn = Cells(2, 2)


fn fn = Cells(2, 3)

gn=asn*0.40+fn*0.60 gn = asn * 0.4 + fn * 0.6

If gn >= 50 Then
E

gn>= 50 gd=”Geçti” gd = "GEÇTİ"


fn >= 50
H Else
gd=”Kaldı” gd = "KALDI"
End If
gn Cells(2, 4) = gn
gd Cells(2, 5) = gd

DUR End Sub

Program kodlarını açıklayacak olursak makro programa Sub gecme ( ) deyimi ile başlanmaktadır.
Ara sınav notu B2 hücresinden Cells(2,2) (2. Satır,2.sütun) adresi ile final notu ise C2 hücresinden
Cells(2,3) (2. Satır,3.sütun) adresi ile programa alınmaktadır. Daha sonra geçme notu hesaplanarak
Eğer geçme notu 50 ve daha yüksek ise geçme durumu “Geçti” olarak, eğer bu şart sağlanmıyorsa
geçme durumu “Kaldı” olarak yazdırılmaktadır. Bu örnekte geçme notu 54,8 olarak hesaplanmıştır.
Bu durumda If deyiminden sonra gelen gn>=50 şartı sağlandığı için Then deyiminden sonra gelen
gd=”Geçti” ifadesi icra edilmiştir. Eğer bu şart sağlanmamış olsaydı bu durumda Else ifadesinden
sonra gelen gd=”Kaldı” ifadesi icra edilecekti.

Programın son kısmında hesaplanan geçme notu Cells(2,4) (2. Satır,4.sütun) adresi ile D2 hücresine,
geçme durumu ise Cells(2,5) (2. Satır,5.sütun) adresi ile E2 hücresine yazdırılmaktadır. End Sub
deyimi ile program sonlandırılmaktadır. Programın çalıştırılmasıyla aşağıdaki çalışma sayfası
görüntüsü elde edilecektir.
24

If Koşul1 Then
.
.
ElseIf Koşul1 Then
.
.
ElseIf Koşul2 Then
.
.
ElseIf Koşul n Then
.
.
Else
.
.
End If

Bu karar yapısı n tane koşula bağlı olarak oluşan n+1 farklı durum için kullanılmaktadır. Örneğin 2
adet koşul mevcut ise 3 farklı durum oluşacaktır. If deyiminden sonra yazılan koşul sağlanmış ise
Then komutundan sonra yazılan ifadeler icra edilecektir. Eğer bu koşul sağlanmamış ise bu durumda
ElseIf deyimlerinden sonra gelen koşullara bakılacak eğer bu koşullardan biri sağlanmış ise koşulun
bulunduğu ElseIf deyiminden sonra yazılan ifadeler icra edilecektir.

Eğer ElseIf deyimlerinden sonra gelen koşullar da sağlanmaz ise bu durumda Else deyiminden sonra
gelen ifadeler icra edilecektir.

Örnek 2

a ∗ 𝑥 2 + 𝑏 ∗ 𝑥 + 𝑐 = 0 şeklindeki ikinci dereceden denklemin köklerini bulan MS Excel VBA makro


programını oluşturunuz.
25

Yukarıdaki çalışma sayfasında da görüleceği üzere denklemin a katsayısı A2 hücresine, b katsayısı


B2 hücresine ve c katsayısı da C2 hücresine girilmektedir. Program sonucunda elde edilen X1 ve X2
kökleri sırasıyla D2 ve E2 hücresine yazdırılacaktır. Bu durumda programın aşamaları aşağıdaki gibi
olacaktır.

Girdiler: Denklemin a,b, c katsayıları programın girdileri olmaktadır. Değişken ismi olarak da
katsayılar aynen (a,b,c) kullanılmıştır.

İşlemler: Bu aşamada öncelikle denklemin diskriminant (delta) değeri 𝑑𝑒𝑙𝑡𝑎 = 𝑏 2 − 4 ∗ 𝑎 ∗ 𝑐


şeklinde delta isimli değişkene atanarak hesaplanmaktadır. Daha sonra bu değere göre mantıksal
karşılaştırma yapılmaktadır.

delta< 0 ise X1=”Reel kök Yok”; X2=”Reel kök yok” sonucuna ulaşılacaktır.

−𝑏
delta=0 ise 𝑋1 = 𝑋2 = 2∗𝑎 olarak denklemin birbirine eşit tek kökü olacaktır.

−𝑏+√𝑑𝑒𝑙𝑡𝑎 −𝑏−√𝑑𝑒𝑙𝑡𝑎
delta> 0 ise 𝑋1 = ; 𝑋2 = olarak denklemin iki farklı kökü mevcuttur.
2∗𝑎 2∗𝑎

Çıktılar: Denklemin kökleri X1 ve X2 değerleri programın çıktıları olmaktadır. Denklemin birinci


kökü X1, ikinci kökü ise X2 değişkenine atanmıştır. Programın Akış diyagramı ve VBA Makro kodu
aşağıdaki gibi olmaktadır.
26

Örnek 2’deki programa ait akış diyagramı;

BAŞLA

a,b,c

Delta=b2-4*a*c

E X1=”Reel Kök Yok”


Delta<0 X2=Reel Kök Yok”

E X1=-b/(2*a)
Delta=0 X2=-b/(2*a)

−𝑏 + √𝑑𝑒𝑙𝑡𝑎
𝑋1 =
2∗𝑎
−𝑏 − √𝑑𝑒𝑙𝑡𝑎
𝑋2 =
2∗𝑎

X1
X2

DUR
27

Programa ait VBA makro kudu ise aşağıdaki gibi olacaktır.

Sub denklem()
a = Cells(2, 1)
b = Cells(2, 2)
c = Cells(2, 3)
Delta = b ^ 2 - (4 * a * c)
If Delta < 0 Then
X1 = "Reel kök yok"
X2 = "Reel kök yok"
ElseIf Delta = 0 Then
X1 = -b / (2 * a)
X2 = -b / (2 * a)
Else
X1 = (-b + Sqr(Delta)) / (2 * a)
X2 = (-b - Sqr(Delta)) / (2 * a)
End If
Cells(2, 4) = X1
Cells(2, 5) = X2
End Sub

Program kodlarını açıklayacak olursak makro programa Sub denklem ( ) deyimi ile başlanmaktadır.
a katsayısı A2 hücresinden Cells(2,1) (2. Satır,1.sütun) adresi ile, b katsayısı B2 hücresinden
Cells(2,2) (2. Satır,2.sütun) adresi ile c katsayısı ise C2 hücresinden Cells(2,3) (2. Satır,3.sütun)
adresi ile programa alınmaktadır. Daha sonra delta değeri hesaplanmaktadır. Eğer hesaplanan delta
değeri 0’dan küçükse, If Delta < 0 Then deyiminden sonra gelen ifadeler geçerli olmaktadır. Bu
durumda denklemin reel kökleri bulunmamaktadır. Bu koşul sağlanmamış ise hesaplanan delta
değerinin 0’a eşit olup olmadığına bakılır. Bu koşul sağlanırsa ElseIf delta=0 Then deyiminden sonra
gelen ifadeler geçerli olmaktadır ve denklemin birbirine eşit tek kökü bulunmaktadır. Bu kökler -
b/(2*a) formülü ile hesaplanmaktadır. Yukarıdaki iki koşul sağlanmadığı durumda ise geriye tek bir
durum olan delta>0 kalmaktadır ve Else deyiminden sonra gelen ifadeler geçerli olmaktadır. Bu
−𝑏+√𝑑𝑒𝑙𝑡𝑎 −𝑏−√𝑑𝑒𝑙𝑡𝑎
durumda denklemin iki farklı kökü olacak, kökler 𝑋1 = ; 𝑋2 = formülleriyle
2∗𝑎 2∗𝑎

hesaplanacaktır. Bu örnekte delta>0 büyük olduğundan dolayı Else deyiminden sonra gelen ifadeler
geçerli olmaktadır. Denklemin iki ayrı kökü mevcut olup bu değerler yukarıdaki formül yardımıyla
hesaplanmaktadır. Programın son kısmında hesaplanan denklemin kökleri X1 Cells(2,4) (2.
Satır,4.sütun) adresi ile D2 hücresine, X2 ise Cells(2,5) (2. Satır,5.sütun) adresi ile E2 hücresine
yazdırılmaktadır. End Sub deyimi ile program sonlandırılmaktadır. Programın çalıştırılmasıyla
aşağıdaki çalışma sayfası görüntüsü elde edilecektir.
28

Select Case Değişken ismi


Case Koşul 1
.
.
Case Koşul 2
.
.
Case Koşul n
.
.
End Select

Bu koşul yapısında mantıksal karşılaştırmaya konu olan değişken Selecet Case deyiminden sonra,
koşullar ise Case ifadesinden sonra yazılmaktadır. Mantıksal karşılaştırma Select Case deyiminden
sonra gelen değişkene göre yapılır. Hangi koşul sağlanmışsa bu koşulun altındaki ifadeler icra
edilerek Select Case – End Select bloğundan çıkılır. Örneğin yukarıdaki blokta Koşul 2 sağlanırsa
Case Koşul 2 deyiminin hemen altındaki ifadeler yerine getirilir ve bloktan çıkılır.

Örnek 2’de verilen a ∗ 𝑥 2 + 𝑏 ∗ 𝑥 + 𝑐 = 0 şeklindeki ikinci dereceden denklemin köklerini bulan MS


Excel VBA makro programı Select Case – End Select bu blok yardımıyla da oluşturulabilir. Bu
durumda girdiler, işlemler, çıktılar aşamaları aynen geçerlidir. Programa ait akış diyagramı ve VBA
makro kodu ise aşağıdaki gibi oluşturulacaktır.
29

BAŞLA
Sub denklem()

a = Cells(2, 1)
a,b,c
b = Cells(2, 2)
c = Cells(2, 3)

Delta=b2-4*a*c Delta = (b) ^ (2) - (4 * a * c)


Select Case Delta

Case Is < 0 E X1=”Reel Kök Yok”


Delta<0
X2=Reel Kök Yok”

Case 0 E X1=-b/(2*a)
Delta=0 X2=-b/(2*a)

Case Is > 0 E
−𝑏 + √𝑑𝑒𝑙𝑡𝑎
𝑋1 =
Delta>0 2∗𝑎
−𝑏 − √𝑑𝑒𝑙𝑡𝑎
𝑋2 =
2∗𝑎

End Select

X1
Cells(2, 4) = x1
X2 Cells(2, 5) = x2

DUR End Sub


30

Sub denklem()
a = Cells(2, 1)
b = Cells(2, 2)
c = Cells(2, 3)
Delta = b ^ 2 - (4 * a * c)
Select Case Delta
Case Is < 0
X1 = "Reel kök yok"
X2 = "Reel kök yok"
Case 0
X1 = -b / (2 * a)
X2 = -b / (2 * a)
Case Is > 0
X1 = (-b + Sqr(Delta)) / (2 * a)
X2 = (-b - Sqr(Delta)) / (2 * a)
End Select
Cells(2, 4) = X1
Cells(2, 5) = X2
End Sub

Program kodlarını açıklayacak olursak makro programa Sub denklem ( ) deyimi ile başlanmaktadır.
a katsayısı A2 hücresinden Cells(2,1) (2. Satır,1.sütun) adresi ile, b katsayısı B2 hücresinden
Cells(2,2) (2. Satır,2.sütun) adresi ile c katsayısı ise C2 hücresinden Cells(2,3) (2. Satır,3.sütun)
adresi ile programa alınmaktadır. Daha sonra delta değeri hesaplanmaktadır. Delta değerine göre
mantıksal karşılaştırma yapılacağından dolayı delta Değişkeni Select Case deyiminden sonra
yazılmıştır. Daha sonra Case deyimi ile koşullar ortaya konmuştur. Eğer hesaplanan delta değeri
0’dan küçükse, Case Is<0 deyiminden sonra gelen ifadeler geçerli olmaktadır. Bu durumda
denklemin reel kökleri bulunmamaktadır. Bu koşul sağlanmamış ise hesaplanan delta değerinin 0’a
eşit olup olmadığı Case 0 deyimi ile sorgulanır. Bu koşul sağlanmış ise Case=0 deyiminden sonra
gelen ifadeler geçerli olmaktadır ve denklemin birbirine eşit tek kökü bulunmaktadır. Bu kökler -
b/(2*a) formülü ile hesaplanmaktadır. Yukarıdaki iki koşul sağlanmadığı durumda ise delta>0 olacak
ve Case Is>0 deyiminden sonra gelen ifadeler geçerli olmaktadır. Bu durumda denklemin iki farklı
−𝑏+√𝑑𝑒𝑙𝑡𝑎 −𝑏−√𝑑𝑒𝑙𝑡𝑎
kökü olacak, kökler 𝑋1 = ; 𝑋2 = formülleriyle hesaplanacaktır. Bu örnekte
2∗𝑎 2∗𝑎

delta>0 büyük olduğundan dolayı, Case Is>0 deyiminden sonra gelen ifadeler geçerli olmaktadır.
31

Denklemin iki ayrı kökü mevcut olup bu değerler yukarıdaki formül yardımıyla hesaplanmaktadır.
Programın son kısmında hesaplanan denklemin kökleri X1 Cells(2,4) (2. Satır,4.sütun) adresi ile D2
hücresine, X2 ise Cells(2,5) (2. Satır,5.sütun) adresi ile E2 hücresine yazdırılmaktadır. End Sub
deyimi ile program sonlandırılmaktadır.

Programa ait kodlar incelendiğinde If …. ElseIf…..Else….End If koşul yapısında farklı olarak


mantıksal karşılaştırmaya konu olan değişken Select Case deyiminden sonra yazılmakta koşullar ise
Case deyimleri ile tanımlanmaktadır. Büyük, büyük eşit, küçük ve küçük eşit gibi mantıksal
karşılaştırmalar söz konusu olduğunda Case deyiminin yanına Is deyimi eklenmekte (Case Is<0,
Case Is>0 vb.) ve daha sonra mantıksal karşılaştırma yapılmaktadır. Eşitlik durumunda ise sadece
Case değer (Case 0 vb.) ifadesi kullanılmaktadır.

2.3.7. VBA Ortamında Döngü Yapıları

VBA makro programlarda kullanılan önemli yapılardan birisi de döngü yapılarıdır. Bu bölümde
döngü yapıları ve özellikleri açıklanarak bunlarla ilgili çeşitli örneklere yer verilmiştir.

For sayaç= Başlangıç Değeri To Bitiş Değeri Step Artış miktarı

… ifadeler

Next Sayaç

Bu yapıda döngüye bir sayaç değişkeni tanımlanmaktadır. Bu sayaç değişkeni, başlangıç değerinden
başlayarak bitiş değerine kadar Step deyiminden sonra verilen artış miktarına bağlı olarak bir döngü
oluşturur. Sayaç değişkeni başlangıç değerinden bitiş değerine kadar aldığı her değer için aradaki
ifadeleri icra ederek Next deyimine gelmekte ve bu işlemi bitiş değerine kadar sürdürerek bir döngü
oluşturmaktadır.

Örnek 3: 1’den N’e kadar olan sayıların toplamını veren bir MS Excel VBA makro programını
oluşturunuz.

Çözüm 3: Problemde 1 değerinden başlanarak N değerine kadar olan sayıların toplamının


hesaplanması istenmektedir. Aşağıdaki çalışma sayfasından da görüleceği üzere N değeri A2
hücresine girilecek, program sonucunda hesaplanan 1’den N’e kadar olan sayıların toplam değeri ise
B2 hücresine yazdırılacaktır.
32

Girdiler: Programın tek girdisi N sayısıdır. Değişken ismi olarak bu N kullanılmıştır.

İşlemler: 1’den başlayarak N değerine kadar sayaç değeri birer birer artırılarak sayıların toplamını
sağlayacak bir For…..Next döngüsünün oluşturulmasıdır.

Çıktılar: 1’den N’e kadar olan sayıların toplam değeri programın çıktısını oluşturmaktadır. Bu değer
T isimli bir değişkene atanmıştır. Programın Akış diyagramı ve VBA Makro kodu aşağıdaki gibi
olmaktadır.
Sub toplam()

BAŞLA
N = Cells(2, 1)
For i = 1 To N
T=T+i
N Next i
Cells(2, 2) = T
End Sub
i= 1,N,1

T=T+i

DUR

Program kodlarını açıklayacak olursak makro programa Sub toplam ( ) deyimi ile başlanmaktadır. N
sayısı A2 hücresinden Cells(2,1) (2. Satır,1.sütun) adresi ile programa alınmaktadır. Daha sonra i
sayacı ile bir For…..Next döngüsü tanımlanmaktadır. Bu döngüde i sayaç değişkeninin başlangıç
değeri 1 bitiş değeri ise N sayısı olmaktadır. Artış miktarı 1 olduğu için Step 1 deyiminin yazılmasına
gerek yoktur. 1 değerinden başlanarak N sayısına kadar sayıların toplamı T=T+i ifadesi ile
hesaplanmaktadır.
33

T değişkenin değeri program içerisinde tanımlanmadığı için döngü başlangıcında (i=1) girmeden
program tarafından 0 olarak algılanmaktadır. T=T+i ifadesinde eşitliğin solundaki T döngü sonundaki
(yeni) değeri, eşitliğin sağ tarafındaki T ise döngü başındaki (eski) değeri temsil etmektedir. Bu
durumu aşağıdaki tabloya göre açıklanırsa

T Eski T Yeni
i
Değer Değer
1 0 1
2 1 3
3 3 6
4 6 10
. . .
. . .
50 1225 1275

i sayacının ilk değeri 1 olduğunda T değeri 0 olacaktır. T=T+i ifadesine gelindiğinde T’nin yeni
değeri 1 olacaktır. Döngü For deyimine gelecek ve i’nin değeri 2 olacak, T=T+i ifadesine
gelindiğinde bir önceki döngüde T’nin değeri 1 olduğundan dolayı T’nin yeni değeri 3 olacaktır. i
sayaç değeri 50 olduğunda döngü son kez T=T+i ifadesine gelecek ve döngü tamamlanacaktır. Döngü
tamamlandığında elde edilen T değeri 1’den 50’ye kadar olan sayıların toplamı olacaktır.

Programın son kısmında hesaplanan toplam değer Cells(2,2) (2. Satır,2.sütun) adresi ile B2 hücresine
yazdırılmaktadır. End Sub deyimi ile program sonlandırılmaktadır. Programın çalıştırılmasıyla
aşağıdaki çalışma sayfası görüntüsü elde edilecektir.

Örnek 4: Doğu Karadeniz bölgesi içerisinde yer alan bir orman deposunda çeşitli ağaç türlerine ait
yakacak odunlar istiflenerek ster olarak ölçülendirilmektedir. Her ağaç türü için önceden belirlenmiş
ster katsayılarına göre, her ağaç türü için istiflenen yakacak odunların hacimlerini hesaplayan MS
Excel VBA makro programını oluşturunuz. (Ster, 1 m3’lük hacim içerisine istif edilmiş odun miktarı
olup, ster katsayısı bu ster içerisindeki som (saf) odun hacmidir. Böylece istiflerdeki som odun hacmi
=Ster*Ster Katsayısı olmaktadır.)
34

Çözüm 4: Oluşturulacak VBA Makro programı ile ilgili çalışma sayfası aşağıda görüntülenmektedir.

Girdiler: İstif edilen ağaç türü sayısı, Ağaç türleri, Ster miktarları ve ağaç türlerine ait ster
katsayılarıdır. İstif edilen ağaç türü sayısı n değişkenine, ağaç türü, atur değişkenine, ster miktarı
ster değişkenine, kayın ağaç türüne ait ster katsayısı stkkn değişkenine, göknar ağaç türüne ait ster
katsayısı stkg değişkenine, sarıçam ağaç türüne ait ster katsayısı stkcs değişkenine, ladin ağaç türüne
ait ster katsayısı ise stkld değişkenine atanmıştır.

İşlemler: Programda sadece bir ağaç türüne göre hesaplama yapılmayacak n tane ağaç türü için
hesaplama yapılacaktır. Bu durumda bir döngünün oluşturulması gerekmektedir. Programın girdileri
n elemanlı bir dizi halinde çalışma sayfasına girildiği için döngü yardımıyla programa alınacak ve bu
döngü içerisinde mantıksal karşılaştırma yapıları kullanılarak ağaç türüne göre verilen ster
katsayılarına göre hacimler, türe ait ster miktarı ile türe ait ster katsayısı değerlerinin çarpımı olarak
elde edilecektir.

Çıktılar: Programın çıktıları türlere ait hesaplanan hacimler olup bu değerler döngü içerisinde
çalışma sayfasına yazdırılacaktır. Programın Akış diyagramı ve VBA Makro kodu aşağıdaki gibi
olmaktadır.
35

Örnek 4’e oluşturulan Programa ait akış diyagramı;

BAŞLA

n,stkkn,stkg,
stkcs,stkld

i= 1,n,1

atur=cells(i+1,1)
ster=cells(i+1,2)

E
atur=”Kayın” Hacm=ster*stkkn

E
atur=”Göknar” Hacm=ster*stkg

E
atur=”Sarıçam” Hacm=ster*stkcs

E
atur=”Ladin” Hacm=ster*stkld

Cells(i+1,3)=Hacm

DUR
36

Programın VBA Makro kodu aşağıdaki gibi olacaktır.

Sub hacim()
n = Cells(2, 7)
stkkn = Cells(4, 7)
stkg = Cells(5, 7)
stkcs = Cells(6, 7)
stkld = Cells(7, 7)
For i = 1 To n
atur = Cells(i + 1, 1)
ster = Cells(i + 1, 2)
Select Case atur
Case "Kayın"
hacm = ster * stkkn
Case "Göknar"
hacm = ster * stkg
Case "Sarıçam"
hacm = ster * stkcs
Case "Ladin"
hacm = ster * stkld
End Select
Cells(i + 1, 3) = hacm
Next i
End Sub

Program kodlarını açıklayacak olursak makro programa Sub hacim ( ) deyimi ile başlanmaktadır. İstif
sayısı (n) G2 hücresinden Cells(2,7) (2. Satır,7.sütun) adresi ile, kayın ağaç türüne ait ster katsayısı
(stkkn) G4 hücresinden Cells(4,7) (4.satır, 7.sütun) adresi ile, göknar ağaç türüne ait ster katsayısı
(stkg) G5 hücresinden Cells(5,7) (5.satır, 7.sütun) adresi ile, sarıçam ağaç türüne ait ster katsayısı
(stkcs) G6 hücresinden Cells(6,7) (6.satır, 7.sütun) adresi ile, ladin ağaç türüne ait ster katsayısı
(stkld) G7 hücresinden Cells(7,7) (7.satır, 7.sütun) adresi ile programa alınmaktadır. n tane ağaç türü,
ster miktarı ve hesaplanan hacim değeri olduğu için i sayacı ile bir For…..Next döngüsü
tanımlanmıştır. Bu döngüde i sayaç değişkeninin başlangıç değeri 1 bitiş değeri ise n sayısı
olmaktadır. Artış miktarı 1 olduğu için Step 1 deyiminin yazılmasına gerek yoktur. 1 değerinden
başlanarak ağaç türü Cells(i+1,1) adresi ile, ster miktarı ise Cells(i+1,2) adresi ile programa
alınmaktadır. Satır adresinde i+1 yazılmasının nedeni çalışma sayfasında verilerin üzerlerinde bir
başlık satırının bulunmasından dolayıdır. Sütun adresi ağaç türü verileri 1. Sütunda olduğu için 1, ster
miktarı verileri 2. Sütunda bulunmasından dolayı 2 dir.
37

Daha sonra Select Case….End Select yapısıyla mantıksal karşılaştırmalara geçilmektedir. Ster
katsayıları ağaç türlerine göre değiştiğinden Select Case deyiminden sonra ağaç türü değişkeni olan
atur kullanılmaktadır. Case deyimlerine farklı ağaç türleri belirtilerek bu deyimden sonra bu ağaç
türüne ait hacim değeri, ster miktarı ve bu ağaca ait ster katsayısı ile çarpılarak elde edilmektedir. Bu
şekilde farklı ağaç türlerine göre oluşturulan Select Case….End Select bloğu tamamlandıktan sonra
elde n tane ağaç türü için elde edilen hacim değerleri Cells(i+1,3) adresi ile çalışma sayfasına
yazdırılmaktadır. End Sub deyimi ile program sonlandırılmaktadır. Programın çalıştırılmasıyla
aşağıdaki çalışma sayfası görüntüsü elde edilecektir.

Bu örnekte döngü yapısının daha iyi anlaşılması için i sayaç değerine göre değişkenlerin aldığı
değerler aşağıda tablolaştırılmıştır.

i Ağaç Türü Ster Hacim


Cells(2,1) Cells(2,2)
1 hacm=ster*stkg
“Göknar” 450
Cells(3,1) Cells(3,2)
2 hacm=ster*stkld
“Ladin” 568
Cells(4,1) Cells(4,2)
3 hacm=ster*stkkn
“Kayın” 784
Cells(5,1) Cells(5,2)
4 hacm=ster*stkcs
“Sarıçam” 945
38

Do While Koşul

İfadeler

Sayaç değişkeni=Sayaç değişkeni+1

Loop

Bu döngü yapısı belirli bir koşul altında çalışmaktadır. Do While deyiminden sonra gelen koşul
sağlandığı sürece döngü çalışmaktadır. Koşul sağlanmadığı durumda döngüden çıkılmaktadır.

Örnek 3’deki 1’den N’e kadar olan sayıların toplamını hesaplayan MS Excel VBA makro programı
Do While……Loop döngü yapısı ile de oluşturulabilir. Bu durumda girdiler ve çıktılar aşamaları
Örnek 3’deki gibi olacaktır. Fakat işlemler aşamasında Do While……Loop döngüsüne bir sayaç
değişkeni tanımlanarak bu değişkenin değeri N oluncaya kadar döngü devam ederek sayıların
toplanması sağlanacaktır. Bu döngüye ait akış diyagramı ve VBA makro kodu aşağıdaki gibi
oluşturulacaktır.

BAŞLA

H
i<=N

T=T+i
i=i+1

DUR
39

Sub toplam()
N = Cells(2, 1)
Do While i <= N
T=T+i
i=i+1
Loop
Cells(2, 2) = T
End Sub

Program kodlarını açıklayacak olursak makro programa Sub toplam ( ) deyimi ile başlanmaktadır. N
sayısı A2 hücresinden Cells(2,1) (2. Satır,1.sütun) adresi ile programa alınmaktadır. Döngü
başlangıcında i sayaç değişkenine ve T değişkenine herhangi bir değer atanmadığı için bu
değişkenlerin değeri 0 dır. Do While i<=N deyimi ile i değerinin N değerinden küçük yada eşit olup
olmamasına bakılmaktadır. Döngünün ilk aşamasında i=0 olduğu içi bu şart sağlanmaktadır. Bu
durumda T=T+i ifadesine geçilmektedir. Bu ifade de eşitliğin sağ tarafındaki T ve i değerleri 0
olduğundan dolayı eşitliğin sol tarafındaki T değeri de 0 olacaktır. Daha sonra i=i+1 ifadesine
geçilmekte ve i’nin yeni değeri 1 olmaktadır. Do While i<=N deyime geri dönülür, bu şart yine
sağlanıyorsa T=T+i ifadesine geçilir. Bu ifade de eşitliğin sağ tarafındaki T’nin bir önceki değeri 0
ve i’nin ise yeni değeri 1 olduğu için eşitliğin sol tarafındaki T’nin değeri 1 olacaktır. Bu döngüye
aşağıdaki tabloda olduğu gibi devam edilecektir. i sayaç değeri N sayısına küçük ve eşit olduğunda
yani örneğimizde i=51 olduğunda Do While i<=N deyimi altındaki ifadelere geçilmeden döngüden
çıkılarak döngü tamamlanacaktır.

T Eski T Yeni
i
Değer Değer
0 0 0
1 0 1
2 1 3
3 3 6
4 6 10.
. . .
. . .
50 1225 1275

Döngü tamamlandığında elde edilen T değeri 1’den 50’ye kadar olan sayıların toplamı olacaktır.
Programın son kısmında hesaplanan toplam değer Cells(2,2) (2. Satır,2.sütun) adresi ile B2 hücresine
yazdırılmaktadır. End Sub deyimi ile program sonlandırılmaktadır.
40

2.3.8. VBA Ortamında Kullanılan Bazı Fonksiyonlar

VBA ortamında oluşturulan makro kodlarında çeşitli işlemleri yerine getiren fonksiyonlar
kullanılmaktadır. Bu fonksiyonlardan bazıları bu bölümde tanıtılacaktır.

Sqr ( )

Bu fonksiyon yardımıyla değişkenlere atanan değerlerin karekökü alınmaktadır.

Yukarıdaki çalışma sayfasında A2 hücresine x değeri girilmiştir. y değeri ise x değerinin kareköküne
eşit olan bir değişken olması durumunda VBA makro kodu aşağıdaki gibi olacaktır.

Sub karekok()
x = Cells(2, 1)
y = Sqr(x)
Cells(2, 2) = y
End Sub

Program Sub karekök ( ) deyimi ile başlanmaktadır. x değişkeninin değeri A2 hücresinden Cells(2,1)
(2. Satır,1.sütun) adresi ile programa alınmaktadır. Bu değerin karekökü Sqr fonksiyonu ile alınmakta
ve bu değer y değişkenine atanarak B2 hücresine Cells(2,2) (2. Satır,2.sütun) adresine
yazdırılmaktadır.

Trigonometrik Fonksiyonlar ( Sin(Açı değeri ), Cos(Açı değeri ), Tan(Açı değeri) )

VBA makro programlama ortamında verilen açı değerine karşılık gelen sinüs değeri Sin fonksiyonu
ile, kosinüs değeri Cos fonksiyonu ile tanjant değeri ise Tan fonksiyonu ile elde edilmektedir. VBA
ortamında açı değeri radyan olarak kabul edilmektedir. Eğer kullanıcı tarafından programa girdi
olarak verilen açı değeri derece cinsinden ise bu değerin radyan cinsine çevrilmesi gerekir.
41

Yukarıdaki çalışma sayfasında A2 hücresine x açı değeri derece cinsinden girilmiştir. y değeri x açı
değerinin sinüsüne eşit olan bir değişken, z değeri x açı değerinin kosinüsüne eşit olan bir değişken,
t değeri x açı değerinin tanjantına eşit olan bir değişken olması durumunda VBA makro kodu
aşağıdaki gibi olacaktır.

Sub trigfonk()
x = Cells(2, 1)
r = (x * 3.14) / 180
y = Sin(r)
Z = Cos(r)
t = Tan(r)
Cells(2, 2) = y
Cells(2, 3) = Z
Cells(2, 4) = t
End Sub

Program Sub trigfonk ( ) deyimi ile başlanmaktadır. x değişkeninin değeri A2 hücresinden Cells(2,1)
(2. Satır,1.sütun) adresi ile programa alınmaktadır. Bu değer derece cinsinden bir değer olduğundan
dolayı r = (x * 3.14) / 180 formülü ile radyana çevrilmekte ve r değişkenine atanmaktadır. Bu r
değişkeninin sinüsü alınarak y değişkenine, kosinüsü alınarak z değişkenine ve tanjantı alınarak t
değişkenine atanmıştır. Daha sonra y değişkeni B2 hücresine Cells(2,2) (2. Satır,2.sütun) adresine, z
değişkeni C2 hücresine Cells(2,3) (2. Satır,3.sütun) adresine ve t değişkeni de D2 hücresine Cells(2,4)
(2. Satır,4.sütun) adresine yazdırılmaktadır.

Round (Sayı, virgülden sonra istenilen basamak sayısı)

Bu fonksiyonla ondalıklı sayının virgülden sonraki ondalık kısmı istenilen sayıda basamağa
yuvarlanır.

Round (134,32895659, 3)= 134,329

Yukarıdaki sayının virgülden sonraki basamak sayısı 8 dir. Round fonksiyonu bu sayının ondalık
kısmı 3 basamağa yuvarlanmakta 134,329 olmaktadır. Bu örnekte 3 basamağa yuvarlama istenildiği
için 4. Basamağa bakılmakta bu değer 5’den büyük olduğu için üçüncü basamaktaki 8 sayısı 9’a
yuvarlanmaktadır.
42

Round (152,923181, 2)= 152,92

Yukarıdaki sayının virgülden sonraki basamak sayısı 6 dır. Round fonksiyonu bu sayının ondalık
kısmı 2 basamağa yuvarlanmakta 152,92 olmaktadır. Bu örnekte 2 basamağa yuvarlama istenildiği
için 3. Basamağa bakılmakta bu değer 5’den küçük olduğu için ikinci basamaktaki 2 sayısı aynen
kalmaktadır.

Sgn ( )

Matematikte kullanılan işaret fonksiyonudur. Parantez içerisine yazılan değer 0’dan küçük ise bu
fonksiyonun değeri -1, 0’a eşit ise fonksiyonun değeri 0 ve 0’dan büyük ise fonksiyonun değeri 1
olmaktadır.

x<0 Sgn(x)=-1
x=0 Sgn(x)=0
x>0 Sgn(x)=1

Exp ( )

Bu fonksiyon yardımıyla parantez içerisine yazılan değerin e. Kuvveti alınmaktadır. x değişkeninin


e. kuvveti Exp (x) olarak yazılmaktadır. Bu Exp(x)=ex eşit olmaktadır.

Rnd ( )

0 ile 1 arasında rasgele sayı türetmek için kullanılan bir fonksiyondur. Bu fonksiyona örnek olarak
aşağıdaki makro programı oluşturulmuştur.

Sub rasgele()
x = Rnd()
Cells(1, 1) = x
End Sub

Program Sub rasgele ( ) deyimi ile başlamaktadır. Rnd ( ) fonksiyonu ile üretilen 0 ile 1 arasındaki
sayı x değişkenine atanmaktadır. X değişkeni ise çalışma sayfasının A1 hücresine Cells(1,1) (1.satır,
1.sütun) adresiyle yazdırılmaktadır. Program çalıştırıldığında aşağıdaki görüntü elde edilecektir.
43

Program her çalıştırıldığında fonksiyonunun özelliğine bağlı olarak farklı değerler alacaktır.

Int ( )

Bu fonksiyon ile parantez içerisine yazılan ondalık sayıları tam sayıya çevirmek için kullanılır.
Ondalıklı sayısının virgülden sonraki kısımları atılır ve herhangi bir yuvarlama işlemi yapılmadan
tam sayı kısmı çıktı olarak verilir.

Int(32,6789)= 32
Int(21,45)=21

Abs ( )

Bu fonksiyon ile parantez içine yazılan değerin mutlak değeri alınmaktadır.

Abs(-5)=5
Abs(5)=5
44

2.4. MS EXCEL VBA ÇALIŞMA SAYFASI KODLARI

Bu bölümde MS Excel çalışma sayfalarına ve MS Excel dosyasının tamamı için geçerli olan çalışma
kitabına ait belirli VBA makro kodları verilecektir. Bu kodlar ile çalışma kitabı ve çalışma sayfası ile
ilgili işlemler gerçekleştirilmektedir.

2.4.1. Çalışma Sayfasının Seçilmesi

MS Excel çalışma kitabı içerisinde yer alan herhangi bir çalışma sayfasının seçilmesi için;
Sheets(“Sayfa1”).Select
Worksheets(“Sayfa1”).Select
Komutları kullanılmaktadır. Bu iki komut artasında herhangi bir fark bulunmamaktadır. Bu komutlar
ile Sayfa1 seçilmektedir. Örneğin “Sayfa1” adlı çalışma sayfasının A1 hücresinde bulunan bir değeri,
a isimli bir değişkene atanması ile ilgili VBA makro kodu, VBA ortamında, modül sayfasında yada
Sayfa1’in dışındaki bir çalışma sayfasına ait kod sayfasında yazılırsa bu durumda;
a= Sheets(“Sayfa1”).Cells(1,1)
olarak hücre adresinin başında çalışma sayfasının adresinin belirtilmesi gerekmektedir. Aynı
zamanda bu kod, Select komutu ile;
Sheets(“Sayfa1”).Select
a=Cells(1,1)
olarak da yazılabilmektedir.

2.4.2. Çalışma Kitabına Yeni Bir Çalışma Sayfası Ve Çalışma Kitabının Eklenmesi

Çalışma kitabına yeni bir çalışma sayfası eklemek için veya yeni bir çalışma kitabı (MS Excel
dosyası) açmak için Add komutu kullanılmaktadır
Sub ekleme ( )
Worksheets.Add → (Aktif çalışma kitabına yeni bir çalışma sayfası eklenmektedir.)
Workbooks.Add → (Yeni bir çalışma kitabı (MS Excel dosyası) açılacaktır.)
End sub
yukarıdaki makro program koduyla mevcut çalışma sayfasına yeni bir çalışma sayfası ve yeni bir
çalışma kitabı eklenmektedir.

2.4.3. Bilgisayarda Kayıtlı Bir MS Excel Dosyasının Açılması

Bilgisayar ortamında kayıtlı olan bir MS Excel dosyası VBA makro kodu yardımıyla
açılabilmektedir. Örneğin C sürücüsünde bulunan deneme isimli bir klasörün içerisinde Bilgisayar
adında bir MS Excel 2010 çalışma kitabı bulunmaktadır. Bu dosyayı açmak için VBA makro kodu
aşağıdaki şekilde olacaktır.
45

Workbooks.Open Filename:="C:\deneme\Bilgisayar.xlsx"

2.4.3. MS Excel Dosyasının Kaydedilmesi

Üzerinde çalışılan aktif çalışma kitabı (MS Excel dosyası), VBA makro kodu yardımıyla
kaydedilebilmektedir. Aktif çalışma kitabının kaydedilmesi için VBA makro kodu aşağıdaki şekilde
olacaktır.

ActiveWorkbook.Save

2.4.4. MS Excel Dosyasının Kapatılması

Üzerinde çalışılan aktif çalışma kitabı (MS Excel dosyası), VBA makro kodu yardımıyla
kapatılabilmektedir. Aktif çalışma kitabının kapatılabilmesi için VBA makro kodu aşağıdaki şekilde
olacaktır.

ActiveWorkbook.Close

2.4.5. MS Excel VBA Çalışma Sayfası Kodları İçin Örnek Makro

Sub deneme()

Workbooks.Open Filename:="C:\deneme\Bilgisayar.xlsx"

Worksheets.Add

Sheets("Sayfa2").Select

For i = 1 To 100

Cells(i, 1) = i

Next i

ActiveWorkbook.Save

ActiveWorkbook.Close

End Sub

Sub deneme ( ) ifadesi ile deneme isimli makro programı başlamaktadır. Workbooks.Open
Filename:="C:\deneme\Bilgisayar.xlsx" kodu ile C sürücüsündeki deneme isimli klasörünün
içerisinde bulunan Bilgisayar isimli MS Excel dosyası açılmaktadır. Worksheets.Add ifadesi ile
açılan çalışma kitabına (MS Excel dosyasına) yeni bir çalışma sayfası eklenmektedir.
Sheets("Sayfa2").Select kodu ile açılan çalışma kitabındaki Sayfa2 adlı çalışma sayfası
seçilmektedir. Daha sonra bu çalışma sayfasında For- Next döngüsü yardımıyla A1:A100 hücreleri
arasına 1’den 100’e kadar sayılar sırayla yazdırılmaktadır. ActiveWorkbook.Save komutu ile aktif
46

olan yani son açılan çalışma kitabı (Bilgisayar.xlsx) kaydedilmekte ve ActiveWorkbook.Close


komutu ile de bu aktif çalışma kitabı kapatılmaktadır.

2.4.6. WorksheetFunction Özelliği

WorksheetFunction özelliği ile belirli bir hücre aralığında bulunan sayısal veriler ile ilgili çeşitli
istatistikler kolayca hesaplanabilmektedir. WorksheetFunction özelliği bir çalışma sayfası kodu olup
bu ifadeden sonra yazılan fonksiyona göre değerler hesaplanabilmektedir. WorksheetFunction
özelliğini kullanılarak hesaplanan değerin bir değişkene atanması gerekmektedir. Bu durumda
WorksheetFunction özelliğinin bazı fonksiyonlar için, VBA makro kodu genel yazılımı aşağıdaki
şekilde olmaktadır.

a= WorksheetFunction.Fonksiyon Adı(Range(“Hücre Aralığı”))

Yukarıda yazılan kodda hesaplanan değer herhangi bir a değişkenine atanmıştır. Hücre aralığı olarak
B1:B20 aralığı verilsin. Bu durumda hücre aralığı Range(“B1:B20”) şeklinde tanımlanmakta ve B1
ile B20 arasındaki hücreler için hesaplama yapılmaktadır. Hücre aralığı olarak, tüm sütun ya da tüm
satır verilebilir. Örneğin; 5. Satırdaki tüm veriler için hesaplama yapılabilmesi için hücre aralığı
Range(“5:5”) olarak verilmelidir. İkinci sütun (B sütunu) için hesaplama yapılabilmesi için hücre
aralığı Range(“B:B”) olarak verilmelidir. Bu bölümde WorksheetFunction özelliği ile birlikte
kullanılan belirli fonksiyonlar tanımlanmaktadır.

Count

Tanımlanan hücre aralığında bulunan sadece sayısal verileri sayar. Örneğin B1:B20 hücre
aralığındaki sayısal verileri saydırmak için VBA makro kodu aşağıdaki şekilde olacaktır.

n = WorksheetFunction.Count(Range("B1:B20"))

B1:B20 aralığında bulunan sadece sayısal veriler sayılacak ve bulunan değer n değişkenine
atanacaktır.

CountA

Tanımlanan hücre aralığındaki tüm verileri sayar. Örneğin B sütunundaki tüm verileri saydırmak için
VBA makro kodu aşağıdaki şekilde olacaktır.

n = WorksheetFunction.CountA(Range("B:B"))

B sütununda bulanan tüm veriler sayılacak ve bulunan değer n değişkenine atanacaktır.


47

Sum

Tanımlanan hücre aralığındaki tüm sayısal verilerin toplamını verir. Örneğin B1:B20 hücre
aralığındaki tüm sayısal verileri toplamak için VBA makro kodu aşağıdaki şekilde olacaktır.

t = WorksheetFunction.Sum(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal veriler toplanacak ve bulunan değer t değişkenine atanacaktır.

SumIf

Tanımlanan hücre aralığındaki sayısal verilerin belirlenen bir şarta göre toplamını verir. SumIf
fonksiyonunun Sum fonksiyonundan farkı, belirli bir şarta göre toplama yapmasıdır. Örneğin B1:B20
hücre aralığında, 20’den daha büyük sayısal verileri toplamak için VBA makro kodu aşağıdaki
şekilde olacaktır.

st = WorksheetFunction.SumIf(Range("B1:B20"), ">20")

VBA makro kodunda da görüleceği üzere, hücre aralığından sonra çift tırnak içine koşul
yazılmaktadır. B1:B20 arasındaki 20’den büyük hücrelerin toplamı alınmakta ve bulunan değer st
değişkenine atanmaktadır. Şart olarak değişik şart yapılarını gerçekleştiren mantıksal operatörler
kullanılabilmektedir. Örneğin “<20” 20’den küçük değerlerin, “>= 20” 20 ve daha büyük değerlerin,
“< >20” 20 dışındaki tüm değerlerin toplamı alınmaktadır.

Average

Tanımlanan hücre aralığındaki tüm sayısal verilerin ortalamasını vermektedir. Örneğin B1:B20 hücre
aralığındaki tüm sayısal verilerin ortalamasını almak için VBA makro kodu aşağıdaki şekilde
olacaktır.

ort = WorksheetFunction.Average(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal verilerin ortalaması alınarak elde edilen değer ort değişkenine
atanacaktır.

AverageIf

Tanımlanan hücre aralığındaki sayısal verilerin belirlenen bir şarta göre ortalamasını verir. AverageIf
fonksiyonunun Average fonksiyonundan farkı, belirli bir şarta göre ortalama almasıdır. Örneğin
B1:B20 hücre aralığındaki, 30’dan küçük sayısal verilerin ortalamasını almak için VBA makro kodu
aşağıdaki şekilde olacaktır.

orts = WorksheetFunction.AverageIf(Range("B1:B20"), "<30")


48

VBA makro kodunda da görüleceği üzere, hücre aralığından sonra çift tırnak içine koşul
yazılmaktadır. B1:B20 arasındaki 30’dan küçük hücrelerin ortalaması alınmakta ve bulunan değer
orts değişkenine atanmaktadır. Şart olarak değişik şart yapılarını gerçekleştiren mantıksal operatörler
kullanılabilmektedir. Bu fonksiyon da SumIf fonksiyonuna benzer olarak, Örneğin “<20” 20’den
küçük değerlerin, “>= 20” 20 ve daha büyük değerlerin, “< >20” 20 dışındaki tüm değerlerin
ortalaması alınmaktadır.

Max

Tanımlanan hücre aralığındaki sayısal verilerden en büyüğünü belirlemektedir. Örneğin B1:B20


hücre aralığındaki en büyük sayısal veriyi belirlemek için VBA makro kodu aşağıdaki şekilde
olacaktır.

ma = WorksheetFunction.Max(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal verilerin en büyüğü belirlenerek bu değer ma değişkenine


atanacaktır.

Min

Tanımlanan hücre aralığındaki sayısal verilerden en küçüğünü belirlemektedir. Örneğin B1:B20


hücre aralığındaki en küçük sayısal veriyi belirlemek için VBA makro kodu aşağıdaki şekilde
olacaktır.

mi = WorksheetFunction.Min(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal verilerin en küçüğü belirlenerek bu değer mi değişkenine


atanacaktır.

Median

Tanımlanan hücre aralığındaki sayısal verilerin medyan değerini vermektedir. Örneğin B1:B20 hücre
aralığındaki medyan değerini belirlemek için VBA makro kodu aşağıdaki şekilde olacaktır.

med = WorksheetFunction.Median(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal verilerin medyan değeri belirlenerek bu değer med değişkenine
atanacaktır.
49

StDev_S

Tanımlanan hücre aralığındaki sayısal verilerin standart sapma değerini vermektedir. Örneğin
B1:B20 hücre aralığındaki sapmayı belirlemek için VBA makro kodu aşağıdaki şekilde olacaktır.

ssap = WorksheetFunction.StDev_S(Range("B1:B20"))

B1:B20 hücre aralığındaki sayısal verilerin standart sapma değeri belirlenerek bu değer ssap
değişkenine atanacaktır.

Fact

Diğer fonksiyonlardan farklı olarak belirlenen bir hücredeki değerin faktöriyeli hesaplanmaktadır.
Örneğin B1 hücresindeki değerin faktöriyelini almak için VBA makro kodu aşağıdaki şekilde
olacaktır.

f = WorksheetFunction.Fact(Range("B1"))

B1 hücresindeki sayısal verinin faktöriyeli alınarak, bu değer f değişkenine atanacaktır.

2.4.7. WorksheetFunction Özelliği İçin Örnek Makro

Bir meşcereden örnek alan alınmış ve bu örnek alan içerisine giren tüm ağaçların göğüs çapları
ölçülmüştür. Ölçülen çap değerleri MS Excel çalışma sayfasında B sütununa girilmiştir. Hücre aralığı
B:B olarak belirlenmiştir. Kullanıcı tarafından kaç adet çap verisinin girileceği önceden bilinmediği
için hücre aralığı B:B verilerek B hücresindeki satır sayısı kadar veri değerlendirmeye alınabilecektir.
WorksheetFunction özelliği kullanılarak hesaplanması istenen her değişken (istatistik) için ayrı bir
makro kodu oluşturulmuş (Sub – End Sub) ve bu makroların her biri MS Excel çalışma sayfasında
ayrı birer komut düğmesine atanmıştır. Program sonucunda hesaplanan değerler (çıktılar) çalışma
sayfası üzerindeki hücrelere yazdırılmaktadır. Programın MS Excel Çalışma sayfası görünümü
aşağıdaki gibidir.
50

WorksheetFunction özelliği kullanılarak hesaplanması istenen her değişken için oluşturulan makro
kodları (Sub – End Sub) aşağıdaki şekildedir. Bu her bir değişken için ayrı ayrı oluşturulan makro
program parçaları, girdiler, çıktılar ve komut düğmeleri “Sayfa1” isimli çalışma sayfasında
olduğundan dolayı, VBA ortamında “Sayfa1” adlı çalışma sayfasına ait kod sayfasına yazılmıştır.
51

Sub Sayi ( ) makrosunda B sütununa girilen sayısal verilerin sayısı;

n = WorksheetFunction.Count(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer n değişkenine atanmaktadır. Cells(2,
5)=n ifadesi ile hesaplanan n değeri (sayısal veri sayısı) çalışma sayfasında 2. Satır 5. Sütuna
yazdırılmaktadır. Sub Sayi ( ) makrosu çalışma sayfası üzerinde bulunan Veri Sayısı adlı komut
düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) veri sayısı elde
edilebilmektedir.

Sub toplam ( ) makrosunda B sütununa girilen sayısal verilerin toplamı;

t = WorksheetFunction.Sum(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer t değişkenine atanmaktadır. Cells(3,
5)=t ifadesi ile hesaplanan t değeri (toplam değer) çalışma sayfasında 3. Satır 5. Sütuna
yazdırılmaktadır. Sub toplam ( ) makrosu çalışma sayfası üzerinde bulunan Toplam adlı komut
düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) toplam değer elde
edilebilmektedir.

Sub ortalama ( ) makrosunda B sütununa girilen sayısal verilerin ortalaması;

ort = WorksheetFunction.Average(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer ort değişkenine atanmaktadır. Cells(4,
5)=ort ifadesi ile hesaplanan ort değeri (ortalama değer) çalışma sayfasında 4. Satır 5. Sütuna
yazdırılmaktadır. Sub ortalama ( ) makrosu çalışma sayfası üzerinde bulunan Ortalama adlı komut
düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) ortalama değer elde
edilebilmektedir.

Sub enbuyuk ( ) makrosunda B sütununa girilen sayısal verilerin en büyüğü;

ma = WorksheetFunction.Max(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer ma değişkenine atanmaktadır.


Cells(5, 5)=ma ifadesi ile hesaplanan ma değeri (en büyük değer) çalışma sayfasında 5. Satır 5.
Sütuna yazdırılmaktadır. Sub enbuyuk ( ) makrosu çalışma sayfası üzerinde bulunan En Büyük adlı
komut düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) en büyük değer
elde edilebilmektedir.
52

Sub enkucuk ( ) makrosunda B sütununa girilen sayısal verilerin en küçüğü;

mi = WorksheetFunction.Min(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer mi değişkenine atanmaktadır. Cells(6,
5)=mi ifadesi ile hesaplanan mi değeri (en küçük değer) çalışma sayfasında 6. Satır 5. Sütuna
yazdırılmaktadır. Sub enkucuk ( ) makrosu çalışma sayfası üzerinde bulunan En Küçük adlı komut
düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) en küçük değer elde
edilebilmektedir.

Sub ssapma( ) makrosunda B sütununa girilen sayısal verilerin standart sapması;

ssap = WorksheetFunction.StDev_S(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer ssap değişkenine atanmaktadır.
Cells(7, 5)=ssap ifadesi ile hesaplanan ssap değeri (standart sapma) çalışma sayfasında 7. Satır 5.
Sütuna yazdırılmaktadır. Sub ssapma ( ) makrosu çalışma sayfası üzerinde bulunan Standart Sapma
adlı komut düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) standart sapma
değeri elde edilebilmektedir.

Sub medyan( ) makrosunda B sütununa girilen sayısal verilerin medyan değeri;

med = WorksheetFunction.Median(Range("B:B"))

şeklindeki kod yardımıyla bulunmakta ve elde edilen değer med değişkenine atanmaktadır.
Cells(8, 5)=med ifadesi ile hesaplanan med değeri (medyan değeri) çalışma sayfasında 8. Satır 5.
Sütuna yazdırılmaktadır. Sub medyan ( ) makrosu çalışma sayfası üzerinde bulunan Medyan adlı
komut düğmesine atanmıştır. Çalışma sayfasında bu düğme seçilerek (tıklanarak) medyan değeri elde
edilebilmektedir.

MS Excel çalışma sayfası üzerinde bulunan tüm düğmelerin çalıştırılmasından sonra ekran görüntüsü
aşağıdaki şekilde elde edilmektedir.
53

2.5. MS EXCEL VBA ORTAMINDA MESAJ KUTULARI (MsgBox) VE VERİ GİRİŞ


KUTUSU (InputBox)

MS Excel VBA ortamında programlama işlemi gerçekleştirilirken kullanıcıları bilgilendirmek,


uyarmak ve yönlendirmek için kullanılan kutulara mesaj kutusu (MsgBox) adı verilmektedir.
Kullanıcıların programa veri girebildikleri kutulara ise Veri Giriş kutusu (InputBox) adı
verilmektedir.

2.5.1. Mesaj Kutusu (MsgBox)

Mesaj kutuları kullanıcıları bilgilendirmek, uyarmak ve yönlendirmek için kullanılmaktadır. VBA


ortamında en basit mesaj kutusunun üzerinde sadece bilgilendirme mesajı ve Tamam düğmesi
bulunmaktadır. Bu mesaj kutusunun VBA makro kodu ve görünümü aşağıdaki gibidir.

MsgBox “BİLGİSAYAR YAZILIM UYGULAMALARI”

Fakat VBA makro programlamada detaylı olarak bilgilendirme, yönlendirme ve uyarma


yapılabilmektedir. Bunun için yukarıda olduğu gibi MsgBox fonksiyonu kullanılmaktadır.
54

MsgBox fonksiyonunun genel yazılımı aşağıdaki gibi olmaktadır.

MsgBox “Açıklama”, Düğmeler+İkon, “Başlık”

Açıklama: Kullanıcıyı bilgilendirmek, uyarmak ve yönlendirmek için verilen mesajdır.

Düğmeler: Mesaj kutusunda yer alması istenen düğmeler tanımlanmaktadır. VBA ortamında en çok
kullanılan mesaj kutusu düğmelerinin, Türkçe adları, VBA kodları ve simgeleri aşağıdaki tabloda
verilmiştir.

Düğme Adı VBA Kodu


Evet, Hayır vbYesNo
Evet, Hayır, İptal vbYesNoCancel
Tamam vbOKOnly
Tamam, İptal vbOKCancel

İkon: Mesaj kutusunda görüntülenmesi istenen ikonlar tanımlanmaktadır. VBA makro kodunda
ikona ait kod, düğme kodundan sonra + işaretinden sonra yazılmaktadır. VBA ortamında kullanılan
mesaj kutusu ikonlarının, Türkçe adları, VBA kodları ve simgeleri aşağıdaki tabloda verilmiştir.

İkon Adı VBA Kodu İkon

Bilgi İşareti vbInformation

Stop İşareti vbCritical

Ünlem İşareti vbExclamation

Soru İşareti vbQuestion

Başlık: Mesaj kutusunun başlığında yer alması gereken ifade yazılmaktadır.

Değişik düğme ve ikonlardan oluşan mesaj kutusu kodları ve görüntüleri aşağıda verilmiştir.

MsgBox "Birim Fiyatlar Gösterilsin mi?", vbYesNoCancel + vbQuestion, "ORMAN İŞLETME MÜDÜRLÜĞÜ"
55

Yukarıdaki mesaj kutusunda Açıklama olarak “Birim Fiyatlar Gösterilsin mi?" ifadesi yazılmıştır.
Düğme olarak vbYesNoCancel VBA kodu ile Evet, Hayır, İptal düğmeleri yerleştirilmiştir. İkon
olarak vbQuestion VBA kodu ile Soru işareti ikonu kullanılmıştır. Mesaj kutusu pencere başlığı
olarak “ORMAN İŞLETME MÜDÜRLÜĞÜ" ifadesi yazılmıştır.

MsgBox "Hacim Verilerini Kontrol Ediniz.", vbOKCancel + vbCritical, "ORMAN İŞLETME MÜDÜRLÜĞÜ"

Yukarıdaki mesaj kutusunda Açıklama olarak “Hacim Verilerini Kontrol Ediniz." ifadesi
yazılmıştır. Düğme olarak vbOKCancel VBA kodu ile Tamam, İptal düğmeleri yerleştirilmiştir. İkon
olarak vbCritical VBA kodu ile Stop işareti ikonu kullanılmıştır. Mesaj kutusu pencere başlığı olarak
“ORMAN İŞLETME MÜDÜRLÜĞÜ" ifadesi yazılmıştır.

Programın çalıştırılması sırasında kullanıcıların seçtiği düğmelerin program tarafından


algılanabilmesi için mesaj kutuları içerisinde yer alan her bir düğmenin sayısal değeri mevcuttur.
Bunun için MsgBox fonksiyonunun bir değere atanması gerekmektedir. Mesaj kutusu içerisinde yer
alan bazı düğmelerin sayısal değerleri aşağıda gösterilmektedir.

Düğme Adı Değeri


Tamam 1
İptal 2
Evet 6
Hayır 7

2.5.2. MsgBox Fonksiyonu İçin Örnek Makro

Bir orman işletmesinde satılan tomruk cinslerine ait birim fiyatlar ve satış miktarlarına göre satış
tutarını ve KDV’li satış tutarını hesaplayan VBA makro program oluşturulsun. Bu programa ait MS
Excel çalışma sayfası görünümü aşağıdaki gibi olsun.
56

4 adet tomruk cinsine ait birim fiyatlar ve satış miktarları verilmiş bu verilere göre Tutar=Birim
Fiyat*Satış Miktarı, KDV’li Tutar=Tutar+ (Tutar*0,18) formülleri hesaplanmaktadır. KDV’li tutarın
hesaplanıp hesaplanmayacağı kullanıcının isteğine göre MsgBox fonksiyonu ile belirlenebilmektedir.
Bu işlemleri gerçekleştirilecek Sub Tutar ( ) isimli VBA makro kodu oluşturulmuş ve bu makro
program MS Excel çalışma sayfası üzerinde oluşturulan HESAPLA düğmesine atanmıştır. Bu makro
programa ait kodlar aşağıda verilmiştir.

Sub tutar()
n = WorksheetFunction.Count(Range("B:B"))
For i = 1 To n
bf = Cells(i + 1, 2)
sm = Cells(i + 1, 3)
st = bf * sm
Cells(i + 1, 4) = st
Next i
x = MsgBox("KDV'li Tutarlar Hesaplansın mı?", vbYesNo + vbQuestion, "ORMAN İŞLETME MÜDÜRLÜĞÜ")
If x = 6 Then
For i = 1 To n
bf = Cells(i + 1, 2)
sm = Cells(i + 1, 3)
kst = (bf * sm) + (bf * sm) * 0.18
Cells(i + 1, 5) = kst
Next i
Else
MsgBox "KDV'li Satış tutarı hesaplanmayacak", vbOKOnly + vbExclamation, "ORMAN İŞLETME MÜDÜRLÜĞÜ"
End If
End Sub
57

Makro program kodunu açıklarsak; programa Sub tutar ( ) ifadesi ile başlanmaktadır.
WorksheetFunction.Count(Range("B:B")) deyimi ile hesaplanacak veri sayısı belirlenmektedir.
For - Next döngüsü yardımıyla tomruk cinslerine ait birim fiyatlar ve satış miktarları girdi olarak
alınarak tomruk cinslerine ait tutarlar hesaplanmakta ve ilgili hücrelere yazdırılmaktadır. x =
MsgBox("KDV'li Tutarlar Hesaplansın mı?", vbYesNo + vbQuestion, "ORMAN İŞLETME
MÜDÜRLÜĞÜ") MsgBox fonksiyonu kullanılarak kullanıcıya KDV’li tutarların hesaplanıp
hesaplanmayacağı Evet – Hayır düğmelerinden oluşan mesaj kutusu yardımıyla sorulmaktadır. If x
= 6 Then , Evet düğmesinin değeri 6 olduğu için kullanıcının bu Evet düğmesini seçmesi durumunda
For – Next döngüsüyle KDV’li tutarlar hesaplanıp ilgili yerlere yazdırılmaktadır. Hayır düğmesini
seçmesi durumunda ise Else deyiminden sonra gelen MsgBox "KDV'li Satış tutarı
hesaplanmayacak", vbOKOnly + vbExclamation, "ORMAN İŞLETME MÜDÜRLÜĞÜ"
ifadesiyle mesaj kutusu görüntülenerek, kullanıcıya bilgi verilmekte ve KDV’li tutarlar
hesaplanmamaktadır.

HESAPLA düğmesine basıldığında program tarafından tutarlar hesaplanmakta ve mesaj kutusu


yardımıyla kullanıcıya KDV’li tutarların hesaplanıp hesaplanmayacağı sorgulanmaktadır. Bu mesaj
kutusunda Evet düğmesinin seçilmesi durumunda aşağıdaki ekran görüntüsü elde edilecektir.
58

Hayır düğmesinin seçilmesi durumunda ise aşağıdaki ekran görüntüsü elde edilecektir.

2.5.3. Veri Giriş Kutusu (InputBox)

Kullanıcıların programa veri girebilmeleri için VBA ortamında veri giriş kutuları (InputBox)
tanımlanabilmektedir. Veri giriş kutusunun genel VBA makro kodu aşağıdaki gibidir.

InputBox “Açıklama”, “Başlık”, “Varsayılan Değer”

Açıklama: Veri giriş kutusunda girilecek veriye ait mesaj yazılır.

Başlık: Veri giriş kutusunun başlığında olması gereken ifade yazılmaktadır.

Varsayılan Değer: Veri giriş kutusu açıldığında kutu içerisinde yer alan ilk değerdir.
59

Örneğin;

InputBox “Tomruk Birim Fiyatını Giriniz.”, “ORMAN İŞLETME MÜDÜRLÜĞÜ”, “200”

Yukarıdaki kodun çalıştırılmasıyla elde edilen ekran görüntüsü aşağıdaki gibi olacaktır.

Programlama aşamasında InputBox fonksiyonu bir değişkene atanmakta ve kullanıcının girdiği değer
doğal olarak bu değişkenin değeri olmaktadır.

2.5.4. InputBox Fonksiyonu İçin Örnek Makro

Bir öğrencinin vize notu ve final notu girdi olarak alan ve bu notlara göre geçme notunu ve geçme
durumunu veren bir VBA makro programı oluşturulsun. Girdiler (vize notu ve final notu) veri giriş
kutusuyla (InputBox) verilsin, çıktılar ise Mesaj kutusu ile verilsin. Bu durumda VBA makro kodu
aşağıdaki şekilde olacaktır.

Sub öğrenci_Notu()
vn = InputBox("Öğrencinin Vize Notunu giriniz.", "NOT GİRİŞİ", "100")
fn = InputBox("Öğrencinin Final Notunu giriniz.", "NOT GİRİŞİ", "100")
gn = vn * 0.4 + fn * 0.6
MsgBox "Öğrencinin Geçme Notu= " & gn
If gn >= 50 Then
MsgBox "GEÇTİ"
Else
MsgBox "KALDI"
End If
End Sub
60

Program Sub öğrenci_Notu deyimi ile başlamaktadır. InputBox fonksiyonu kullanılarak kullanıcı
tarafından girilen vize notu vn değişkenine, final notu fn değişkenine atanmaktadır. Vize notu ve final
notu ile geçme notu hesaplanmakta ve mesaj kutusuyla kullanıcıya bildirilmektedir. Daha sonra
geçme notu 50 ve yukarısında ise öğrenci geçmekte aksi takdirde kalmaktadır. Öğrencinin geçip ya
da kaldığı da mesaj kutuları yardımıyla kullanıcıya bildirilmektedir. Programın çalıştırılmasıyla
aşağıdaki ekran görüntüleri elde edilmektedir.

,
61

2.6. VBA ORTAMINDA KULLANICI FORMLARININ (USER FORM) TASARLANMASI

Visual Basic programlama dilinin en önemli özelliklerinden birisi de kullanıcı formları ve kontrol
nesneleridir. MS Excel VBA ortamında da program ara yüzü geliştirmek için kullanıcı formları ve bu
formların tasarlanmasında kullanılan kontrol nesneleri bulunmaktadır. Kullanıcılar, kullanıcı formları
sayesinde, oluşturulan programla etkileşimli bir şekilde veri girişi ve çeşitli işlemleri yapıp program
çıktılarını alabilmektedirler.

Kullanıcı formu eklemek için VBA ekranında Insert/User Form seçilir ve VBA ortamına kullanıcı
formu eklenmiş olacaktır.

Yukarıda şekilden de görüleceği üzere kullanıcı formu eklendiğinde, kullanıcı formunun yanına
Toolbox (Araç Kutusu)’nun geldiği görülmektedir. Araç kutusunun elemanlarına kontrol nesneleri
(Control Object) adı verilmektedir. Bu nesneler, oluşturulacak programın amacına bağlı olarak
seçilerek kullanıcı formu üzerine çizilmek suretiyle form tasarımı tamamlanmaktadır.

Kullanıcı formu (User Form) ve diğer kontrol nesnelerinin (Control Object) ile ilgili özelliklerin
ayarlanması ise Properties penceresinden yapılmaktadır. Eğer VBA ortamında properties pencersi
yok ise View/Properties Window komut düğmeleri seçilmelidir.

2.6.1. Kullanıcı Formu ve Kontrol Nesnelerinin Bazı Özellikleri

Backcolor: Kullanıcı formu ve kontrol nesnelerinin zemin renk ayarları yapılmaktadır.

Caption: Kullanıcı formunu üzerindeki pencere başlığında yer alması gereken ifade buradan
tanımlanır. Aynı zamanda kontrol nesnelerinin kullanıcı formu üzerindeki isimleri de bu özellik
yardımıyla verilebilir.

Font: Kullanıcı formunda ve kontrol nesnelerinde kullanılacak yazı tipi, stili ve büyüklüğü bu özellik
yardımıyla yaralanmaktadır.
62

Height: Kullanıcı formu ve kontrol nesnelerinin yükseklik boyutları bu özellik yardımıyla


ayarlanabilmektedir.

Width: Kullanıcı formu ve kontrol nesnelerinin genişlik boyutları bu özellik yardımıyla


ayarlanabilmektedir.

2.6.2. Araç Kutusu (Toolbox) Yer Alan Bazı Kontrol Nesneleri

Label (Etiket): Kullanıcı formu üzerinde, kullanıcılara bilgi vermek ve aynı zamanda program
çıktılarının gösterilebildiği kontrol nesnesidir.

TextBox (Metin Kutusu): Kullanıcı formu üzerinde, kullanıcıların veri girmesi ve aynı
zamanda program çıktılarının gösterilebildiği kontrol nesnesidir.

OptionButton (Seçenek Düğmesi): Kullanıcı formu üzerinde, kullanıcıların farklı seçenekleri


seçmesine imkân sağlayan kontrol nesnesidir. Kullanıcı formu üzerinde 1 adet seçenek düğmesinin
bulunması anlamsızdır. En az iki tane seçenek düğmesi bulunmalıdır. Seçilen seçenek düğmesi
içerisine nokta imi gelmektedir. Diğer seçenek düğmelerinin içleri boş olmaktadır. Seçenek
düğmeleri grup halinde tasarlanması gerekir.

CheckBox (Onay Düğmesi) : Kullanıcı formu üzerinde, kullanıcılar tarafından herhangi bir
işlemin yapılıp yapılmayacağının belirlenmesi için kullanılan bir kontrol nesnesidir. Bu kontrol
nesnesi seçildiğinde içine bir tik işareti gelecek ve bu işlemde program sırasında gerçekleştirilecektir.

Frame (Çerçeve): Kullanıcı formu üzerinde, kontrol nesnelerini özellikle seçenek düğmelerini
gruplandırmak için kullanılan kontrol nenesidir.

CommandButton (Komut Düğmesi): Kullanıcı formu üzerinde, makro programın


çalıştırılmasını sağlayan kontrol nesnesidir. VBA ortamında tasarlanan kullanıcı formlarında makro
program kodları genellikle komut düğmelerinin altına yazılmaktadır.
63

2.6.3. Kullanıcı Formları İle İlgili Makro Program Örneği

Ağaçların göğüs çapı, boy ve gövde şekil katsayılarına göre gövde hacmi veren bir makro programı
için bir kullanıcı formu tasarlanmıştır.

VBA ortamına bir kullanıcı formu eklendikten sonra, Properties Windows/ Caption özelliğinin
karşına AĞAÇ HACMİ yazılarak kullanıcı formunun pencere başlığında bu ifadenin görüntülenmesi
sağlanmıştır. Sonraki adımda kullanıcının bilgilendirilmesi, veri girişinin sağlanması, program
çıktısının görüntülenmesi, seçim yapılabilmesi ve onay verilebilmesi için aşağıdaki kontrol nesneleri
kullanıcı formu üzerine taşınmıştır.

Label1→ Caption: Göğüs Çapı (cm)=

Label2→ Caption: Ağaç Boyu (m)=

Label3→ Caption: Ağaç Hacmi

Label4→ Caption: Program sonunda hesaplanan değerin bu etiket üzerine yazdırılabilmesi için boş
bırakılmıştır.

TextBox1→ Caption: Göğüs çapı değeri kullanıcı tarafından bu nesneye girileceği için boş
bırakılmıştır.

TextBox2→ Caption: Ağaç boyu değeri kullanıcı tarafından bu nesneye girileceği için boş
bırakılmıştır.

Frame1→ Caption: Ağaç türü

OptionButton1→ Caption: Sarıçam

OptionButton2→ Caption: Kayın

OptionButton3→ Caption: Göknar

CheckBox1→ Caption: Hacim (dm3)

CommandButton1→ Caption: HESAPLA

CommandButton2→ Caption: ÇIKIŞ

Bu kontrol nesneleri kullanıcı formuna çizildikten sonra form tasarımı aşağıdaki gibi olmaktadır.
64

1 7 8 9

3 10

11
4
12

5
13

6 14

1- Kullanıcı Formu (User Form) 8 – TextBox2


2- Label1 9 – Frame1
3- Label2 10 – OptionButton1
4- Label3 11 – OptionButton2
5- Label4 12 – OptionButton3
6- CommandButton1 13 – CheckBox1
7- TextBox1 14 -CommandButton2

Form tasarımı tamamlandıktan sonra ağaç hacmini hesaplayan VBA makro kodunun yazılmasına
geçilmiştir. Bu kod CommandButton1 komut düğmesinin altına yazılmaktadır. Bu makro kodu
aşağıdaki gibi olmaktadır.
65

Private Sub CommandButton1_Click()


d = Val(TextBox1.Text)
h = Val(TextBox2.Text)
If OptionButton1 = True Then f = 0.46
If OptionButton2 = True Then f = 0.48
If OptionButton3 = True Then f = 0.5
v1 = 0.785 * (d / 100) ^ 2 * h * f
If CheckBox1.Value = True Then
v = v1 * 1000
Label4 = Round(v, 3) & " dm3"
Else
v = v1
Label4 = Round(v, 3) & " m3"
End If
End Sub
VBA makro kodu Private Sub CommandButton1_Click() olayının altına yazılmaktadır. Ağacın
göğüs çapı TextBox1 isimli metin kutusundan alınıp d değişkenine, d = Val(TextBox1.Text)
ifadesiyle, ağaç boyu ise TextBox2 isimli metin kutusundan alınıp h değişkenine h =
Val(TextBox2.Text) ifadesiyle atanmaktadır. V=0.785*d2*h*f formülü ile ağaç hacmi hesaplanacağı
için f (gövde şekil katsayısı) değişkeni ağaç türlerine göre değiştiği için OptionButton (Seçim
Düğmeleri) vasıtasıyla belirlenip girdi olarak kullanılmaktadır. If OptionButton1 = True Then f =
0.46 ifadesiyle Sarıçam’a ait seçenek düğmesinin seçilmesi durumunda f katsayısı 0.46, If
OptionButton2 = True Then f = 0.48 ifadesiyle Kayın’a ait seçenek düğmesinin seçilmesi
durumunda f katsayısı 0.48, If OptionButton3 = True Then f = 0.5 ifadesiyle de Göknar’a ait seçenek
düğmesinin seçilmesi durumunda f katsayısı 0.50 olarak alınmaktadır. v1 = 0.785 * (d / 100) ^ 2 * h
* f ifadesiyle göğüs çapı (d), boy (h) ve şekil katsayısı (f) değerlerine göre ağaç hacmi m 3olarak
hesaplanmaktadır. CheckBox1 onay kutusunun işaretlenmesi durumunda (If CheckBox1.Value =
True Then ), v1 değeri 1000 ile çarpılıp (v = v1 * 1000) hacim dm3olarak hesaplanmakta ve bu sonuç
Label4’e virgülden sonra 3 basamağa yuvarlama yapılarak Label4 = Round(v, 3) & " dm3" komutu
ile yazdırılmaktadır. CheckBox1 onay kutusunun işaretlenmemesi durumunda ise (Else) m3
biriminde hesaplanan hacim (v=v1) Label4’e virgülden sonra 3 basamağa yuvarlama yapılarak
Label4 = Round(v, 3) & " m3" komutu ile yazdırılmaktadır.
66

Private Sub CommandButton2_Click() olayının yani CommandButton2’nin altına Unload


UserForm1 ifadesi yazılarak bu komut düğmesinin seçilmesi durumunda kullanıcı formu
kapatılmaktadır. Ayrıca tasarlanan kullanıcı formunun MS Excel çalışma sayfasında
görüntülenebilmesi için modül kod sayfasına Sub hacim ( ) isimli bir makro program parçası
oluşturulmuş ve bu programa UserForm1.Show komutu yazılarak bu makronun çalıştırılmasıyla
kullanıcı formunun çalışma sayfası üzerinde görüntülenmesi sağlanmıştır. Sub hacim ( ) isimli makro
programı MS Excel çalışma sayfası üzerinde eklenen HACİM isimli komut düğmesine atanmıştır.
HACİM isimli komut düğmesi seçildiğinde aşağıdaki ekran görüntüsü elde edilmektedir.

Kullanıcı formuna göğüs çapı, boy değerleri girilmiş ve ağaç türü olarak Sarıçam seçilmiş ve onay
kutusu işaretlenmemiş ve bu durumda HESAPLA düğmesine basılarak elde edilen kullanıcı formuna
ait ekran görüntüsü aşağıda verilmiştir.

Onay kutusu işaretlenmediğinden dolayı hacim m3 olarak verilmiştir. Aynı verilerle onay kutusunun
işaretlenmesi durumunda elde edilen kullanıcı formuna ait ekran görüntüsü aşağıda verilmiştir.
67

Onay kutusu işaretlendiğinden dolayı hacim dm3 cinsinden verilmektedir.

YARARLANILAN VE ÖNERİLEN KAYNAKLAR

Korkmaz, M.T., 2001, Visual Basic For Application Makrolar Excel 2000 ile Programlama,
ExcelTim yayınları

You might also like