KOD BİLMEDEN MAKRO YAZMAK!?

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.  👍🏻

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.

Makro ile Çok Fazla Sayfayı Hızlıca Silebilirsiniz!

Merhaba,

Excel belgelerinde eğer çok fazla sayfa var ise ve bu sayfaları silmek bir noktadan sonra zorlaşıyor ise bu makromuz, bu iş için tam biçilmiş kaftan…

Bu makalemizde bir veya daha çok sayfayı hızlıca silebileceğimiz bir makro uygulamasını form ara yüzü kullanarak nasıl silebileceğimizi göstereceğim. Uygulamanın çalışan son hali aşağıdaki gibidir. Silmek istediğimiz sayfaları seçerek, tarayarak, arama yaparak veya tümünü seç gibi işlemleri yaparak seçebilir ve silebiliriz. Çoklu seçim için Ctrl tuşuna basarak seçim yapmak oldukça kolay ve pratiktir.

Uygulamamız için ilk etapta yukarda görülen form’u tasarlıyoruz.

Daha sonra Tümünü Seç, Tümünü Kaldır ve Sil düğmeleri için kodlar yazıyoruz. Form arayüzünü açmak için Crtl+j kısayolu ile formu çağırabiliriz.

Form yüklendiğinde yani aktif olduğunda o Excel belgesinde normalde kaç tane sayfa var ise otomatik olarak listeye eklenmesini istiyoruz.

Bunun için aşağıdaki kod bloğunu kullanırız:

Private Sub UserForm_Activate()

‘Form önyükleme

For Each k In Sheets

ListBox1.AddItem k.Name

Next k

End Sub

Form açıldıktan sonra istediğimiz sayfaları tek tek seçerek, taratarak veya arama yaparak seçip Sil düğmesine tıkladığımızda otomatik olarak silebiliriz.

Tümünü seçmek için aşağıdaki kodu kullanırız. Bu kod çalıştığında form içinde kaç tane sayfa var ise hepsinin onay düğmesi seçili hale gelecektir.

Private Sub CommandButton2_Click()

‘Tümünü seç

For i = 0 To ListBox1.ListCount – 1

ListBox1.Selected(i) = True

Next i

End Sub

Seçili olan tüm sayfalarda Tümünü Kaldır düğmesine tıkladığımızda ne kadar seçili sayfa var ise hepsininde seçimleri iptal olur bunun için aşağıdaki kod bloğunu kullanırız.

Private Sub CommandButton3_Click()

‘Tümünü Kaldır

For i = 0 To ListBox1.ListCount – 1

ListBox1.Selected(i) = False

Next i

End Sub

Eğer arama kutucuğunu kullanarak silme yapmak istersek istediğimiz sayfa adını yazarak listbox içinden arama işlemini yaptırıp seçili olan sayfa veya sayfaları silebiliriz. Bu işlem için aşağıdaki kod bloğunu kullanırız.

Private Sub TextBox1_Change()

‘Arama

Dim i As Integer

Dim j As Integer

With ListBox1

.MultiSelect = fmMultiSelectSingle

.ListIndex = -1

.MultiSelect = fmMultiSelectMulti

For i = 0 To .ListCount – 1

For j = 0 To .ColumnCount – 1

If LCase(InStr(1, .Column(j, i), TextBox1.Text, vbTextCompare)) Then

.ListIndex = i

.Selected(i) = True

End If

Next j

Next i

End With

End Sub

Ve son olarak silmek istediğimiz sayfaları seçtikten sonra Sil düğmesine tıklayarak seçili sayfaları kolaylıkla silebiliriz. Bunun için Sil düğmesinin çift tıkladıktan sonra açılan sayfaya aşağıdaki kodu yazmamız yeterlidir. Böylece ne kadar seçili sayfa var ise silinecektir.

Private Sub CommandButton1_Click()

‘Sayfa veya Sayfaları Silme

On Error Resume Next

Application.DisplayAlerts = False

For k = ListBox1.ListCount – 1 To 0 Step -1

If ListBox1.Selected(k) Then

Worksheets(ListBox1.List(k, 0)).Delete

ListBox1.RemoveItem (k)

End If

Next k

Application.DisplayAlerts = False

End Sub

Yukardaki makro kodları ile işlemimizi çok kolaylaştıracağız. Tabi bu formu çağırmak içinde bir kısayol atamamız gerekir. Diğer türlü sayfa içinden bir düğme koyup onu tıklayarak çağırmak çok mantıklı olmayacaktır. Ama kendimize özel bir makro sekmesi yapıp bu makroyu oraya bir ikon aracılığı ile yerleştirip kullanabiliriz. Tüm bunların yanı sıra kısayol işlemi oldukça basit ve daha kullanışlıdır. Formları çağırmak için modül ekleyim ilgili formu çağırmamız gerekmektedir. Bunun için makromuza bir modül ekliyor ve içerisine aşağıdaki kodu yazıyoruz.

Kodda Forma verdiğimiz ismi Show ederek görüntüleyebiliyoruz.

Aynı şekilde Hide ederek de gizleyebiliriz. Ama bunun için formdaki varsayılan çıkış düğmesinden kapatmayı daha uygun gördüm.

Bir başka makro makalesinde görüşmek üzere,

Hoşçakalın.

Makrolar (VBA) ile Excel’de Fonksiyon Yazmak

Bu makalemizde VBA eğitimlerimizde de çok üstünde durduğumuz bir konu olan Makrolar (VBA) ile Excel’de Fonksiyon Yazmak konusunu inceleyeceğiz.

Makrolar (VBA) ile Excel’de Fonksiyon Yazmaya Giriş

Excel’de yerleşik olarak birçok farklı kategoride toplamda 467 tane hazır fonksiyon bulunuyor. Bu fonksiyonlar ile mevcut işlemlerimizi yapmak istediğimizde formülleri kullanıyoruz.

Fakat bazı durumlarda bu fonksiyonlar doğrudan ihtiyaçlarımızı görmeyebilir veya çok fazla sayıda fonksiyonu bir arada kullanarak uzun ve karmaşık bir formül bizim için gerek kurgulanması bakımından gerekse yazılışı bakımından zor olabilir. Örneğin 40 tane eğer fonksiyonunu içiçe yazmak can sıkıcı olabilir.

Böyle durumlarda Excel’de VBA’i yani makroları kullanarak kendimize özel fonksiyonlar yazabiliyoruz.

Makrolar (VBA) ile Excel’de Fonksiyon Yazarak istediğimiz işlevleri rahatlıkla kodlaya biliriz. Üstelik bu fonksiyonları sonra değiştirebiliyor veya istediğimiz kişiler ile kolaylıkla paylaşabiliyoruz.

VBA ile ilgili daha çok bilgiye buradan erişebilirsiniz.

Modül Ekleme ve Kaydetme

Bir fonksiyon yazmak istediğimizde Excel’de kod editörüne geçip Insert sekmesinden bir Modül eklememiz gerekiyor.

Fonksiyonlar sayfalara yazılabilir ve kullanılırlar fakat Excel ara yüzünde eşittir (=) işaretini koyup fonksiyonun adını yazdığımızda fonksiyonun diğer yerleşik fonksiyonlar gibi çıkmasını istiyorsak kesinlikle fonksiyonumuzu bir modül’e yazmamız gerekiyor. Bir modüle birden fazla fonksiyon yazılabilir.

İçindeki modüllerde fonksiyon bulunan Excel belgelerini .xlsm (Makro İçerebilen Excel Çalışma Kitabı) uzantısı ile kaydedip bu belgeleri gönderdiğiniz herkes kullanabilir.

Fakat fonksiyon modülde olduğu sürece sadece o Excel çalışma kitabında çalışır başka bir Excel belgesinde = (eşittir) dediğinizde çıkmaz o yüzden fonksiyonlarımızı modül’e yazdıktan sonra belgede Farklı Kaydet diyerek fonksiyonu .xlam (Excel Eklentisi) olarak Excel’in varsayılan “C:UsersCihanAppDataRoamingMicrosoftAddIns” fonksiyon klasörüne kaydederiz.

Farklı bir adrese de kaydedebilirsiniz fakat o fonksiyonu her defasında göstermek zorunda kalabilirsiniz örneğin Excel’i açtığınızda ilk bakacağı yer AddIns klasörü olduğu için buraya kaydetmenizi tavsiye ederim.

Excel’deki fonksiyonlar aşağıdaki şekilde görünür. Bu tarz Excel dosyaları çift tıklanarak açılmazlar, bunlar bir klasöre yüklenir ve kullanılırlar.

Fonksiyon dosyasının adı ile fonksiyonun adı aynı olmak zorunda da değildir. Bir fonksiyon dosyasında birden fazla farklı isimde fonksiyonlar da bulunabilir.

.xlam dosyalarını Excel’den Çağırmak

Eğer başka bir konuma kaydeder iseniz Excel ara yüzünde =(eşittir) dediğinizde çıkmayacaktır böyle bir durumda da Geliştirici sekmesindeki Excel Eklentilerinden eklemeniz gerekecektir.

Geliştirici sekmesinden Excel eklentilerine tıkladığınızda açılan pencereden ilgili fonksiyonun onay kutusunu işaretleyip tamam dedikten sonra Excel’de kullanılabilir.

Evet şimdi gelelim fonksiyonumuzu yazmayaJ

Fonksiyon yazmak için modül’ümüze gidiyoruz ve Function kelimesi ile yazmaya başlıyoruz. Fonksiyon yazarken sayı ve karakter ile başlamıyoruz, boşluk koymuyoruz ve 255 karakterden uzun bir isim vermiyoruz.

Fonksiyon Yazımı

Function TCkontrol()


‘ VBA Kodları


End Function

Fonksiyonu yazdığımızda fonksiyon adının yanındaki parantez içine bir şey yazmaz iseniz fonksiyon parametre almayan fonksiyondur. Örneğin Excel’in yerleşik fonksiyonları olan Bugün, Şimdi, Pi gibi fonksiyonlar parametre almazlar.

Eğer bir parametre gönderecek isek parantez içinde aralarında virgüllerle ayırarak bu parametreleri tipleri ile belirleyebiliriz. Biz örneğimizde T.C. kimlik numarasını göndereceğiz ve bu T.C. kimlik numarasının doğru olup olmadığını arka planda yapacağı bir hesaplama ile bize doğru veya yanlış şeklide döndürecek bir fonksiyon yazacağız.

Fonksiyona göndereceğimiz TC numarasını fonksiyona metin gibi gönderip sonra her bir karakterini sırayla parçalarına ayıracağız. Daha sonra bu parçalardan bir matematiksel hesap ile 10 haneyi biz bulacağız akabinde 11 haneyi de yine ilk 10 haneden kendimiz elde edeceğiz.

Ve Excel’den gelen TC numarasının 10. ve 11. Hanelerinin benim bulduğum 10 ve 11. Hanelere aynı anda eşit olması durumda TC kimlik numarasının doğru olduğunu saptamış olacağız ve sonuç olarak doğru göndereceğiz aksi durumda yanlış bilgisini göndereceğiz.

Örnek bir fonksiyon: TCKontrol

Function TCKontrol(ByVal tc As String) As Boolean
Dim tc1 As Integer
Dim tc2 As Integer
Dim tc3 As Integer
Dim tc4 As Integer
Dim tc5 As Integer
Dim tc6 As Integer
Dim tc7 As Integer
Dim tc8 As Integer
Dim tc9 As Integer
Dim tc10 As Integer
Dim tc11 As Integer
Dim tc10x As Integer
Dim tc11x As Integer
tc1 = Mid(tc, 1, 1)
tc2 = Mid(tc, 2, 1)
tc3 = Mid(tc, 3, 1)
tc4 = Mid(tc, 4, 1)
tc5 = Mid(tc, 5, 1)
tc6 = Mid(tc, 6, 1)
tc7 = Mid(tc, 7, 1)
tc8 = Mid(tc, 8, 1)
tc9 = Mid(tc, 9, 1)
tc10 = Mid(tc, 10, 1)
tc11 = Mid(tc, 11, 1)
tc10x = ((tc1 + tc3 + tc5 + tc7 + tc9) * 7 – (tc2 + tc4 + tc6 + tc8)) Mod 10
tc11x = (tc1 + tc2 + tc3 + tc4 + tc5 + tc6 + tc7 + tc8 + tc9 + tc10x) Mod 10
If tc10 = tc10x And tc11 = tc11x Then
TCKontrol = True
Else
TCKontrol = False
End If
End Function

Yukarda bulunan fonksiyona Excel ara yüzünden TC numaralarını göndereceğiz ve bu ilgili işlemleri yaptıktan sonra bizlere TC’nin doğru olup olmadığını gönderecektir.

Peki başka neler biliyoruz?

  • Örneğin TC numaraları 11 hane olmak zorundadır.

  • ilk 9 hane elimizde ise 10 ve 11. Haneleri bulabiliriz.

  • TC numaraları kesinlikle çift sayı ile biter. (0,2,4,6,8)

  • 11 hanenin hepsi de rakam olmak zorundadır.

O zaman bu kodu geliştirebiliriz. Örneğin karakter uzunluğu 11 haneden farklı ise hata yazdırabiliriz veya sadece rakamlardan oluşmuyorsa ya da son hanesi çift değilse hiç kontrole girmeden doğrudan hata sonucunu ekrana yazabiliriz.

Fonksiyonumuzu yazdık ve ülkemizde herkesin kullanacağı bir fonksiyon olduğu için istediğimiz kişilerle paylaşabiliriz. Dilerseniz kod kısmına geçip yeni kod ilaveleri yapabilir ve yine aynı isimle aynı şekilde kullanabiliriz. Makrolar (VBA) ile Excel’de Fonksiyon yazmanın güçlü yanlarını gördükçe sürekli yeni fonksiyonlar üreteceksiniz.

Yazdığımız fonksiyonları diğer Excel fonksiyonları içinde kullanabiliriz vb. birçok işlemi kolaylıkla yapabiliriz. Fonksiyonların en büyük avantajlarından biride hızlarıdır. Oldukça verimli ve hızlı çalışmaları sayesinde işlemleri kısa sürelerde halledebiliriz.

Yukardaki fonksiyon örneğinde görüldüğü üzere Makrolar (VBA) ile Excel’de Fonksiyon kullanarak istediğimiz gibi esnetip şekillendirebiliyoruz. Bu esneklik bizlere daha fazla ve doğru iş yapma olanağı sağlıyor.

İşlem Ekle ile fonksiyon çağırmak

Excel’de F(x) işaretine tıkladığınızda açılan pencerede Kategori seçerken Kullanıcı Tanımlı dediğinizde kendi yazmış olduğunuz fonksiyonları da görmeniz mümkündür.

Görüldüğü gibi Makrolar (VBA) ile Excel’de Fonksiyon yazmak oldukça kolay ve kullanışlıdır. Özellikle Makrolar (VBA) ile Excel’de Fonksiyon yazmayı tüm Excel kullanıcılarına öneriyorum.

Bir önceki makalemde ilginizi çekebilir:

https://www.peakup.org/blog/application-worksheetfunction-ile-vbade-vlookup-fonksiyonunu-kullanmak/

Diğer makalelerime buradan erişebilirsiniz.

Bir başka makalede görüşmek üzere,

Hoşçakalın.

Pratik 10 Temel Makro Kodu

Merhaba,

Bu makalemizde Excel’de işinize yaracak en temel 10 Makro kodunun ne işe yaradıklarını ele alacağız.

Excel de makro kullanarak çok zor ve zaman işlemlerinizi çok kısa sürelerde yapabilirsiniz. Bu süreler o kadar kısadır ki bir örnek vermek gerekirse 3-5 günlük bir iş 3-5 dk’ya kadar düşebilir diyebiliriz. Hal böyle olunca makroların önemi daha da artıyor. Karmaşık, düzensiz verilerinizi normalleştirirken ya da farklı tablo yapıları oluştururken makrolar olmazsa olmazımızdır.

Makrolar geliştirilirken bazen benzer mantıkta işlemler çok fazla karşımıza çıkar her defasında bu kodları yazmak yerine bu kodları arşivleyerek gerektiği yerlerde birkaç ufak değişiklikle kolaylıkla uygulayabilirsiniz.

Bu makalemizde 1o Temel makro kodunu sizlere ne iş yaptıklarını açıklayarak sunuyoruz. Çalışmanızda daha üretken olmanıza yardımcı olacak bu örnekler oldukça basit ve kullanışlıdırlar. Bu hayat kurtaran temel kodları uygulamak da oldukça basittir. Bundan önce VBA kullanmamış olsanız bile bu kodları kullanabilirsiniz. Tek yapmanız gereken bu kodları VBA editörünüze yapıştırmak.

Bu kodları kullanmadan önce, VB editörüne erişmek için Excel şeridinizde geliştirici sekmenize sahip olmamız gerekiyor veya tüm Office paketlerinde Alt+F11 kısayol tuşu ile (Excel, Word, PowerPoint vb.) ulaşabilirsiniz.

  • Geliştirici sekmenize gidin ve “Visual Basic” üzerine tıklayın.

  • “Proje Penceresi” n de sol tarafta, çalışma kitabınızın adını sağ tıklayın ve yeni bir modül ekleyin.

  • Sadece kodlarınızı modüle yapıştırın ve kapatın. Dilerseniz F5 kısa yolu ile de kodlarınızı çalıştırabilirsiniz.

  • Şimdi geliştirici sekmenize gidin ve makro düğmesine tıklayın.

  • Dosyanızda bulunan makroların listesini içeren bir pencere gösterecektir ve bu listeden seçtiğiniz bir makroyu çalıştırabilirsiniz.

Şimdi kodlarımızı inceleyelim.

  • Seçtiğiniz hücreden itibaren istediğiniz kadar sayıda sağa doğru boş sütun ekler ve diğer sütunları da öteler.

    Sub CokluSutunEkle()

    Dim i As Integer

    Dim j As Integer

    ActiveCell.EntireColumn.Select

    On Error GoTo Son

    i = InputBox(“Eklemek istediğiniz sütun sayısını giriniz”, “Sütun Ekle”)

    For j = 1 To i

    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromRightorAbove

    Next j

    Son: Exit Sub

    End Sub

  • Seçtiğiniz hücreden itibaren istediğiniz kadar sayıda aşağı doğru boş sütun ekler ve diğer satırları da öteler.

    Sub CokluSatirEkle()

    Dim i As Integer

    Dim j As Integer

    ActiveCell.EntireRow.Select

    On Error GoTo Son

    i = InputBox(“Eklemek istediğiniz satır sayısını giriniz “, “Satır Ekle”)

    For j = 1 To i

    Selection.Insert Shift:=xlToDown, CopyOrigin:=xlFormatFromRightorAbove

    Next j

    Son: Exit Sub

    End Sub

  • Seçtiğiniz hücreden itibaren girdiğimiz sayı kadar otomatik doldurma yapar. Örneğin F7 hücresi seçili iken çalıştırdığımızda açılan giriş kutusuna 5 yazarsak F7 hücresinden aşağı doğru 1’den 5’e kadar sayı birer artan sayıları yazdırır.

Sub OtomatikSeriDoldurma()

Dim i As Integer

On Error GoTo Son

i = InputBox(“Değer giriniz”)

For i = 1 To i

ActiveCell.Value = i

ActiveCell.Offset(1, 0).Activate

Next i

Son: Exit Sub

End Sub

  • Seçtiğiniz hücrelerin sütun genişliklerini sütunun içindeki en uzun metne göre otomatik olarak ayarlar.

Sub SutunlariOtomatikAyarla()

Cells.Select

Cells.EntireColumn.AutoFit

End Sub

  • Seçtiğiniz hücrelerin satır genişliklerini satırın içindeki metne göre otomatik olarak ayarlar.

Sub AutoFitRows()

Cells.Select

Cells.EntireRow.AutoFit

End Sub

  • Excel’in tüm hücrelerini çözdükten sonra metni kaydır özelliğini çözer ve satır, sütun genişliklerini otomatik olarak ayarlar.

Sub MetniKaydirTemizle()

Cells.Select

Selection.WrapText = False

Cells.EntireRow.AutoFit

Cells.EntireColumn.AutoFit

End Sub

  • Birleştirilmiş seçili hücreleri eski haline geri döndürür.

Sub UnmergeCells ()

Selection.UnMerge

End Sub

  • Durum çubuğunda makro kodunun işlenmesi sırasındaki ilerlemenin yüzdesini görmek için aşağıdaki kodu kullanabiliriz.

    Sub DurumCubugundaIlerleme()

    Application.StatusBar = “İşlem başlıyor”

    For k= 1 To 5000

    Cells(k, 1) = k

    Application.StatusBar = ” İşlemin bitmesi için lütfen bekleyin ” & Round((k / 5000 * 100), 0) & “%”

    Next

    Application.StatusBar = “”

    End Sub

  • İlgili sayfanın sağ üst köşesine o günün tarihini yazdırır. Üst ortada Satış Raporu ve üst solda ise ABC şirketi yazar.

    Sub UstBilgiyeTarihEkleme()

    With ActiveSheet.PageSetup

    .LeftHeader = “ABC Şirketi”

    .CenterHeader = “Satış Raporu”

    .RightHeader = “&D”

    .LeftFooter = “”

    .CenterFooter = “”

    .RightFooter = “”

    End With

    ActiveWindow.View = xlNormalView

    End Sub

  • Makro ile Excel dosyasında çalışırken PowerPoint programını açmak için aşağıdaki kodu kullanabiliriz. Index değerini 0 yazarsak Hesap Makinası, 1 yazarsak Word, 3 yazarsak Outlook açılır.

Sub PowerPointAc()

Application.ActivateMicrosoftApp Index:=2

End Sub

Yukardaki kod blokları tek başlarına doğrudan bir anlam ifade etmeyebilir. Bizler yazdığımız kodlarda bu pratik kod bloklarını kullanarak daha hızlı uygulama geliştirebiliyoruz. En azından bir kere çalıştırıp sonucunu gördüğünüz zaman kafanızda yer edecek ve böyle bir durum ile karşılaşırsanız uygulamanız kolay olacaktır.

Bir başka makalede görüşmek dileğiyle,

Hoşçakalın.