Visual Basic For Application (EXCEL) Programlama Ders · PDF fileModül Düzeyinde...
Transcript of Visual Basic For Application (EXCEL) Programlama Ders · PDF fileModül Düzeyinde...
Visual Basic For Application (EXCEL)
Programlama Ders Notları
Teber ÖZCEYHAN
Revizyon ve Baskı Bilgisi 48/30.03.2015 10:49:00
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 2
İçindekiler İçindekiler .............................................................................................................................. 2 Önsöz .................................................................................................................................... 4 Programlama Dili Nedir ve VBA nasıl bir ortamdır? ............................................................... 5 VBA’de Program Yazma... ..................................................................................................... 6 Genel Program Yapısı ........................................................................................................... 8
Makro Kaydetme ............................................................................................................... 9 Doğrudan Modülden Program yazma ...............................................................................10 Açıklama Satırları .............................................................................................................11
Sabitler ve Değişkenler.........................................................................................................12 Sabitler .............................................................................................................................12 Değişkenler ......................................................................................................................12 Değişken adlandırma kuralları ..........................................................................................13 Değişkenlerin Kapsamı ve Ömrü ......................................................................................14
Yerel Değişkenler .........................................................................................................14 Modül Düzeyinde Değişkenler ......................................................................................14
Statik değişkenler .............................................................................................................15 Değişken Türleri ...............................................................................................................15
Byte ..............................................................................................................................15 Integer ..........................................................................................................................15 Long .............................................................................................................................15 Single ...........................................................................................................................16 Double ..........................................................................................................................16 Currency .......................................................................................................................16 String ............................................................................................................................16 Date ..............................................................................................................................16 Boolean ........................................................................................................................16 Object ...........................................................................................................................16 Variant ..........................................................................................................................16
Diziler ...................................................................................................................................18 Operatörler ...........................................................................................................................20
Aritmetik Operatörler ........................................................................................................20 Karşılaştırma Operatörleri .................................................................................................20 Mantıksal Operatörler .......................................................................................................20
Hangi kod Nereye? ...............................................................................................................22 Workbook Modülü.............................................................................................................22 Worksheets Modülleri .......................................................................................................22 Serbest Modüller ..............................................................................................................22 Yordamlar (sub) ................................................................................................................22
Yordam Çalıştırma ........................................................................................................23 Yordam çağırma ...........................................................................................................23
Fonksiyonlar (function) .....................................................................................................23 Parametreler - Değer atama .............................................................................................24
VBA Komutları ......................................................................................................................25 Giriş Çıkış Komutları .........................................................................................................25 Karşılaştırma ....................................................................................................................25
if komutu .......................................................................................................................25 select komutu ...............................................................................................................27
Döngü Komutları ..............................................................................................................28 For…Next .....................................................................................................................28 Exit For .........................................................................................................................29
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 3
Do…Loop .....................................................................................................................29 Exit Loop ......................................................................................................................30 For Each…Next ............................................................................................................30
Excel Nesneleri ....................................................................................................................31 Woorkbook(s) Nesnesi .................................................................................................31 Worksheet(s) Nesnesi ..................................................................................................31 Alan Nesneleri ..............................................................................................................31 Hücre Nesnesi ..............................................................................................................32
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 4
Önsöz
Bu ders notları İnönü Üniversitesi Ekonometri Bölümü öğrencileri için TBT-II Dersi kapsamında Programlamaya giriş dersini uygulayabilmek amacıyla yazılmıştır. Hem derslerde kullanmak hem de daha sonraki Programlama konularında başvurmak için tasarlanmıştır.
Daha önceki konularda oluşturduğumuz Algoritmalar için uygulamalar yapmayı ve gerçek bilgisayar ortamında bu alıştırma ve örnekleri denemeyi sağlayacak temel bilgiler içerir.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 5
Programlama Dili Nedir ve VBA nasıl bir ortamdır?
Programlama Dili bilgisayarda çözülecek bir sorun için çözümün bilgisayara adım adım yazılmasını sağlayan biçimsel kuralları olan ve bu kurallara sıkı sıkıya bağımlılığı gerektiren bir tanımlar kümesidir.
Belki daha kısa bir tanımı ile sizinle bilgisayar arasında bir tercümandır demek doğru olur.
VBA ortamı Modern programlama dillerinde Interpreter mantığı ile çalışan bir programlama dili olup çalışabilmesi için EXCEL ortamına ihtiyaç duyar. Yapılan çalışmalar EXCEL hücreleri ve EXCEL’in bize sunduğu özellikler ile görselleştirilir.
Bu ders notları bu amaçla hem programlamayı somutlaştırmaya çalışacak hem de EXCEL hakkında gerekli olabilecek nesne modeli hakkında bilgi verecektir.
VBA aslında tüm Office uygulamaları ile kullanılabilen Ofis ortamında gömülü bir programlama dilidir. Temelde Visual Basic programlama öğeleri üzerine kuruludur. Ama her ofis programında da farklı nesne yapılarından dolayı değişik yapılardan bahsedilir.
Yani VBA’yı öğrenerek temelde tüm ofis uygulamalarında program yazabilirsiniz. Ve ofis ortamınızda otomasyon oluşturabilirsiniz.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 6
VBA’de Program Yazma...
Bu ortamda Program yazabilmek için öncelikle EXCEL programına sahip olmalısınız. Bu notlarda EXCEL 2007 kullanılmaktadır.
Öncelikle EXCEL ortamında Geliştirici sekmesinin etkin hale getirilmesi gerekmektedir.
Eğer EXCEL ortamınızda yukarıda gösterildiği gibi Geliştirici Sekmesi Görünmüyorsa bu sekmeyi etkin hale getirmek için OFFICE düğmesinde “Excel Seçenekleri” Komutu seçilir. Sizi aşağıdaki gibi bir iletişim kutusu karşılayacaktır.
Bu iletişim kutusunda kırmızı ile işaretlenmiş onay kutusunun işaretlenmesini ve TAMAM diyerek onaylayıp çıkmayı sağlamalısınız.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 7
Artık Kod yazmaya ve VBA program parçacıkları geliştirmeye hazırsınız demektir. Geliştirici Sekmesi seçildiğinde sizi aşağıdakine benzer bir takım komutlar karşılar.
Bu bölümde Visual Basic komutu bizi daha çok ilgilendirmektedir. Ve yeri geldikçe diğer komutlara da değinilecektir. Eğer Visual Basic komutu seçilirse ekranda program kodları yazmanızı sağlayacak Kod düzenleme ekranları sizi karşılayacaktır.
Bu ekranda Sol üst bölüm Açık olan EXCEL Kitabını, bu kitapta yer alan Çalışma sayfalarına dair kodlamaların yapılacağı düğümleri ve Genel kodlamaların yapılacağı modül bölümü gömeniz mümkün. Hemen onun altında Properties bölümünde seçtiğiniz bölüm ile ilgili özelliklerin yer aldığı özellikler kısmı yer alır. Ekranın diğer kısmında ise kodlama yapılacak editör alanları açılacaktır. Kodlama yaptığınız pencere kodlama yaptığınız nesneye ait olacaktır.
Araç çubuğunda ise yazdığınız kodları çalıştırıp durdurabileceğiniz, yaptığınız kodlama ile ilgili düzenleme yapabileceğiniz düğmeler yer almaktadır.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 8
Genel Program Yapısı
Bu ekranda Project dediği kısımda EXCEL çalışma kitabınız içerisinde yer alan tüm sayfa ve modüllerin olduğu bir kısım görünüyor. Bu kısım bu Kitabın tüm sayfalarını, kitabın kendisini ve bu kitaba ait modülleri gösteriyor. Bu görünen nesnelerin her birinin kodlanabilir ve kodlanmış komutların çalıştırılabilir parçacıkları bulunur. Bu parçacıklar çift tıklandığında Code diye anılan kodla sayfaları gelir. İşte bir programlarımızı bu boş sayfalara yazacağız. Ve tabii ki yazdıkça kodların dolduğunu göreceğiz.
Bu ekranda EXCEL kitabının sahip olduğu gömülü nesneler Excel Objects bölümünde görünürken bizim yazmayı planladığımız Modüllerin çoğu Modules bölümünde yer alacaktır. Nesnelerin içerisine yazmış olabileceğiniz kodlar sadece o nesnelerden ulaşılabilir olurken Modülle bölümüne yazacağınız kodlar tüm nesnelerden ve modüllerden ulaşılabilirdir.
Bazen bu ekrana ulaşabilmek için Makro Kaydedicisinden faydalanırız. Makro kaydedicisi yaptığımız işlemleri kaydeden ve bunları VBA kodları ile ifade edip saklayan bi komuttur. Daha sonraki adımlarda bu kayıtlara modüllerden ulaşabilir ve tekrar tekrar çalıştırabilirsiniz.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 9
Makro Kaydetme
Görünüm sekmesinde de yer alan Makrolar komutundan Makro kaydet komutunu seçtiğiniz zaman yandakine benzer bir iletişim kutusu çıkar. Bu iletişim kutusu içerisinde Makro’ya bir ad vermeniz, gerekiyorsa bir açıklama yazmanız, saklanacağı yeri belirtmeniz ve son olarak ihtiyaç varsa kısayol tuşu tanımlamanız sağlanır. TAMAM denince sonraki tüm davranışlarınız kaydedilir. Kayıt işleminin
tamamlanabilmesi için yine görünüm sekmesinde ve Makro komutundan Kaydı Durdur komutnu seçiyoruz. Bu şekilde yaptığımız eylemler VBA kodları ile ifade edilebilir bir duruma gelir.
Aşağıdaki örnekte bu yöntemle adı Ekonometri olan bir Makro kaydedilmiş ve yaptığımız eylemler VBA kodları ile ifade edilmiştir. Bu makro daha sonradan yine Makrolar komutundan çalıştırılabilir. Böylece sıkça yapılması gereken bir işlemi otomatiğe bağlamış olabilirsiniz.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 10
Doğrudan Modülden Program yazma
Eğer yazacağınız program parçası hakkında bilginiz var ise ve Makro kaydedicisinin yardımına ihtiyacınız yok ise kodlarınızı doğrudan modüllere yazarsınız. Hata makro kaydedicisinin hatalı gibi görünen kısımlarını ya da değiştirmek istediğiniz kısımlarını kod düzenleyicisinden düzenleyebilirsiniz.
Açacağınız Kod sayfasında bir modül sayfası oluşturup içerisine de şu kodları gördüğünüz gibi yazabilirsiniz.
Yordamın adı doldur olarak tasarlanmış. Bu yordam Kitap1 dosyasında Module2 isimli modül içinde yer alıyor. Yeşil olarak görünen satırlar açıklama satırı ve derleyici açısından hiçbir önemi yok. Mavi olarak görülen sözcükler VBA için ayrılmış sözcüktür. Diğer Siyahlar ise programınızın geri kalan komutlarını ve ifadelerini anlatır.
Bu programı yazıp çalıştırarak ne tür bir işlem yaptığını kendi gözünüzle
görünüz. İlk düğme programı çalıştırma düğmesidir. 2. Düğme çalışan programı duraklatma düğmesi üçüncüsü ise çalışan programı durdurma düğmesidir.
Zaman zaman yazdığınız kodlarda VBA sizlere kodu tamamlama, kodun olası alternatifleri arasında seçenekler sunma vb. özellikler sunar. VBA nesne yönelimli bir programlama dili ve ortamı olduğu için EXCEL ile ilgili özelliklere ulaşırken EXCEL’in nesne yapısından faydalanabilirsiniz. Bu nesne yapısı içi kodlar yazılırken iç içe nesneler ve nesneler ile özellikleri ve metodları arasına . (Nokta) işareti konur. Örneğin yukarıda cells(x,1).select ifadesinde cells EXCEL üzerinde bir hücreyi (x. Satır
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 11
1. Sütun) select ifadesi ise bu hücrenin seçileceğini anlatan metodu belirtir. Bu tür ifadeleri bazen oldukça uzamış olarak bile görebileceğiz.
Bazen bu nesne, metod ve özellikler hakkında yardım almamız gerekebilir. Bu tip durumlarda bu nesneyi yada özellik veya metodunu seçip F1 tuşuna basabiliriz. EXCEL seçili bu özellik hakkında size yardım sunacaktır.
Açıklama Satırları
Yazacağınız modül veya programlarda derleyici tarafından dikkate alınmasını istemediğimiz ifadeleri Açıklama Satırı olarak belirleriz. Bu amaçla ya REM sözcüğünü ya da ‘ işaretini kullanırız. VBA için açıklama satırları TEK satırdır. Her açıklama satırı için REM ifadesini kullanmanız gerekir.
Normalde VBA’da tüm kodlar da tek satırda bitmelidir. Ancak kodlar tek satırda tamamlanamazsa, bu kodların diğer satırda devam ettiğini belirtmek üzere alt tire (_) işareti yarım kalan satırın sonuna yazılır. Bu işaret sonraki satırın bu komutun devamı olduğunu anlatır.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 12
Sabitler ve Değişkenler
Her programlama dilinde olduğu gibi VBA ortamında da programları geliştirirken değişkenler tanımlanabilir ve bir takım yollarla sabitler ifade edilebilir. VBA’da farklı olarak veya fazladan hücrelere erişmek ve kullanmak mümkündür.
Sabitler
Diğer programlama dilerinde olduğu gibi VBA ortamında da sabiler bulunur. Bu sabitler üç şekilde anlaşılmalıdır.
1. Program içinde kullanılan sabit sayı, sabit alfabetik değer ve diğer sabitler (34, 2.234, “geçti” gibi)
2. Const ifadesi ile tanımlanmaya çalışılan sabitler (const pi =
3.14 gibi)
3. Enum sabitleri olarak VBA tarafından tanımlanmış ve Programlarda bazı sayıların kullanılmasını, hatırlanmasını kolaylaştıran ifadelerdir. Bunlar çoğunlukla xl ön eki ile başlar ve anlattıkları sayı veya tanıma göre ismin geri kalan kısmı tamamlanır. Bazı durumlarda bunların vb ile başladığı da görülebilir. Mesela vbYes, vbNo, vbCancel sabitleri iletişim kutularında evet, Hayır ve İptale tıklandığında döndürülen değerleri anlatır.
Değişkenler
Değişkenler Programımız çalışırken her an değişik değerler alabilen, ve bellekte bir yer işgal eden saklama birimleridir. Bu sakla işlemi Ana Bellek üzerinde yapılır ve elektrik kesintilerinden etkilenir. Saklanacak değere göre farklı tipler de olabilir. Mesela saklanacak değer tam sayı ise integer kesirli sayı ise single veya double dizgi ifadesi ise string sözcükleri ile anlatılır.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 13
Yukarıdaki Tablo VBA’da tanımlayabileceğiniz değişkenler hakkında sizlere bilgi verecektir. Bunlar basit tipte verilerdir. Ancak bir takım nesneleri tanımlamak üzere Object tanımı kullanılabilir. Bazen de tanımladığınız değişkenin ne tip değerler alabileceği çok belirgin değildir. Bu durumda Variant tanımı kullanılır.
Dim değişken_adi as değişken_tipi
Şeklinde tanımlanan değişkenler de değişken_tipi olarak belirttiğimiz ifade kullanılacak değişkenin ne türde olacağını yani içerisinde saklayacağı değerlerin hangi özellikte, hangi büyüklükte ve hangi hassaslıkta olacağını belirtmemizi sağlar. Yukarıdaki şemada verilen türlerden biri olabilir. Değişken_adi ise bu değişken için kullanmayı planladığınız adı anlatır.
Değişken adlandırma kuralları
Değişkenlere vermeyi planladığınız isimler bir takım kurallara uymalıdır.
Değişken isimleri har ile başlamalıdır. Harf rakam ve alt tire işaretinden oluşabilir. Fakat boşluk, ve bir
takım özel karakterleri içermez. En fazla 40 karakterlik isimler verebilirsiniz. VBA tarafından kullanılan ayrılmış sözcükler değişken adı olarak
kullanılamaz.
VBA ortamında kullanılan her değişkenin önceden tanımlanması gibi bir zorunluluk yoktur. Bir değişken kullanıldığı anda tanımlanmış kabul edilir. Ancak bu şekilde bazen yanlış yazımdan dolayı tanımlamadığınız ve hatta düşünmediğiniz halde farklı değişkenleri kullanmış olabilirsiniz. Bu da
Değişken Tipleri
Sayı
Tam Sayı
Byte
Integer
Long
Kesirli Sayı
Single
Double
Currency
Dizge
String
Tarih
Date
Mantıksal
Boolean
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 14
işlemlerinizin beklenenin aksine sonuçların üretilmesi şeklinde etkileyecektir.
Böyle bir hatanın en azından derleme anında anlaşılabilmesi ve mantıksal hataya yol açmadan çözülebilmesi için option explicit ifadesi ile
tanımlamalarınızı zorunlu hale getire bilirsiniz. Bu ifade modül seviyesinde bir modülün en üstüne yazılan ifadedir. Bu ifade ile bu modül içerisinde kullanacağınız tüm değişkenlerin dim sözcüğü ile tanımlanmasını zorunlu hale getirmiş olacaksınız.
Değişkenlerin Kapsamı ve Ömrü
Değişkenler yazıldıkları yere göre bir kapsama sahiptirler. Yani etkilerini gösterdikleri bir bölgeye sahiptirler. Bir modül fonksiyon ve yordamlardan oluşur. Fonksiyonlar function sözcüğü ile yordamlar da sub sözcüğü ile tanımlanırlar. Bu tanımlar ile modül dediğimiz bütün gerekli olduğu kadar küçük parçaya ayrılmış olur.
Değişkenlerimizde ya bu küçük parçaların içinde ya da modül seviyesinde hüküm sürerler. Hatta tüm EXCEL çalışma ortamında hüküm sürmeleri de mümkündür. Bu amaçla değişkenlerin yazıldıkları yer önemlidir. Ancak en az onun kadar kullanılan tanımlama sözcükleri de önemlidir.
Yerel Değişkenler
Bu değişkenler yordam veya fonksiyonların içinde dim sözcüğü ile tanımlanan değişkenlerdir. Bu şekilde tanımlanmış değişken sadece bu yordam içinde hüküm sürer. Yani kapsama alanı sadece bu fonksiyon veya yordamdır.
Modül Düzeyinde Değişkenler
Bu değişkenler Modülün tanımlamalar bölümünde tanımlanır. Modülün en üst bölümü olan bu kısımda tanımlanan değişkenler private, public veya dim sözcüklerinden biri ile tanımlanabilir. Private sözcüğü o değişkeni sadece o modülde kullanılabilir olarak tanımlar. Dim ile private aynı anlamdadır. Public sözcüğüile tanımlanan değişkenlerde ise o değişkeni başka yordamlardan da görüp kullanabilirsin anlamına gelir.
Aynı zamanda Global sözcüğü ile de tüm modüllerde kullanılabilecek değişkenler tanımlanır.
Bu değişkenler için isim çakışması olur ise en son yaptığınız tanım geçerli olacaktır. Programın çalışma sırasına göre en son yapılmış tanım daha önce yapılmış tanımları gölgeler veya o tanımları ezer diyebiliriz.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 15
Statik değişkenler
Yukarıda anlattığımız kurallar çerçevesinde her değişken ilgili bölgede hüküm sürer.normal şartlarda herhangi bir değişkene statik tanımı uygulanmadığı sürece her değişken kendi yordamı içinde sıfırlanarak hayata başlar. Bu değişken her yordam çağrısında yeniden oluşturulur. Ancak bir değişken static anahtar sözcüğü ile tanımlanırsa bu değişken
bu yordama ait olmakla birlikte her yordamın yeniden çalıştırılması sırasında yeniden oluşturulmaz. Bir kere oluşturulur ve bu değişken ile işleme devam edilir.
Static K as integer
Şeklinde tanımlanmış bir değişken bu şekildedir.
Değişken Türleri
Byte
0 ile 255 arasında tamsayıları saklayabilecek kapasiteye sahip bir değişken türüdür. Bilgisayarın bellek ortamında 1 byte’lık yer işgal eder. Değişken ile ilgili dikkat edilecek hususlar aşağıdadır.
Negatif değerler alamaz 255’ten büyük değer alamaz Kesirli değer alamaz
Integer
-32,768 ile 32,767 arasında tam sayıları saklayabilecek kapasitede bir değişken türüdür. Bilgisayarın bellek ortamında 2 byte’lık yer işgal eder. Değişken ile ilgili dikkat edilecek hususlar aşağıdadır.
-32,768-32,767 sayı aralığında değer alır Kesirli değer alamaz
Long
Integer türündeki değerlerin uğraştığınız sayılar için yetersiz geldiği durumlarda kullanılan değişken türüdür. Tamsayıların saklanması için kullanılır. Bilgisayarın bellek ortamında 4 byte’lık yer işgal eder. Değişken ile ilgili dikkat edilecek hususlar aşağıdadır.
-2,147,483,648-2,147,483,647 sayı aralığında değer alır Kesirli değer alamaz
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 16
Single
Sayılarınızın ondalıklı sayılar olduğu durumda tamsayı değişkenler işinize yaramazlar. Bu amaçla kullanılabilecek kesirli sayıları saklayabileceğiniz değişken türüdür. Bilgisayarın bellek ortamında 4 byte’lık yer işgal eder.
Double
Single Tek duyarlıklı bir değişken türüdür. Daha hassas işlemlerde gerek sayının tam kısmının daha büyük olduğu durumlarda, gerekse ondalık hanesinin daha hassas değerler için kullanılacağı durumlarda bu değişken türü kullanılır. Bilgisayarın bellek ortamında 8 byte’lık yer işgal eder.
Currency
Parasal değerleri saklamak istediğiniz durumlarda kullanabileceğiniz bir değişken türüdür. Noktadan sonra 4 basamak kadar bir hassasiyet sağlar. Bilgisayarın bellek ortamında 8 byte’lık yer işgal eder.
String
Alfabetik ifadeleri saklamak için kullanılan bir değişken türüdür. Bilgisayarın belleğinde 0 ile 65,500 byte arasında yer kaplar. Eğer kullanacağınız alfabetik ifadenin alabileceği uzunluklar belli ise tanımlamanızı string * 45 şeklinde yapıp 45 karakterlik bir alan
ayrılmasını sağlayabilirsiniz.
Date
Tarih saklamak istediğiniz durumlarda kullanacağınız değişkendir.
Boolean
İçerisinde true yani doğru veya false yani yanlış bilgileriniz saklayan bir değişkendir.
Object
EXCEL’e ait bir takım nesneleri saklamak veya bu nesnelere işaret edebilmek amacıyla kullanılan bir değişken türüdür.
Variant
Hemen hemen birçok türdeki veriyi içerisinde saklayabilen bir türdür. Sayısal, tarih para birimi gibi değerlerin tamamını saklayabilecek kapasitededir.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 17
B tip bir değişkenin içindeki değer hangi türdedir bunu anlayabilmek için kullanılabilecek bir takım fonksiyonlar bulunmaktadır.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 18
Diziler
Basit değişkenlerin yanı sıra kimi durumlarda diziler kullanılmak zorunda kalınabilir. Diziler aynı amaç için kullanılan ve dolayısı ile da aynı türden olan çok sayıdaki değişkeni tek bir değişkenmiş gibi görmemizi ve kullanmamızı sağlayan yapılardır. Bu yapılar sayesinde döngü komutları ile bu değişken içindeki tüm elemanlara seri ve sistematik bir şekilde erişilebilir.
Diziler tek boyutlu olabileceği gibi çok boyutlu da olabilir. Tek boyutlu diziler matematikte bahsi geçen VEKTÖR kavramına çift boyutlu diziler MATRİS kavramına karşılık gelir. Hatta üç boyutlu veya daha fazla boyutlu olmaları da mümkündür. Ancak yaygın olarak tek veya çift boyutlu diziler kullanılır.
Her bir değişken türü için dizi tanımlanabilir. Diziyi tanımlamadan kullanmanız mümkün değildir. Dizi tanımlandığında hem değişkenin türünden hem de değişkenin eleman sayısından bilgi verirsiniz.
Dim ogrenci(25) as string
Bu ifade 25 elemanlı bir string dizisi tanımlar. Yani 25 tane ad-soyad bilgisi tutabilecek bir dizi tanımlanmıştır.
Dim matris(4, 8) as integer Dim veriler (4,6,8) as double
Buradaki ifadelerden birincisinde dört satırdan sekiz sütundan oluşan bir tamsayı matrisi tanımlamıştır. İkinci ifade ise dört satır altı sütun ve bunun gibi sekiz düzlemden oluşmuş bir küp tanımlar.
Bazen tanımlanacak dizinin boyutu ve kaç elemanlı olacağı bilinemeyebilir. Bu durumda dinamik dizi tanımlanır. VBA’da dinamik dizi modül düzeyinde bir değişkenin aşağıdaki şekilde tanımlanması ile oluşturulur.
Dim dinamik()
Daha sonra herhangi bir yordam içinde daha önce o modülde tanımlanmış bir değişken redim ifadesi ile tekrar tanımlanarak genişletilir. Eğer bu
redim ifadesi ile beraber preserve ifadesi de kullanılarak bir tanım
yapılırsa dizi içerisinde daha önceden yer alan değerler korunmuş olur.
Redim veri(50) as integer Redim preserve veri(100) as integer
Dizilerde bulunan eleman sayılarının veya dizi indis değerlerinin üst baş ve alt baş değerlerinin bulunmasına ihtiyaç duyabilirsiniz. Bu amaçla LBound
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 19
ve UBound adında iki tane fonksiyon bulunur. Bu fonksiyonlardan UBound
indisin üst baş değerini bulurken LBound ise dizide indisin alt baş değerini
bulur.
Msgbox(LBound(veri)) Msgbox(UBound(veri))
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 20
Operatörler
Bir Programlama dilinde gerek aritmetik işlemleri yapabilmek için gerekse de mantıksal karşılaştırmaları veya mantıksal işlemleri yapabilmek için operatörler bulunur. Bu operatörlerin çoğunluğu bir çok programlama dilinde aynı olmakla birlikte ufak tefek farklılıklar bulunabilir.
Aritmetik Operatörler
Matematikte gördüğümüz dört işlem tarzı işlemleri yapabilmek için kullandığımız operatörlerdir.
() İşlem önceliklerini değiştirmek için parantezler kullanılır.
^ Üs alma işlemi
\ Tamsayı bölme operatörü MOD Kalanı bulma operatörü
*, / Çarpma ve Bölme işlemleri
+, - Toplama ve Çıkarma işlemeleri & Karakter dizgelerini arka arkaya birleştirmeyi sağlar.
Karşılaştırma Operatörleri
Sayıları veya alfabetik ifadeleri karşılaştırmayı sağlayan operatörlerdir. İki değerin veya değişkenin bir birlerine göre büyüklük-eşitlik-küçüklük karşılaştırmalarını yapar.
>, >= Büyüktür veya büyük eşittir
<, <= Küçüktür veya küçük eşittir
= Eşittir <> Eşit değildir yani farklıdır.
Mantıksal Operatörler
Mantıksal DOĞRU ya da YANLIŞ sonuçlar üretmek üzere kullanılan ve birden fazla mantıksal ifadeyi biribirine bağlayan değimlerdir.
And Mantıksal Ve işlemine karşılık gelir ve doğru değer üretebilmesi için her iki mantıksal ifadenin DOĞRU olması gerekir
Or Mantıksal ya da işlemine karşılık gelir ve doğru değer üretebilmesi için her iki mantıksal ifadeden birinin DOĞRU olması yeterlidir.
NOT Mantıksal değil işlemine karşılık gelir ve doğru değeri yanlışa; yanlış değeri de doğruya dönüştürür.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 21
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 22
Hangi kod Nereye?
VBA ortamında kod yazılabilecek bir çok modül olduğunu fark etmişsinizdir. Bu modül sahaları aslında isimlerinden de anlaşılacağı üzere kitabın tamamı, sayfaların her biri veya daha bağımsız şekillerde kod yazmak için oluşturulmuş sahalardır.
Workbook Modülü
Bu modül tüm çalışma kitabını ilgilendiren kodları yazabileceğiniz sahayı gösterir. Ancak aslında Çalışma kitabı ile ilgili bir takım olaylarda çalışması gereken kodlar var ise bu bölümdeki ilgili EVENT bölümlerine bu kodlar yazılır. Mesela kitap açıldığında bir şey yapılması gerekiyorsa Workbook Kısmında Open kısmına bir takım kodlar yazılır.
Worksheets Modülleri
Bu modüllerden Çalışma kitabınızdaki sayfa sayısınca vardır. Her biri bir çalışma sayfasına adanmıştır. Bu sayfalardan birini ilgilendiren kodlar ilgili modüle yazılırlar. Örneğin bir sayfadan diğerine geçişte bir şeyler yapılması isteniyorsa o sayfaya ait Worksheet kısmında Activate Metoduna ilgili kodlar yazılır.
Serbest Modüller
Tüm Çalışma ortamı ile ilgili olan ve hiçbir EXCEL nesnesine tamamen bağlı olmayan kodlar serbest modüllere yazılırlar. Bu modüllerde EVENT dediğimiz olaylar görünmez. Çünkü genel kodların ilgilenebileceği nesneler ve bu nesnelerin de olayları söz konusu değildir. Ancak bizler yazacağımız kodların çok büyük bir bölümünü buraya yazacağız. Bu amaçla da bu modüllere ya yordam ya da fonksiyon yazarız.
Yordamlar (sub)
Eğer bir program parçasının sadece hizmet döndürmesi bekleniyorsa bu program parçası yordam olarak tasarlanır ve yazılır. Bu tip bit yordam kendisine gelen parametreleri kullanarak bir takım hesaplamalar yapabilir, bir takım sonuçlara ulaşabilir, birtakım bilgileri ekrandan veya dosyadan okumaya çalışabilir ve bunun tam ters olarak çağrıldığı yere bir hizmet döndürür. Bu hizmet bulunan değerin ekrana yazılması veya bir dosyaya yazılması şeklinde olabilir. Bu tip bir yordam adının anılması ile çağrıldığı yerden icra edilir.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 23
Yordam Çalıştırma
Yordam çalıştırmak demek daha önceden yazılmış yordamın, tanımında bahsi geçen görevlerini yerine getirmesi maksadıyla çağrılması demektir.
Yordamlar başka yordam veya fonksiyonlardan adları anılmak suretiyle çağrılabilirler. Ancak kullanıcının bu yordamları başlangıçta çalıştırabilmek için aşağıdaki yöntemlerden birini kullanması gerekir.
1. Makro Ekranından
Kullanıcı EXCEL ekranında iken Geliştirici sekmesinden Makrolar düğmesine tıklar. Kendisini karşılayan makroların her biri Programcının oluşturduğu yordamlardır. Bu yordamlardan istediğini seçer ve çalıştır düğmesine tıklatır.
Bu yordamları bu ekrandan silmesi, adım adım çalıştırması gibi seçeneklerde mevcuttur.
2. Klavyeden
Eğer Makro ekranında makronuzu seçtikten sonra seçenekler komutuna gelirseniz size bu makro ile ilgili değiştirilebilecek özellikler sorulur. Bu özelliklerden biri Kısayol tuşudur. Ve buna bir değer atarsanız bu makroyu makrolar komutuna gelmeden klavyeden kısa yol ile çalıştırabilirsiniz.
Bu kısayol atama işini bir makroyu ilk defa kaydederken de yapabilirsiniz.
3. Makro Atama
EXCEL üzerine koyduğunuz resimlere makro atamanız mümkündür. Bu şekilde herhangi bir resim, grafik, çizim gibi materyalin üzerinde sağ tıklayabilir ve Makro Ata komutundan istediğiniz makroyu bu resme atayabilirsiniz.
Yordam çağırma
Yordam çağırma bir kod içinde gerçekleşir. Amacı herhangi bir makroyu dolayısı ile bir yordamı başka bir koddan da çağırmayı mümkün kılmaktır. Bu amaçla makronun yani yordamın sadece adını yazmanız yeterli olacaktır. Veya bu yordamın adını call komutu ile kullanmanız da aynı
etkiyi oluşturacaktır.
Fonksiyonlar (function)
Eğer bir kod parçası çağrıldığı yere değer döndürecekse o kodu fonksiyon olarak yazarız. Bu fonksiyonlar sayısal değer bulup döndürebilecekleri gibi
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 24
alfabetik değerler de döndürebilirler. Bu yapı da yine fonksiyonunuza bir takım değerleri parametre olarak iletiyorsunuz. Ve bu değerleri temel alarak elde edilen sonuç değeri fonksiyonunuzun çağrıldığı yere döndürmüş oluyorsunuz.
Mesela faktöriyel hesabı yapan bir fonksiyon çağrıldığı yere bir değerin faktöriyelini döndürecektir. U fonksiyonlar iç-içe biri birilerini çağırarak zincirleme değerler hesaplayabileceklerdir.
Parametreler - Değer atama
Fonksiyon ve yordamlarınıza kodda gereksinim olur diye değer aktarmanız gerekebilir. Bu değer aktarımı fonksiyon ve yordamların parametreleri maharetiyle yapılır.
Mesela faktöriyel hesaplayan bir fonksiyon mutlaka bir parametre almalıdır. Çünkü hangi değerin faktöriyelini hesaplayacağını fonksiyona iletmeniz gerekir. Bu tip fonksiyonların matematiksel tanımlarında da parametre tarzı bir tanım söz konusudur.
Bu program parçası bir fonksiyondur. Adı fak olarak belirlenmiş ve n adında bir tam sayı parametresi almıştır. Bu fonksiyon long türünde bir değer döndürmektedir. Kod incelendiğinde bu fonksiyon n değerinin faktöryelini hesaplamaktadır.
Bu fonksiyonun EXCEL içerisinden =fak(5) şeklinde çağrılması mümkündür. Çağrıldığı hücreye 5’in faktöryelini getirecektir.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 25
VBA Komutları
Tüm Programlama dillerinde olduğu gibi VBA ortamında da program yazmamızı sağlayacak komutlar bulunur. Bu komutlar genellikle ayrılmış sözcük şeklindedir. Bu komutlar değişken adı olarak kullanılamaz. Her birinin net ve açık olarak kullanım teknik e taktikleri vardır.
Giriş Çıkış Komutları
Klavyeden bilgi girmeyi sağlayan ve oluşan bir takım sonuçları veya mesajalrı ekrandan görmemizi sağlayan komutlardır.
X=inputbox(mesaj) şeklinde kullanarak hem ekrandan bir mesaj
verilmesini sağlayabilir hem de bu mesaja binaen klavyeden bir değer okunmasını sağlarsınız. Okunan değer x değişkenine atanır.
X=msgbox(mesaj,seçenek) şeklinde kullandığınız ifade ekrana bir mesaj
yazmanızı sağlar. Bu mesaj yazılırken diyalog kutusunda var olan farklı seçeneklerden hangisinin tıklandığını da x değişkenine aktarabilirsiniz.
Bunların haricinde EXCEL için özel olarak EXCEL’de çalışma sayfalarındaki hücrelere doğrudan değerler yazabilir, bu hücrelerde duran değerleri programınıza alabilirsiniz. Bu amaçla cells nesnesini kullanabileceğiz.
İlerleyen konularda daha geniş bilgi sahibi olabileceksiniz.
X= cells(5,6) cells(5,6)=”Ekonometri”
Birinci komut 5. Satır 6. Sütunda bulunan değeri X değişkenine aktarırken, ikinci komut 5. Satır 6. Sütundaki hücreye Ekonometri yazmaktadır.
Karşılaştırma
EXCEL ortamında dahi EĞER fonksiyonu bulunmakta idi. Tüm programlama dillerinde bir takım değerlerin karşılaştırılması ve duruma göre farklı seçeneklerden istenilenin çalıştırılabilmesi için bir takım komutlar bulunur. Bu amaçla VBA’da if temel komutu ile beraber select isimli bir komut bulunmaktadır.
if komutu
Bu komut bir koşulu kontrol eder. Koşulun doğru olması durumunda then ifadesinden sonraki komutları icra eder. Eğer koşul yanlış ise ama else kısmı yok ise program endif’ten sonraki kısımdan akmaya devam eder. Eğer koşul yanlış ve else kısmı var ise else ile endif arasındaki kısım icra edilir. Sonuçta esas program akışı endif’ten sonraki kısımdan devam eder.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 26
Genel Kullanımı:
if koşul then komutlar_doğru else komutlar_yanlış endif
if koşul then komutlar endif
Koşul doğru ise komutlar_doğru bölümündeki komutlar icra edilir. Eğer koşul yanlış ise komutlar_yanlış kısmındaki komutlar icra edilir
Her iki durumda da endif’ten sonraki komutlardan icraya devam edilir.
Koşul doğru ise komutlar icra edilir. Koşul yanlış ise endif’ten sonraki komutlardan devam edilir.
Her iki durumda da endif’ten sonraki komutlardan icraya devam edilir.
Hangi program dili olursa olsun benzer bir programlama dili mutlaka vardır ve Algoritmalarda ki EĞER ifadesine karşılık gelir. Programınızda en temel dallanmayı sağlar. Genelde olası iki durumdan bir tanesini seçmeyi ve bu duruma uygun komutları icra etmeyi sağlar.
Örnek:
Klavyeden girilen bir sayının çift olduğu durumda ekrana ÇİFT diğer durumda ekrana TEK yazmayı sağlayan bir VBA kodunu yan taraftaki ekranda görebilirsiniz.
Bu komutları else bölümlerinden iç içe yazarak ikiden fazla durumdan yine birini seçmeyi sağlayabilirsiniz. Örneğin Bu kez de 100-85 aralığına PEKİYİ, 84-70 aralığına İYİ 69-60 aralığına ORTA 59-45 aralığına GEÇER 0-44 aralığına BAŞARISIZ yazacak bir VBA kodunu if komutları kullanarak yazalım.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 27
Bu programda kullandığınız if kadar endif kullanmak zorunda olduğunuz aşikardır. Ayrıca kullandığınız else ifadeleri de yerler ve anlamları bakımından dikkatinizi çekmiş olmalıdır.
select komutu
Eğer Birden fazla durum var ise ve bu durumda if komutlarını iç ie kullanmak problemli olabiliyorsa select değimini kullanmayı tercih ederiz. Çünkü genellikle iç içe if yazmak çok dikkat isteyen ve fazlaca hata yapılabilecek bir iştir.
Select case testifadesi Case ifade: komut case ifade[, ifade, ifade]: komut case ifade TO ifade: komut … Case else: komut end select
Yukarıdaki şekilde bir genel kullanımı vardır. Test ifadesi olarak yazılan değimler ya bir sayısal değişkeni veya alfabetik bir değişkeni ifade eder. Bu ifadenin içindeki değere göre aşağıdaki durumlardan (CASE) bir tanesi icra edilir. Birinci satırdaki durum yani CASE ifadesinin yanına tek bir değer yazabilirsiniz. Bunları bazen virgüllerle ayırarak çoğaltabilirsiniz.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 28
Eğer ifadeniz bir aralığı kapsayacak ise bu aralığı TO sözcüğü ile belirtebilirsiniz. Aşağıdaki örnek biraz önce yaptığımız no vere işleminin SELECT sözcüğü ile yapılmış halidir.
Döngü Komutları
Yine her programlama dilinde yer alan döngü komutları VBA da bulunur. Bu komutlar bir kısım komut ya da komutları belli bir sayıda veya bir koşula bağlı olarak defalarca icra edilmesini sağlar. Aşağıda yer alan komutlar VBA içinde kullanabileceğiniz ve bir çok programlama dilinde de muadili olan komutlardır.
For…Next
Genel görünümü şu şekildedir
For değişken=başlangıç TO sonlanma [STEP adım] komutlar … Next
Bu komut bir değişkenin değerini bir başlangıç değerinden bir sonlanma değerine kadar saydıran döngü komutudur. Köşeli parantez içerisinde ki kısım yazılmayabilir. Eğer yazılmamışsa artış değerleri 1 olarak kabul edilir. Değişken istenilen değerden başlatılabilir sonlanma değeri de uygun olduğu sürece istenilen adım değeri ile bir döngü kurulabilir. Burada ki artışlar FOR komutu tarafından otomatik yapılmaktadır.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 29
Exit For
Döngünün sonlanıp sonlanmayacağına karar veren FOR komutunun bulunduğu yere gelmeden, döngü içinden çıkmak gerekirse bu komuttan faydalanılır. Genellikle if komut içerisinde kullanılır.
Do…Loop
Bu komutlar ise bir koşula bağlı olarak döngü içerisinde yer alan komutları icra ederler. Koşulun kontrolünü sağlamak maksadıyla while veya until sözcüklerinden biri kullanılır. Bu sözcüklerden her birinin konulabileceği yere göre 4 farklı Do…Loop komutu yazılabilir.
Do while koşul komutlar … Loop
Bu komutta koşul doğru olduğu sürece arada yer alan komutlar tekrar edilir. Koşulun yanlış olması döngünün sonlanmasına neden olur.
Döngüye gelindiği anda koşul test edilir. Sonrasında komutlar icra edilir veya döngüye girilmeden devam edilir.
Do until koşul komutlar … Loop
Bu komutta koşul doğru oluncaya kadar yani yanlış olduğu sürece döngü içerisinde yer alan komutlar tekrar edilir.
Döngüye gelindiği anda koşul test edilir. Sonrasında komutlar icra edilir veya döngüye girilmeden devam edilir.
Do komutlar … Loop while koşul
Bu komutta koşul doğru olduğu sürece arada yer alan komutlar tekrar edilir. Koşulun yanlış olması döngünün sonlanmasına neden olur.
Döngüye gelindiğinde (DO komutu) içerideki komutla bir kez icra edilir. Ancak sonra LOOP komutuna gelindiğinde koşul test edilir. Sonraki adımların döngü içinden mi döngü dışından mı devam edileceğine karar verilir.
Do komutlar … Loop until koşul
Bu komutta koşul doğru oluncaya kadar yani yanlış olduğu sürece döngü içerisinde yer alan komutlar tekrar edilir.
Döngüye gelindiğinde (DO komutu) içerideki komutla bir kez icra edilir. Ancak sonra LOOP komutuna gelindiğinde koşul test edilir. Sonraki adımların döngü içinden mi döngü dışından mı devam edileceğine karar verilir.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 30
Exit Loop
DO…LOOP komutu icra edilirken koşulun kontrol edildiği yere varmadan arada bir yerde döngüden çıkılması gerekirse kullanılabilecek komuttur. Yani DO döngüsünden çıkar. Genellikle if komutu ile beraber kullanılır.
For Each…Next
Bir grup yada topluluk içerisinde yer alan her bir öğe ile ilgili bir işlem yapılması gerekiyorsa ve topluluk VBA ile ifade edilebiliyorsa kullanılabilecek komuttur. Topluluk ya da grup içerisindeki her bir öğe üzerinde gezinerek bir takım işlemleri yapmayı sağlar. Genel yazımı aşağıdaki gibidir.
For each öğe In Grup komutla Next
Aşağıdaki Örnek Bu komuttan faydalanarak yazılmıştır. Ne yaptığını programı deneyerek veya iyice inceleyerek bulmaya çalışın.
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 31
Excel Nesneleri
Excel Nesneleri ile tanışmadan önce nesneye yönelik programlamadan ve nesne tabanlı ortamlardan bahsedelim. Bu tip ortamlarda temel programlama materyaliniz nesnedir. Tüm kodlar bu nesnelerin metotlarına, özelliklerine ve olaylarına yöneliktir. Bu nesneler biri birinin içerisinde olabilir. Her nesne için Alt nesneler, metotlar, özellikler ve olaylar bulunur. Özellikle nesneleri içerdiği nesnelerden, özelliklerden ve metotlardan ayırmak için nokta kullanılır.
Excel ortamında da bir EXCEL nesne modelinden bahsetmek mümkündür. Örneğin en tepede Workbook isminde bir nesne vardır ve EXCEL çalışma kitabını temsil eder. Bunun altında yani kitabı meydana getiren Worksheets koleksiyonu ve bu koleksiyonu meydana getiren Worksheeet yani sayfaların her biri bulunur. Bu sayfaları ise Aralıklar (Range) ve hücreler (Cells) meydana getirir.
Bu nesnelerden ve nesneler ile ilgili özelliklerden bahsederken hep nokta simgesi ile bir ayrıştırma yapacağız. Sonraki kullanımlara ve örneklere dikkat ediniz.
Woorkbook(s) Nesnesi
Workbooks açık olan tüm çalışma kitaplarını temsil eder.
Workbooks.count: Açık çalışma kitaplarının sayısını verir.
Workbooks(0).close: Çalışma kitaplarından ilkinin kapatılmasını sağlayan koddur.
Activeworkbook: Çalışma kitaplarından aktif olarak açık olan penceresi üstte olan nesneyi temsil eder.
Worksheet(s) Nesnesi
Worksheets çalışma kitabındaki sayfaların koleksiyonunu temsil eden nesnedir. Sayfaların her biri (worksheet(0) vesaire) şeklinde temsil edilir. Excel çalışma kitabında görünen sayfanın adı aynı zamanda activesheet diye isimlendirilir.
Worksheets.count: Sayfa sayısını veren bir komuttur.
Alan Nesneleri
Range olarak bilinen nesnedir. Hücrelerin belli bir alana yayılanları üzerinde işlem yapmak için kullanılabilir. Bu nesnelerin özellikleri hücrelerin özellikleri gibidir. Mesela belli bir aralığı seçmek için
VBA EXCEL Programlama Ders Notları
55/30.03.2015 10:49:00 32
Range(“A1:C10”).select gibi bir ifade kullanılır. Bu seçimin yazı boyutunu 20 punto yapmak içinse selection.font.size=20 gibi bir ifade kullanılır.
Hücre Nesnesi
Cells diye adlandırılan ve Sayfa içerisindeki hücreleri temsil eden nesnelerimizdir. Cells(satır_no,sütun_no) şeklinde kullanılır ve bahsi geçen satır ve sütundaki hücreye değer girmeyi veya değerini okumayı sağlar. Sadece değer değil yazı tip, biçimsel diğer özellikler ve formülleri de bu şekilde girmek ve işlemek mümkündür.