KOD BİLMEDEN MAKRO YAZMAK!?

[vc_row][vc_column][vc_column_text]

KOD BİLMEDEN
MAKRO YAZABİLECEĞİNİZİN FARKINDA MISINIZ?

 

Bu ilginç bir konu başlığı öyle değil mi?
Tıpkı bulutlara dokunmak gibi. Çok istiyoruz ama yapamıyoruz.
Makroyu bilmeyenler, yazamayanlar için de durum tam olarak böyle.
Ama siz yine de bilmiyorum diye üzülmeyin, sıkılmayın, PEAKUP her zaman yanınızda.

Günlük, haftalık, aylık rutin işlerimizi makrolarla birkaç saniyede hazırlamayı kim istemez ki,
öyle değil mi?

Bu size büyük bir zaman tasarrufu sağlayacak, kendinize zaman ayırabilecek
veya başka işlerle ilgilenebileceksiniz. Sürekli aynı işleri tekrar tekrar yapmaktan bıkmadık mı?
Hani hep deriz ya; “hangi çağdayız!?” İşte biraz da bu yüzden artık Excel & VBA (Makro) öğrenmeyen kalmamalı.

Şimdi biraz heyecanlanmış olmalısınız.
Her ne kadar bu başlık size sihirli gelse bile, bizler büyücü ya da sihirbaz değiliz.
Yine her şey sizin elinizde.

Bir şeyi öğrenmek istiyorsanız onu gerçekten istemeli ve onun için zaman ayırmalısınız,
bunu unutmayalım.

Peki nasıl olacak bu iş?
Kod bilmeden, makro bilmeden kod yazabilmeyi hayâl bile edemezken,
yazabildiğinizi göreceksiniz.

Sizin için önemli olan bir şeyleri yapabilmenin mutluluğunu, en az sizin kadar iyi biliyoruz.
Sizden isteğimiz, sabırla bu yazıyı okumanız ve uygulamanız.
Günün sonunda göreceksiniz ki; hiçbir kod bilginiz olmadan da rutin olarak yaptığınız
günlük işlerinizi makro ile çok daha kolay yapabileceksiniz.

Hadi gelin yavaş yavaş bu işi nasıl yapabileceğimizi öğrenelim.
(Hızlıca öğrenmek isteyenler için uygulama videosunu da yazının sonunda ekliyor olacağız.)

 

EXCEL MAKROLARI NEDİR?

Önce Excel Makroları nedir, onu öğrenerek başlayalım.

Biz bu makroların genel adına Excel & VBA diyoruz.

VBA nedir?

VBA

‘nın açılımı; Visual Basic for Applications
Yani; Office uygulamaları için uyarlanmış, Visual Basic nesne, metot ve özelliklerine erişmemizi sağlayan yapıdır.

Microsoft Office paket programı içinde bulunan programların bazılarında,
kullanıcıya kolaylık olsun diye ve sürekli tekrar edilen (rutin) işlemleri
otomatik hale getirmek için Makro komutu kullanıcıya sunulmuştur.

Makrolar hazırlanırken, Excel’in arka plânında çalışan Visual Basic programlama dili de
hazır halde beklemektedir. Herhangi bir kayıt yapıldığında bu programlama dili
aktif hale gelir ve sizin yapmış olduğunuz herhangi bir makro komutunu
programlama diline çevirir. Böylece daha sonra, hazırlamış olduğunuz makroyu çalıştırmak
veya düzenlemek istediğinizde Excel bu imkanı size rahatlıkla sunar.

 

MAKRO KAYDET YÖNTEMİ NEDİR?

Excel’in arka plânında var olan Visual Basic dilini harekete geçirip, çalışma kitaplarında,
çalışma sayfalarında veya hücrelerde yaptığımız tüm işlemleri koda döken bir araçtır ve yöntemdir.
Size sunulan bu hazır kodlarla işlerinizi daha hızı halledebilirsiniz. Biz de bu özellikten
faydalanarak verilen hazır kodları kullanacağız.

Makro Kaydet özelliğine 3 farklı noktadan ulaşabilirsiniz.

1- Geliştirici (Developer) Menüsünden

Şeritte bu menü yoksa şu yolu izleyerek menüyü şeride ekleyebilirsiniz.
DosyaSeçeneklerŞeridi Özelleştir ‣ Sağdaki menüden Geliştirici seçeneği seçip Tamam’a basın.

 

2- Görünüm (View) Menüsünden

 

3- Durum (StatusBar) Çubuğundan

 

İstediğiniz herhangi bir yöntemi kullanarak Makro Kaydet yöntemini aktif edebilirsiniz.
Şimdi nasıl aktif edeceğinizi anlatacağım fakat sadece okuyun, daha sonra bunu uygulamalı olarak birlikte yapacağız.

Makro Kaydete bastığınızda karşınıza bu pencere gelecek.
Makro1 yazan kutucuğa yapacağınız işle ilgili bir isim verebilirsiniz.
Örneğin; filtreleme yapmak için kullanacaksanız oraya filtre yazıp Tamam butonuna basarız.
Bastığımız andan itibaren yapılan kayıt başlayacak ve her işlemi kaydedip arka plânda koda dökecektir.
İşiniz bitince de Kaydı Durdurmanız gereklidir. Yine aynı yerden Kaydı Durdura basabilirsiniz.

 

Evet.. şimdi gerçek bir örnek üzerinde bu işin ne kadar kolay olduğunu görelim.

Hepimiz Excel’de verilerimizi tablo hâline getiririz, yani ilk satırda başlıklarımız, altında da o başlıklara ait verilerimiz olur değil mi? Bu tabloda da gün içinde birçok kez filtreleme yapıyoruzdur. Filtreleme yaparken ne yaparız? Hangi alanda (sütunda) bir filtreleme yapacaksak, o alandaki filtre oklarına tıklarız ve açılan pencereden filtrelemek istediğimiz veriyi seçeriz ya da arayıp Tamama basarız ve istediğimiz veriye göre tablomuz filtrelenmiş olur.

Bu basit bir filtreleme işlemini dahi gün içinde birçok kez yapıyor ve üzerinde gereksiz yere fazla zaman kaybediyoruz. Sürekli filtreyi aç oradan seçim yap ve Tamama bas, başka bir veri aradığımızda da yine aynı şekilde filtreyi aç oradan seç Tamama bas işlemini tekrarlıyoruz.

Oysa bu filtreleme işlemi için kullanacağımız boş bir hücremiz olsa ve oraya aradığımızı yazıp Entera bastığımızda ya da butonu tıkladığımızda hemen filtrelense çok daha kolay ve hızlı olmaz mıydı?

Bu sadece gün içinde yapacağınız tek bir işlem için size hız kazandırıyor olacak. Ancak bütün işlerinizi böyle hızlandırdığınızı düşünün.

 

HANGİ DURUMLARDA YAZDIĞINIZ KODU ÇALIŞTIRABİLİRSİNİZ?

Herhangi bir hücreyi;

  • Seçtiğinizde
  • Sağ tıkladığınızda
  • Çift tıkladığınızda
  • Hücreye veri girişi yaptığınızda
  • Sayfayı açtığınızda
  • Sayfadan çıktığınızda
  • Dosyayı açtığınızda
  • Dosyayı kapattığınızda
  • Bir butonu tıkladığınızda
  • Klavyeden herhangi bir tuşa bastığımızda

vb. gibi.. birçok farklı şekilde yazdığınız kodları çalıştırabilirsiniz.

 

Hadi şimdi canlı bir örnek üzerinde işlemi gerçekleştirelim.

Resimdeki gibi dosyamız var, o dosya üzerinde siz de denemeler yapabilir, sonrasında kendi dosyalarınızda pratik uygulamalar gerçekleştirebilirsiniz.

Dosyayı buradan indirin.

Bu dosyada H1 hücresine herhangi bir Marka ismini yazarsak, o markaya ait olan veriler filtrelensin istiyoruz. Biz hücreye QUARTZ yazdığımızda Marka alanındaki QUARTZ olanlar filtrelenecek, YELKEN yazdığımızda da YELKEN olanlar filtrelenecek. Dolayısıyla biz o hücreyi bir filtreleme kutucuğu olarak kullanacağız.

 

Birazdan eyleme geçeceğiz.

Öncesinde şunu bilmenizde fayda var.
Yukarıda, Hangi Durumlarda Yazdığınız Kodu Çalıştırabilirsiniz? altında belirttiğimiz çalıştırma yöntemlerine göre kodları yazıldığı alanlar vardır.

 

Bu alanlar;

  • Module – (Makro Kaydet ile ya da manuel oluşturulan kodlar burada yer alır.)
  • Sayfanın Kod Penceresi – (İlgili sayfanın kod çalıştırma olayları burada yer alır.)
  • Kitabın Genel Kod Penceresi – (Kitabının tamamını etkileyecek olaylar burada yer alır.)

Biz şu an için bir sayfadaki hücreye veri girişi yaptığımızda filtreleme işlemi yaptırmak istediğimiz için, Makro Kaydet ile elde ettiğimiz hazır kodları Sayfanın Kod Penceresine yapıştıracağız. Hücreye veri giriş yapıldığında da Change olayı tetiklenecek ve filtre işlemi uygulanacak.

Makro Kaydet yöntemini her işiniz için kullanabileceğinizi unutmayın.

İzlenecek yol her zaman şöyle olsun;

  • Makro Kaydete basın.
  • Olmasını istediğiniz işlemi manuel olarak yapın.
  • Kaydı Durdur

Kodlar arka plânda hazırlanmış olacak.

 

BU KODLARA NEREDEN NASIL ULAŞABİLİRSİNİZ?

Hayatta olduğu gibi, Excel’de de bir işi yapmanın birden fazla yolu vardır. Oluşan kodlara yine birkaç farkı yoldan ulaşabilirsiniz.

  1. Makro Kaydet dediğimiz noktadan Makroları Görüntüle diyerek

2. Alt + F8 tuşlarına basıp aşağıdaki pencereye kısa yoldan ulaşarak.

 

3. Alt + F11 tuşlarına basıp VBE Penceresine direkt olarak erişerek.

4. Sayfa sekmesi üzerinde sağ tıklayıp Kod Görüntüle diyerek.

 

Eveeet.. Yeterince bilgi edindikten sonra artık eyleme geçiyoruz.

Verdiğimiz dosyayı indirdiyseniz Makro Kaydete basalım, makromuza herhangi bir isim verelim, örneğin; Filtre .. şimdi Tamama basarak kaydı başlatalım.

Tablomuzdaki herhangi bir hücreyi seçelim ve Veri menüsünden Filtreyi seçelim.
Not: Filtrenin üzerine gelip biraz beklerseniz; varsa kısayol tuşunu size verecektir. O kısayol tuşu ile de filtreyi aktif edebilirsiniz.

 

Sonrasında Marka alanından tümünün seçeneğini kaldırıp YELKEN’i seçin ve Tamama basın.

Temel olarak yapmak istediğimiz filtreleme olayının kodlarını edinmek olduğu için, eylemi gerçekleştirdik ve işimiz bitti.

Şimdi Kaydır Durdura basıp kaydı durduruyoruz. Makroları Görüntüleyi tıklıyoruz.
Makro Listesi penceresi Filtre makrosu seçili olarak ekrana gelecektir.
Düzenle butonuna basarak, oluşan Module1 içerisindeki kodları görüntüleyebilirsiniz.

Oluşan kodlarımız bu resimdeki gibi olacaktır.
Tek tırnak ile başlayıp yeşil renkli görünen satırlar yorum satırlarıdır, kodları etkilemez, sadece açıklama içindir.
Not: Selection.AutoFilter satırını silebilirsiniz. Asıl işi hemen bir altındaki satır yapmakta.

 

Gördüğünüz gibi filtreleme işleminin kodlarını kolayca elde ettik.

Ufak bir bilgi daha verelim; yukarıdaki gibi Module içerisine yazılıp Sub ile başlayan kodları bir butona atayarak, butonu tıkladığınızda makroyu çalıştırabilirsiniz, isterseniz bu yolu deneyin.

Biz bu yazıda size daha hızlı bir yol olan, hücreye veri girişi yaptıkça hemen filtrelemeyi göstereceğiz, o yüzden yazıyı okumaya devam edelim.

Evet.. kodları elde ettik.
Geriye, kodlarda kriter olarak belirtilen “YELKEN” yerine, biz H1 hücresine ne yazdıysak onu filtrelemesi için kriteri dinamik yapmak ve hücreye veri girişi yapınca çalıştırmak kaldı.

 

Bunun için şöyle basit bir düzeltme yapacağız; filtrelemeyi yapan kod satırımız bu;
ActiveSheet.Range(“$A$1:$E$52″).AutoFilter Field:=3, Criteria1:=”YELKEN”

 

Koddaki “YELKEN” yerine aşağıdaki gibi hücre adresini yazarsanız, o hücreyi dinamik biçimde filtreleme kutusu olarak kullanabilirsiniz.
ActiveSheet.Range(“$A$1:$E$52”).AutoFilter Field:=3, Criteria1:=Range(“H1”).Value

Kriteri hücreden alacak şekilde dinamik hâle getirdik. Hadi artık bu kodu hücredeki veriye göre değişecek şekilde çalıştıralım.
Sayfadaki bir hücredeki veri değişince çalışmasını istediğimiz için bu kodu Sayfanın Kod Penceresinde Change olayında yazacağımızı daha önce belirtmiştik.

 

Peki şimdi ne yapmamız lâzım?

 

Sekmenin üzerine sağ tıklayıp Kod Görüntüle diyerek ilgili sayfanın kod penceresine ulaşın, ilk etapta görseldeki gibi olacaktır.
General alanından Worksheeti seçin.

Declarations alanında, kullanabileceğimiz sayfa olayları yüklenecektir, oradan Change olayını seçin.

İlgili olay pencereye eklenecektir.
O olayın içerisine, oluşturduğumuz makronun adını aşağıdaki gibi Call Filtre olarak yazalım.
Selection_Change olayı artık gereksiz olduğundan o olayı silebilirsiniz.

Sayfada herhangi bir hücrede veri girişi/değişikliği olduğunda artık Filtre makrosu çalışacaktır.
Aslında bu noktada işleyişte karşımızı bazı zorluklar çıkabilir, o da şudur; kodumuzu, belirli bir hücrede veri girişi olduğunda değil de, herhangi bir hücreye veri girişi olursa şeklinde bıraktık. H1 hücresi haricinde de bir hücrede değişiklik yaparsak yine filtreleme işlemini yapacaktır. Dolayısıyla sayfadaki her hareketimizde sürekli filtreleme uygulayacaktır.

Sadece H1 hücresinde bir değişiklik olduğunda çalış dememiz daha mantıklı olurdu.
Bunu da kodun daha stabil çalışması için son bir dokunuş olarak kabul edersek, ufak bir şart ilave ederek olayı tatlıya bağlayabiliriz.

O son dokunuş da bu şart olacak; If Target.Address(0, 0) = “H1” Then

Açıklaması: Eğer veri girişi yapılan hücrenin adresi H1 ise.. diyerek kodumuza son hâlini veriyoruz.

Sayfada sonucunu bu şekilde göreceksiniz. H1’e ne yazarsanız Marka alanından o ismi filtreleyecektir.

Ufak bir ipucu daha verelim; eğer hücreye yel* yazıp Entera basarsanız ya da mevcut kodun sonuna & “*” ibaresini eklerseniz, hücrede markanın tamamını yazmadan da sonucu filtreleyecektir. Örneğin; yel yazıp Entera basarsanız size yel ile başlayan tüm kayıtları listeleyecektir.

ActiveSheet.Range(“$A$1:$E$52”).AutoFilter Field:=3, Criteria1:=Range(“H1”).Value & “*”

 

Her şey bittikten sonra sıra dosyayı kaydetmeye gelirse, artık o dosyayı Makro İçerebilen Excel Çalışma Kitabı olarak farklı kaydetmelisiniz. (Farklı Kaydet kısa yolu; F12’dir.)

 

Tebrikler!  👍🏻

İlk kod yazma (makro oluşturma) tecrübesini edinmiş oldunuz.

Bu konular işinizi kolaylaştırmanın yanında, oldukça zevkli konulardır, öğrendikçe daha fazlasını isteyeceğinize eminiz.
Bu yazı, Excel’de sürekli yaptığınız işleri koda dökerek, işlerinizi daha hızlı yapabileceğiniz noktasında farkındalık uyandırmak içindi.

Dosyanın son hâline buradan erişebilirsiniz.

 

PEAKUP olarak, verdiğimiz Excel & VBA (Makro) Eğitim ve Danışmanlık Hizmetimiz ile sizi Excel’de çok daha iyi konumlara taşıyabileceğimizi unutmayın.

Bu yazıyı paylaşarak daha çok kişinin bilgi sahibi olmasını sağlayabilir, Excel Eğitimi alarak da Excel‘i daha etkin ve verimli kullanabilirsiniz.  👍🏻[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][mk_image src=”https://peakup.org/wp-content/uploads/2023/12/office_imza_son-1.gif” image_size=”full”][/vc_column][/vc_row]

Application.WorksheetFunction ile VBA’de VLookup Fonksiyonunu Kullanmak

Merhaba,

Bu makalemizde VBA kodunuza bir Excel fonksiyonu nasıl uygulayabileceğimizi anlatacağım. Makro yazarken bazı durumlarda Excel’in yerleşik fonksiyonlarından birini kullanmak isteyebiliriz. Bu durum makro yazarken mümkündür. Örneğin Düşeyara fonksiyonunu makro kodu içinde Excel’de olduğu şekliyle kullanabiliriz.

VBA’da bulunmayan pek çok fonksiyon vardır ama yerleşik Excel fonksiyonlarından VLookup, Max, Min ve daha birçok Excel işlevini doğrudan VBA makronuzdan çağırmak için Application.WorksheetFunction uygulamasını kullanırız.

Aşağıdaki Excel tablosunda standart bir Excel fonksiyonunu kullanmak isteyelim.


Yukardaki örnekte Oya adlı personelin maaşını VLookup’u kullanarak bulmak istiyoruz . Makro ile bunu aşağıdaki gibi yazarız:

Sub VLookupFonksiyonu()

Dim ArananMaas As Double

ArananMaas = Application.WorksheetFunction.VLookup(“Oya”, Range(“A:F”), 5,0)

MsgBox Format(d1, “Currency”) ,, “VBA Vlookup fonksiyonu”

End Sub

Makro aşağıdaki gibi sonuç üretir:

Vlookup yazmaya başladığımızda altındaki etikette sadece Arg1,Arg2,Arg3,[arg4] yazdığını göreceksiniz. Haliyle Excel’deki gibi çok açıklayıcı bir etiket olmadığı göze çarpıyor ve pek kullanıcı dostu olmayan bir bilgi çıkıyor.

Bu çok kullanışlı değil, ancak sadece WorksheetFunction fonksiyonlarının argümanlarının standart Excel fonksiyonlarının argümanlarıyla aynı olduğunu bilin. Ancak sözdizimi farklı olabilir.

Excel’de formülü nasıl kullanacağınızı biliyorsanız, VBA WorksheetFunction yöntemini kullanarak formülün nasıl kullanılacağını bildiğinizden emin olabilirsiniz.

Application.WorksheetFunction kullanarak arayabileceğiniz düzinelerce işlevin sadece birine değindim . Tam bir liste için VBA Düzenleyicinizi açın ve kod yazmaya başlayın Application.WorksheetFunction. dediğinizde “Sözcük tamamlama” etkinse (Ctrl-Space), VBA makrolarınızda kullanabileceğiniz düzinelerce yerleşik Excel fonksiyonu arasında gezinebilirsiniz!

Yukardaki örnek deki gibi birçok fonksiyonu kod kısmında rahatlıkla kullanabilirsiniz. Bunun birkaç avantajı var bunlardan birisi kodlar çok kısalacaktır ikincisi yerleşik fonksiyonlar çok hızlı çalışırlar.

Özellikle topla, ortalama, mak, min tarzında fonksiyonlar çok sık kullanıldığı için yazdığımız kodlarda büyük avantaj sağlarlar.

Sonuçta var olan bir yapı mevcutsa kısa zamanda etkin kodlar yazmak isteniyorsa Application.WorksheetFunction nesnesi oldukça işe yarar biryapıdır. Bunların yanı sıra bazı fonksiyonlarda bu nesneyi kullanmayız örneğin left ,right gibi metinsel fonksiyonları Exceldeki gibi doğrudan yazarız bu fonksiyonlar için Application.WorksheetFunction nesnesi kullanılmaz.

Aşağıdaki örnekteki fonksiyonlar VBA yerleşik fonksiyonları olduğu için Application.WorksheetFunction yapısı kullanılmaz doğrudan yazılırlar.

Sub MetinselFonksiyonlar()

Dim isim as string

isim = “Cihan Doğan”

buyukharf = UCase(isim)

kucukharf = LCase(isim)

ilk2karakter = Left(isim, 2)

End Sub

Burada dikkat edilmesi gereken konu Excel’de ki fonksiyon adı ile her zaman aynı olmayabilir. Örneğin Büyükharf fonksiyonu Excel’de Upper diye yazılır VBA kısmında ise Ucase olarak yazılır bu farklara dikkat etmek gerekir.

Bir başka makalede görüşmek üzere hoşçakalın.