Microsoft Ofis Ürün Ailesi

Excel Üzerinde Makrolar ile Çalışmak

 

Microsoft Office programlarından Excel yıllardır kurumsal ve bireysel kullanıcıların vazgeçilmezi halini almıştır. Excel deyince genellikle kullanıcıların aklına hücreler, tablolar ve bunlara ilişkilendirilmiş grafikler gelmektedir.  Ancak Excel ‘in içerisinde bulundurduğu makrolar çoğu zaman 2. planda kalmıştır. Excel de kullanımımıza sunulan VBA yani Visual Basic for Applications ile Visual Basic kodlarını çalıştırabilir; sayfalar ve veriler üzerinde istediğimiz tüm işlemleri rahatlıkla yapabiliriz. VBA tasarlanırken Excel bir yazılımcı değil bir kullanıcı tarafından tercih edileceğinden dolayı daha basit düşünülmüştür. Ayrıca Excel VBA da özgün VB (Visual Basic) kodlarının kullanılması da bir avantaj sağlamıştır. Bu sayede Excel kullanıcıları kolaylıkla kendi formlarını tasarlayabilecek ve veriler üzerinde işlemlerini yapabileceklerdir.

Günümüzde çoğu firma ticari işlemleri için paket programları tercih etmektedir, ancak Amerika ‘da yapılan bir araştırmaya göre firmaların çoğunun Office programları kullandığını ve Excel VBA ile kendi özgün ihtiyaçları doğrusunda programlar geliştirerek çalıştığı ortaya koyulmuştur.

Bu makalemizde makroları Office 2007 üzerinde anlatıyor olacağız ancak biliyoruz ki tüm Office ürünlerinde (gerek 2003, gerek 2010 olsun) aynı işlemler süregelmektedir.

Makro Nedir?

Makro bilgisayar biliminde klavye ve fare ile girilen girdi verilerine verilen addır.  Genellikle kullanıcının devamlı yaptığı rutin işleri otomatik ve hızlı olarak yapmak amacıyla daha sonra belli standartlara tabi olarak Excel veri tablo lamada kullanılmış bir parçadır.

Makrolar

Excel 2007 üzerinde makrolarla ilgili tüm öğeleri “Geliştirici” sekmesi altında bulabiliriz.

image001

Burada tek tek kullanacağımız buton (objeleri) inceleyecek olursak;

Visual Basic:

Visual Basic kodlayıcısının açılmasını sağlar.

image002

Makrolar:

Kayıtlı makroları listeler veya yeni makro oluşturmamızı sağlar. Makro adını girdiğimiz takdirde ‘oluştur’ butonu aktif olacaktır. Oluştur diyerek yeni bir makro oluşturabiliriz. Ayrıca şu da unutulmamalıdır ki, bu listede o an açık olan tüm Excel dosyalarının makroları görünür.  Bu alt kısımdaki makro yeri combosundan Tüm Açık Çalışma Kitapları / Bu Çalışma Kitabı / Belli bir Çalışma kitabı olarak değiştirebiliriz.

image003

Makro Kaydet:

Makro kaydetme işlemi yapı olarak çok kolay ve çok işimizi kolaylaştıran bir durumdur. Makro kaydet dediğimizde aşağıdaki form karşımıza çıkar. Makro adı, istiyorsak kısayol tuşu, saklanacağı yer ve açıklama bilgileri belirtildikten sonra tamam dediğimizde tıpkı bir ekran kaydeder gibi yaptığımız işlemleri kaydederek koda dönüştürmektedir.

image004

 

Bunun bize 2 başlıca avantajı vardır.

1-      Kodlarla uğraşmak yerine kodlar olmadan kolayca makrolar hazırlamak

2-      Kodunu bilmediğimiz bir olayı geliştirmek ya da bir kodun kullanımını öğrenmek

Makalemizin devamında örnekler ile bu konuyu açıklayacağız.

Makro Güvenliği:

Burada hangi tip makroların çalıştırılıp çalıştırılmayacağına dair gerekli güvenlik ayarlarını görmekteyiz.

image005

 

Ekle:

Ekle kısmında sayfamıza ekleyebileceğimiz denetim araçlarını görmekteyiz. Bu kısımdan Excel sayfamıza buton, combobox, checkbox gibi denetim araçlarını ekleyebilmekteyiz.

image006

Tasarım Modu:

Excel sayfamıza denetim araçları ekledikten sonra bunlar üzerinde düzenleme yapabilmemizi sağlayan moddur.  Tasarım modu aktif iken düzenleme yapabiliriz ancak pasif iken denetim aracımız çalışıyor olacaktır.

image007image008

Özellikler:

O an seçili olan nesnenin özellik (properties) ekranını getirir. Buradan ilgili nesnenin özelliklerine ilişkin düzenlemeleri yapabiliriz.

image009

 

Kod Görüntüle:

Seçili nesneye ait kodları görebileceğimiz kısımdır. Örneğin command1 ismindeki Tasarım Modu Pasif adlı butonumuz tıklanınca gerçekleşecek eylemlere ait kodları görmekteyiz aşağıda, ancak hiçbir kod henüz yazılı değildir.

image010

Visual Basic kısmında ise butonlar ve açıklamaları aşağıdaki gibidir.

image011 Excel ‘i görüntüler.

image012 Form veya modül eklememizi (oluşturmamızı) sağlar.

image013 Makroyu çalıştırmamızı, duraklatmamızı veya durdurmamızı sağlar.

image014 Tasarım Modu Etkin / Değil

image015 Proje Listesini Gösterir

image016 Properties (Ayarlar) Penceresini Gösterir

image017 Objeleri Listeler

Şuana kadar gördüğümüz kısımlar bizim makrolar üzerinde işlemler yapmamıza yetecektir. Makrolar tamamıyla hayal gücümüze ve analitik düşünce tarzımıza kalmış ürünlerdir, bu nedenle herkes farklı yollardan amacına ulaşabilir farklı kod veya makrolar ile aynı sonuca varabilir. Makroların nasıl veya nerede kullanılacağına dair net bir şey söylemek tahmin edilebileceği gibi zordur. Ancak bunu 2 örnek ile gösterebilir isek daha açıklayıcı olacaktır. Çok basit 2 makro ile uzunca vakit alan 2 işimize çözüm bulalım.

Örnek Senaryo 1:   ABC şirketinde kullanılan santralden aylık olarak aranan telefon görüşme kayıtları çekilmekte ve rapor oluşturulmaktadır. Ancak çekilen veriler aranan numaralara göredir ve aranan kişinin kim olduğu görülememektedir. Başka bir excel sayfasında ise rehber tutulmaktadır. Bu rehberde kişi ve telefon numarası bulunmaktadır. Burada amacımız aranan numaranın yanına eğer var ise kim olduğunu yazdırmaktır.  Eğer ki makro olmasaydı bu işlemi nasıl yapardınız?

Kayıtlarımız aşağıdaki gibidir.

image018

Öncelikle makrolar kısmından yeni makromuzu yaratıyoruz.

image019

Makromuzun ismini yazdıktan sonra oluştur dediğimizde VB kod görüntüleme /derleme penceremiz gelir. Artık burada işimiz VB kod bilgisine dayanmaktadır.

image020

Burada öncelikle yazacağımız kodları tasarlayalım, sonra koda dönüştürelim.

Döngü 1 Başlangıcı (sayaç = x)

Döngü 2 Başlangıcı (sayaç = y)

Sayfa1 deki x. Sıradaki 2. Sütundaki veri ile sayfa 2 deki y. Sıradaki 2. Sütundaki veri birbirine eşit ise;

Sayfa2 deki y. Sıranın 5. Sütununa sayfa 1 deki x. Sıradaki 1. Sütundaki veriyi yaz.

Döngü 2 Sonu (y = sayfa 2 deki dolu satır sayısı kadar)

Döngü 1 Sonu(y = sayfa 2 deki dolu satır sayısı kadar)

Döngü kısmında 2 seçeneğimiz vardır, seçenek 1: satır sayısını (x ve y değerini) elle belirlemek ki biz şuan öyle yaptık. Seçenek 2: bu makroyu sürekli kullanıyorsa bir maksimum değer gireriz ve döngünün içerisine bir if (eğer) komutu yerleştiririz. Her döngüde eğer x değerinde ilgili satır boş ise döngüden çıkar.

Şimdi bu bilgilere göre kodumuzu yazalım.

For x = 2 To 8

‘ 2 den 8e kadar say diyoruz. Çünkü rehber 2 den başlayıp 8.satıra kadar dolu.

    For y = 2 To 36

‘2 den 36ya kadar say diyoruz. Çünkü kayıtlar 2 den başlıyor ve 36.satıra kadar.

        If Sayfa1.Cells(x, 2) = Sayfa2.Cells(y, 2) Then Sayfa2.Cells(y, 5) = Sayfa1.Cells(x, 1)

‘ Eğer telefon numaraları eşit ise rehberdeki numaranın yanındakini kayıt kısmına yaz

    Next y

Next x

Yani bu kodumuzdaki işleyişi tekrar anlatmak gerekirse; önce rehberdekileri tek tek saydırıyoruz her rehberdekini sayarken arama listesindekilerle karşılaştırıyor ve tutan varsa kim olduğunu yazıyor.

Kodumuzu yazdıktan sonra kaydediyoruz ve çalıştırıyoruz.

İşte sonuç:

image021

Tüm aranan numaraların yanına kim olduğu yazılmış. Bu şuan için kolay görülebilir ancak aylık 10000 lerce görüşme yapan bir firma için yararını görmemek elde değil.

Örnek Senaryo 2:   Firmanızda hala giriş çıkışlar imza ile takip ediliyor ve aşağıdaki gibi bir imza listeniz var. Bu listeleri her ay sizin çıkarmanız istendi. Size personel listesi geliyor ve siz her personel için ad / soyad ve personel no değiştirerek çıktı alıyorsunuz. Düşününki 350 personel var ve her biri için sayfayı açıyor personel no ve adı soyadı yazıyor ve çıktı alıyorsunuz. Bu ne kadar vaktinizi alır?

image022

Burada yazacağımız kodların mantığı çok basittir. Sayfa1 deki satırlardaki pers no ve ad soyadı sırayla alacak, B3 ve E3 e yazacak ve sayfayı yazdıracak.

Bunun için doğrudan kodlarımızı yazdıralım. Burada diğer örnekte bahsettiğimiz boş ise çık ‘ı kullanalım.

For x= 2 to 200

İf sayfa1.cells(x,1) <> ”” then

                                Sayfa2.cells(3,2)=Sayfa1.cells(x,1)

                                Sayfa2.cells(3,5)=Sayfa1.cells(x,2)

                                Sayfa2.PrintOut

End if

Next x

Şimdi kodumuzu açıklayalım.

For x = 2 to 200 Next x = Bu döngü ile 200 e kadar personel için çıktı alıyoruz, bu maksimum değerimizdir. Maksimum personel sayınız kaç ise o kadar yazmanız yeterlidir.

İf sayfa1.cells(x,1) <> ”” then End if =Burada hücre boş değilse diyerek işlem yaptırıyoruz boş ise yazdırmayacaktır.

Sayfa2.cells(3,2)=Sayfa1.cells(x,1) = Personel No yu yazdırıyoruz.

Sayfa2.cells(3,5)=Sayfa1.cells(x,2) = Personel ad soyadını yazdırıyoruz.

Sayfa2.PrintOut= Varsayılan yazıcıdan yazdırıyoruz.

Bu sayede kısacık bir kod ile saatler sürecek bir işten kurtulmuş oluyoruz. Bu ve bunun gibi hayal gücünüze ve ihtiyacınıza bağlı sayısız çözüm üretebilirsiniz.

Burada bir de bu kodların ters yönlü kullanımını görelim. Yani kodunu bilmediğimiz bir işlemi nasıl yaparız. Yeterli kod bilginiz yok ise ve kodun nasıl yazılacağını görmek isterseniz burada makro kaydet kısmından kopya çekebiliriz. Varsayalım ki makro ile bir işlem yapıyorsunuz ve bir yerde bir döngüde bir hücrenin metnin dolgu rengini değiştirmek istiyorsunuz, ancak kodlarına dair hiçbir fikriniz yok. Burada yapabileceğimiz işlem, araştırıp kodu bulmak veya bir makro kaydedip o işlemi yapıp ne kod getirdiğine bakmak.

Örnek:

Makro Kaydet butonuna basarız ve bilgileri girerek tamam deriz. Artık Excel girdiğimiz her şeyi kaydediyor ve koda dönüştürüyor.

image023

Tamam dedikten sonra dolgu rengini image024 sarı yaptık ve kaydı durdurduk. Şimdi Visual Basic üzerinden kodlarımızı görelim.

image025

Burada çalışan kodlar görülmektedir. Kodlarda fazlalıklarda vardır. Burada bize gerekli kod renk olduğu için color olduğunu görebilmekteyiz. Yani;

With selection.interior

.color = 65535

End With

Kodu burada bizim ihtiyacımız olan koddur.

selection.interior.color = 65535 kodu da bu kodun kısa halidir.

Bu makalemizde Excel üzerinde Makroların kullanımını ve nasıl işe yaradığını görmüş olduk. Bir dahaki makalemizde ise formlar üzerinde çalışıyor olacağız.

Başka bir makalede görüşmek dileğiyle.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu