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

    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

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]