ILK MAKRO

1- Makro Nasıl Yazılır?

    Makro Makro Makro Makro Makro Makro Makro Makro Makro Makro Makro Makro

    Artık ilk makromuzu yazmaya çok yakınız. Hem artık elimizde excel makro yazabileceğimiz .xlsm uzantılı bir workbook var hem de VBA Editor’ümüz açık. Ancak sanki birşeyler eksik. Acaba bu ilk makro kodunu nereye yazsak??? Bu durumu sanki bilgisayarda çalışmıyormuşsunuz gibi düşünün. VBA Editor sizin çalışma masanız varsayın şimdilik.  Elinizin altında her türlü kalem, silgi var. Masanızın üzerinde takviminiz, saatiniz ve ışığınız var. Ama Bir şey eksik. KAĞIT!!!! İşte VBA Editor de kodlarınızı yazacağınız bu kağıdın ismi “MODULE”. Ve Kağıdın üzerinde yarattığımız konular da “Subroutine”. Şimdi Bu kavramları biraz daha yakından tanıyalım. Macro Macro Macro Macro Macro Macro Macro

 

1.1 Module Nedir???

    Excel VBA Editor de kodları yazdığımız pencerenin / ortamın adına module denir. Modulleri, VBA Editor penceresinin sol tarafında yer alan Project pencresinde gördüğümüz workbook adına veya herhangi bir worksheet e sağ tıklayıp Insert Module seçeneğini seçerek veya Araç çubuğunda yer alan “Insert” sekmesi ile yine “Module” seçerek editöre ekleyebiliriz. (Eğer Editörde Project Penceresini göremiyorsanız hemen View Sekmesi Project Explorer veya ctrl+R yaparak editör penceresinde görülmesini sağlayabilirsiniz. 

Makro Örneği 1

Makro Nasıl Yazılır

1.2 Subroutine Nedir???

    Yer yer subprogram, routine, procedure, function veya method olarak da adlandırılır. Ancak benim şimdiye kadar ki tecrübelerime göre yapacağım en doğru tanım;”Bir görevi yerine getirebilen en küçük kod dizisi” dir. Çok kaba bir benzetmeyle çelik üreten bir farbrikayı bir bilgisayar programı gibi düşünürseniz, cevherin çeliğe dönüştürüldüğü her bir aşamayı da subroutine olarak kabul edebilirsiniz. Hatta “module”ü de fabrikanın farklı bölümlere olarak düşünürsek anlam biraz daha tamamlanmış olur.

    Sozluk anlamı olarak da “subroutine” alt program anlamına gelir. Yani ana programı oluşturan, kimi zaman birkaç adet, kimi zaman da onlarca parçadan biridir. Sanki bir metini oluşturan paragraflar gibi. Her biri kendi başına da anlam ifade edebilir. Paragraflar arasında atıfta bulunarak daha derim bir anlam da ihtiva edilebilir. Subroutine’ler de böyledir. Kod çalıştırıldığı zaman interpreter, yani kodu okuyan ara program farklı farklı subroutine’ler ve module’ler arasında geçişler yapar ve program bir bütün şeklinde çalışır.

    Module içerisine “Sub Ders_1” yazıp enter a bastığınızda 2 satır altta End Sub ifadesinin çıktığını ve parantez işaretinin kendiliğinden geldiğini görürsünüz. Artık çalışma alanınız bu Sub ve End Sub arasıdır. Eğer kazara End Sub silerseniz, yazdığınız kodun çalışmadığını göreceksiniz. Size tavsiyem, yazdığınız subroutine’e verdiğiniz ismi size sonradan görevini hatırlatacak ve kafanızı karıştırmayacak şekilde seçin. Ve mümkün olduğunda subroutine içerisine kendinizce hatırlatıcı notlar yazın(comment).

      Sub Ders1()

               İşte yazacağınız bütün kodlar bu subroutine’lerin içlerine yazılıyor. 

      End Sub

2- Hücre ve Alan İşlemleri

Makro Örneği 2    Excel worksheet’e de nasıl işlem yaptığınızı bir saniye düşünmenizi istiyorum. # Eğer düşündüyseniz herkesi ortak bir payda altında toplamak için burada da aynı işlemleri toplama işlemi üzerinde en basit şekliyle inceleyelim.

Diyelim ki A1 hücresinin değeri 5, B1 hücresinin değeri ise 10 ve biz C1 hücresine bu iki değerin toplamının yazılmasını istiyoruz. Yaptığımız işlem çok basittir. C1 hücresine tıklarız sonra “=” yazıp sırayla A1 ve B1 hücrelerini seçip “ENTER” a basarız. Ve sonuç, artık C1 hücresindedir.

Burada çok basit görünen bu işlemde çok önemli ve temel değerlerden bahsettik aslında. Bir hücreleri seçmek, iki hücrelerle değil hücrelerin değerleri ile işlem yapıyor olduğumuz. Sonuçta hücreler hep aynı hücredir. Worksheet üzerinde adresi bellidir. Ancak aldığı değerler değişkenlik gösterir. Kimi zaman sadece bir sıra sayı rakamı, kimi zaman da bir sütunun başlığı olabilir. Kısaca işlemlerimizde hücre ne kadar önemliyse, değeri daha önemlidir.

Bu işlemi aynı şekilde bu sefer macro üzerinde yapacağız. Ama daha önce fare ile tıklayarak hücreleri seçmiştik. Aslında bir şeyi burada açıklığa kavuşturmak istiyorum. Biz fare ile tıklayarak hücre seçtiğimiz zaman aslında excel’e işlem yapmak istediğimiz değerlerin yer aldığı alanları gösteriyoruz. Sonra yine işlem seçerek bu alanlardaki değerler ile ilgili ne yapmak istediğimizi ve sonucu nerede görmek istediğimizi belirtiyoruz. Şimdi, fare kullanmadan VBA Editor’e nasıl işlem yapacağımız hücreleri göstereceğiz kısaca göz atalım. Kısaca hücreleri nasıl seçeceğiz bir bakalım.

    İlk olarak bir module ekliyoruz. Herhangi bir worksheet veya workbook üzerine sağ tıklayıp, yukarıdaki örnekte olduğu gibi insert->module diyoruz. Artık module hazır. Şimdi module ismini değiştiriyoruz. Bunu yapabileceğimiz tek yol var. Module’e tıkladığımızda alt kısmındaki pencerede yani “Properties” penceresinde sağda gibi name satırı görürsünüz ve orada da eklediğiniz module adınız. İşte o adı tıklayarak istediğiniz module adını yazabilirsiniz. Tabi özel karakterler hariç. Her zaman olduğu gibi size verebileceğim yegane tavsiye verdiğiniz ismin size o module’un ne yaptığını sonradan da çok net bir şekilde açıklayabiliyor şekilde olması. Aksi halde inanın her seferinde module içinde, module’un ne yaptığını anlamak için bir geziye çıkarsınız. Ben module adını IlkMacro olarak seçtim. 

    Sıra subroutine oluşturmakta. açılan module penceresinin üst satırına “sub Hucre_Secme” yazıp Enter a basalım ve ilk subroutine’i oluşturmuş olalım.

    Sub Hucre_Secme()

        Range(“A1”).Select

        [B1].Select

        Cells(1,3).Select

    End Sub

Şimdi subroutine yukarıdaki şekilde siz de yazın. Sıra, bu kodu çalıştırmamıza geldi. Ders 1’de VBA Editor ü tanırken orada bir Run Sekmesi vardı. Hatırlarsanız yaptığımız kodu çalıştırmamızda yardımcı olan sekme. İstersek o sekmeden Run’a tıklarayarak kodu çalıştırırız. Ve unutmadan kodlarınız, kaydetmeden önce çalışmaz. Yani önceden VBA Editor penceresinden kodunuzu kaydedin. Çalıştırma işlemini yine VBA Editor penceresinde yer alan, hani şu walkman ve türlü müzik çalarlar üzerinde de bulunan “PLAY” tuşunun aynısı olan, yeşil üçgene tıklayarak da yapabiliriz ve kısa yol tuşu da “F5” tir. Burada ilk kodunuzu yazdığınız ve en iyisinin kodu bir anda çalıştırıp bitirmek değil, satır satır gitmek olduğunu düşünüyorum. Onun için de “F8” tuşuna basarak kodu çalıştıracağız. F8 satır satır kodu çalıştırır. Bu sayede kodun worksheet üzerindeki etkisini de çok rahat takip edebilirsiniz. Size tavsiyem worksheet ve VBA Editor ü yan yana açmanız ve bu sayede eş zamanlı olarak takip etmeniz. Şimdi kodu F8 ile çalıştırdıysanız ilk önce A1 Sonra B1 sonrasında ise C1’in seçildiğini ve hatta seçili kaldığını görebilirsiniz. Şimdi bu yukarıdaki 3 yöntemle de istediğiniz hücreyi seçebilirsiniz. Sonra da istediğiniz gibi hücrenin özelliklerini;yani rengi, kenarlığı, kenarlık kalınlığı v.b ve de değerini değiştirebilirsiniz. Ancak benim size tavsiyem Range(“A1”) şeklinde olan gösterimini seçmeniz. Nedeniyse sadece bu gösterim şeklinin size “intellisense” kullanmanıza olanak sağlamasıdır. 

    Şimdi daha ilerilere gitmeden bilmeniz gereken bazı detaylarla devam edelim. Makro Nasıl Yazılır

   VBA Makrolar ile ilgili anlamamız gereken çok fazla kavram vardır. Bunların sindirimi, tek seferde yapılamayacağı için böyle arada küçük notlar halinde sizlere sunulacaktır.

    VBA Editor de genellikle kod dizilimi: Birşey.İşlem şeklindedir. Yani ilk önce bir şeyi seçeriz sonra da ne yapmak istediğimizi belirtiriz. İşte burada Object, bizim üzerinde işlem yapmak istediğimiz her şeydir. Örnek vermek gerekirse, workbook, worksheet, hücre ve değişken bunların hepsi birer object’tir. Sonrasında gelen yapmak istediğiniz işlem ise *Method’tur. Hücreleri seçerken de aslında aynı şeyi yapıyoruz. Ancak tek bir kural var. O da VBA Editor’e, Object inizi tanımlamak zorunda olmanız. İleride bu kuralı ne kadar fazla kullandığımızı göreceksiniz.

Range(“A1”).Select

Range(“A1”) hücresi bizim object’imiz. 

.Select ise Method’umuz. 

 

*Yan Sekmede Detaylı Açıklamasını Bulabilirsiniz

    Vba Editor içerisinde daha önceden tanımlanmış olan çok sayıda ‘object ‘ vardır. Ve bu nesnelerin-objects tanımlanmış kendilerine ait özellikleri-property vardır. Bu özelliklerin hepsini bilmemizin imkanı ve tabi ki gereği yoktur. İşte bu noktada *IntelliSense devreye girer. Bir object’in yani nesnenin ne kadar özelliği olduğu ve bütün *Method’larını IntelliSense aracılığıyla görebiliriz. Her ne kadar sonraki sekmelerde bu kavramları açıklayacak olsakta kısaca kendimizce bir örnek verelim. Seçtiğimiz nesne araba olsun. Araba ile ilgili 

Araba.Al   /  Araba.Sat  /   Araba.Degistir  /  Araba.Kirala    

gibi arabanın herhangi bir özelliğini değiştirmeyen ancak direk olarak arabanın varlığını ilgilendiren işlemler araba object/nesnesine ait ‘METHOD’ lar olarak sınıflandırılır. 

Fakat;  Araba.Renk=Kırmızı   /   Araba.Model=2014   /   Araba.Fiyat=45000 TL    

gibi arabayı tanımlayan özelliklere de o nesnenin özelliği/niteliği-PROPERTY denir. 

 

*Yan Sekmelerde açıklanmıştır.

Nesneler-objects üzerinde yaptığımız işlemlere method denir. Intellisense’de yeşil renkte uçan kitap veya tuğla görürseniz bilin ki o bir method’dur.

Makro Örnek 3    IntelliSense, (Intelligence ve Sense) Zeka/Akıllı ve Hissetmek/Farkına Varmak kelimelerinin birleşimiyle oluşan bir kelimedir. Kelime anlamından da bir şeyler çıkartılabilir ancak onun yerine size bu teknolojiye uygun bir örnek vermek istiyorum. Cep telefonlarında kullandığımız T9 klavyesi ile IntelliSense bir bakıma aynı görevi yerine getirirler. Siz bütün bir kelimeyi anlamadan sizin yerinize kelimeyi tamamlar. IntelliSense’de bir bakıma aynı işi farklı bir şekilde yapar. Sizin daha rahat kod yazabilmeniz için siz object veya property nin yanına nokta koyduktan sonra bir liste halinde karşınıza devam komutu olarak çıkar. Ve sizde onca method, property v.b ezberlemeden o listeden istediğiniz komutu seçebilir ve işinizi çok daha kolay devam edebilirsiniz. Resimde de gördüğünüz gibi Range(“A1”)’den sonra nokta koyar koymaz yapabileceğimiz onlarca metod ve düzenleyebileceğimiz yine onlarca property IntelliSense listesinde sıralanmıştır. Burada yeşil uçan bir kitap ya da tuğlaya benzer sembol taşıyanlar “METHOD” sanki bir kağıtta bir kelime okumamız gerekir gibi kağıt üzerinde bir el ile kağıdı gösteren sembolü taşıyanlar ise “PROPERTY” ‘dir.

    Bazen IntelliSense çalışmaz, bu kodunuz da illa çalışmayacak anlamına gelmez. Sadece IntelliSense’den faydalanamazsınız. İşte bu durumda size tavsiyem kodunuzu IntelliSense’den faydalanabilecek şekilde yazmanız. Genellikle bu sorun bütün excel sürümlerinde çalışması için yazılan kodlarda çıkar. Bu durumda eğer siz de bir gün bütün excel sürümlerinde çalışması için bir kod yazacak olursanız ilk önce kodu IntelliSense ile yazın sonra da bütün sürümlerde kullanılabilecek şekle dönüştürün. Çünkü IntelliSense olmadan VBA Editor’de kod yazmak çok çok daha zor olacaktır.

     IntelliSense kendiliğiden açılmadıysa, veya size boş bir satırda açmak istiyorsanız da yapmanız gereken yine çok basit. ctrl+space’e basarak IntelliSense açabilirsiniz. Bu arada yanlışlık olmasın IntelliSense sadece property ve method’ları görmemizi sağlamaz. Yazdığınız ve  daha VBA Editor’de kayıtlı bütün herşeyi tamamlar. Örnek “R” harfine bastıktan sonra eğer ctrl+space ile intellisense açarsanız R ile başlayan bütün listeyi görebilirsiniz. Listeden de istediğiniz şeye çift tıklayarak veya sadece “Tab” basarak seçim yapabilirsiniz.

    Artık nasıl hücrelerin seçilebildiğini bildiğimize göre sıra hücrelere değer vermeye geldi. Direk olarak bir örnekle konuya işleyelim. Örnek çoğunuz için bi anlam ifade etmeyebilir. Önemli olan konuyu kavrayabileceğiniz basit bir örnek olması. Şimdi altın, döviz ve Türk Lirası karşılıkları ile bir tablo yapacağız. Son sütunda ise Türk Lirasının değerinin artışta veya azalışta olduğuyla alakalı varsayımsal değerlendirmede bulunacağız. Artıştaysa hücreyi yeşil, azalıştaysa da kırmızı renkle hücreleri boyayacağız.

Sub Dovız_TL()

    ‘Eğer yazdığımız satırın başına tek tırnak işareti koyarsak, program bu satırı yorum satırı olarak değerlendirir ve çalıştırmaz.

    ‘Bu şekilde istediğiniz kadar not alabilirisiniz.

    ‘Sütunlara İlk Önce İsim Verelim

    Range(“B1″).Value=”Döviz Cinsi”

    Range(“C1″).Value=”TL Karşılığı”

    Range(“D1″).Value=”Durum”

    ‘Şimdi de Doları hücreye atayalım

    Range(“B2″).Value=”Dolar”

    Range(“C2”).Value= 5.2

    Range(“D2”).Value=5.2 

End Sub

    Gördüğünüz gibi işlem çok basit. Object yani nesnemizi seçiyoruz. Burada nesnemiz B2 hücresi. Sonrada B2 hücresinin boş olan değerine istediğimiz değeri atıyoruz. Ve bu değer verme işlemini “=” işaretiyle kullanarak yapıyoruz. Çünkü değer(value) bir özellik yani property’dir. Ve property’ler bu şekilde değiştirilir.

     Yine örnek üzerinden devam edeceğiz ve bu sefer de “string” veri tipiyle değer atadığımız hücrelerin yazı tiplerini değiştireceğiz.

Sub Dovız_TL()

   ‘Sütunlara İlk Önce İsim Verelim

    Range(“B1″).Value=”Döviz Cinsi”

    Range(“C1″).Value=”TL Karşılığı”

    Range(“D1″).Value=”Durum”

    ‘Şimdi de Doları hücreye atayalım

    Range(“B2″).Value=”Dolar”

    Range(“C2”).Value= 5.2

    Range(“D2”).Value=5.2 

    ‘Font-Yazı Tipi Değiştirme

    Range(“B2″).Font.Name=”NewTimesRoman”

End Sub

Not: Burada çok güzel bir örnek karşılıyor bizi. Çünkü tek bir Property adı yok. Hem Font hem de Name aslında birer Property yani özelliktir. Burada bir özelliğin de kendisine ait bir özelliği olduğunu görebiliyoruz. Sanki bu durumu arabanın renginin tonu gibi düşünün. Çünkü bir araba mavinin öok farklı tonlarında satılıyor olabilir. 

Aynı burada çok farklı font olabileceği gibi. 

    Bazı durumlarda geniş satır veya aralıklarda işlem yapmamız gerekebilir. Bu alanları boyayabiliriz, font değiştirebiliriz veya tarayabilir hatta kesip kopyalayabiliriz. Bu durumda yapmamız gereken tek şey alan olarak tek bir hücre yerine bir aralık belirlememizdir. Mesela Range(“A1:A10”).Select yazarsak, A1 ile A10’un dahil olduğu 10 hücreden oluşan bütün bir sütunu seçmiş oluruz. Aynı şekilde bütün bir satırı seçmek için bu sefer de satır sayısını sabit tutup sütun aralığını değiştiririz. Range(“A1:H1”).Select şeklinde bir satır seçmiş oluruz. Peki birden fazla sütun ve satırdan oluşan bir alan seçmek istersek nasıl yapıyoruz onu da görelim. Bu sefer de Range(“A1:H10”).Select yazıyoruz ve 10 sayır, 8 sütun 80 hücreden oluşmuş dikdörtgen şeklinde bir alan seçmiş oluyoruz. Ve sonra nesne olarak seçtiğimiz bu alanı yani ‘RANGE’in istediğimiz özelliğini değiştirebiliriz, silebiliriz, kopyalayıp yapıştırabiliriz veya istediğimiz yere, sayfaya, workbook’a taşıyabiliriz.

Sub Dovız_TL()

   ‘Sütunlara İlk Önce İsim Verelim

    Range(“B1″).Value=”Döviz Cinsi”

    Range(“C1″).Value=”TL Karşılığı”

    Range(“D1″).Value=”Durum”

    ‘Şimdi de Doları Hücreye Atayalım

    Range(“B2″).Value=”Dolar”

    Range(“C2”).Value= 5.2

    Range(“D2″).Value=”Artış” 

    ‘Font-Yazı Tipi Değiştirme

    Range(“B2″).Font.Name=”NewTimesRoman”

    ‘ Tek Bir Hücre ve Hücre Bloğunun İçinin Renginin Değiştirilmesi

    Range(“D2”).Interior.Color=rgbGray

    Range(“D2”).Font.Color=vbGreen

    Range(“D3:D6”).Interior.Color=rgbBlack

End Sub

    Eğer yukarıda yer alan kodu VBA Editor’e girerseniz, aşağıdaki gibi bir tablo bulmanız lazım.

3- Örnek ve Çözümler

    Şimdi sıra sizde. Artık elinizde hazız bir kod var. Şimdi biraz da bu kodu kurcalama vakti. Şimdi nesne isminden yani range(“HücreAdresi”). sonra açılacak olan IntelliSense’i ve Seçtiğiniz Font gibi property’lerden sonra açılacak olan IntelliSense listesini inceleyin ve ikisini karşılaştırın. Sonradan bu yaptığımız örneğe yeni döviz cinsleri ve satırları ekleyin. Fontları, renkleri ve büyüklükleri değiştirin. Büyüklüğü nasıl değiştirdiğimi size göstermedim ancak ufak bir araştırmayla yapabileceğinizi düşünüyorum. 

    Method, property, subroutine ve module konusunu iyice anlamaya çalışın. Yan sekmede size çalıştığımız örneğin farklı döviz cinsleri eklenmiş hali ve kodu var. Ancak ilk başta kendiniz kodunuzu tamamlamaya çalışın. Eğer bi sıkıntı yaşarsanız, çözüme bakın.

Hepinize Kolay Gelsin.

    Doların alt satırlarına sırayla:

Euro 6.09 Azalmış

Sterlin 7.10 Artmış

Japon Yeni 0.040 Azalmış

Altın Gram 220 Azalmış

Verilerini ekleyin ve font renklerini azalanlar için kırmızı, artanlar içinse yeşil olarak ayarlayın.


ILK DERSE AİT NOTLAR

    Umarım bu dersle beraber bazı kavramlar aklınızda yer etmiştir. Kavramları zamanında tam olarak kendi mantığınıza göre öğrenirseniz, sonrasında dersleri anlamakta kolaylık yaşarsınız. Eğer benim yazdıklarım yeterli olmadıysa, desteğe ihtiyaç duyuyorsanız her zaman e-posta atıp bir şeyler danışabilirsiniz. O da yetmezse farklı kaynaklardan size en uygun açıklamaları bulup iyice okuyup anlamaya çalışmalısınız. 

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

Herkese İyi Çalışmalar…

Soru ve Öneriler İçin;

[email protected]