VBA Değişken Tanımlama Biçimleri

Bu yazımızda sizlere VBA Değişken Tanımlama Biçimleri ‘ni anlatıyor olacağız. Değişkenler programcılığın temel öğelerinden biridir. Değişkenleri kullanmak ve yönetmek proje oluştururken olmazsa olmazlarımızdandır diyebiliriz. Olabildiğince sade biçimde sizlere anlatmaya çalışacağım. Hatırlatma: VBA ile ilgili diğer yazılarımızı da yine blog sayfamızda bulabilirsiniz. 👍🏻

 

VBA Değişken Tanımlama Biçimleri Hakkında

Değişkenler genellikle bir veriyi hafızada tutmak ve gerektiğinde bu veriyi kullanmak için vardır.
Değişkenler genelde iki sınıfa ayrılır. Global (Genel) değişkenler ve Local (Yerel) değişkenlerdir.
Global değişkenler programın bütün fonksiyonları tarafından kullanılabilirken, Local değişkenler sadece tanımlandıkları fonksiyonda kullanılır.
Bir prosedür, fonksiyon veya yürütülen bir modülün ömrü boyunca geri çağrılabilir, yeniden atanabilir veya sabitlenebilir.
Bir değişken bildirmek, kullanacağınız değişkenlerin adlarını ve değişkenin içereceği veri türünü belirtmenize olanak tanır.
Örneğin, Sonuç = 10 ise, değişken Sonuç bir Integer Tam sayı olarak bildirilebilir.
Değişken isimlerini genelde kısa ve akılda kalıcı bir biçimde oluştururuz. En çok tercih edilen değişken isimleri; i, a, n, x ,y ,z, s gibi tek karakterlik isimlerdir ki, kodlarda yazımı kolay olsun. Değişken adları kodlar içerisinde kullanırken hatırlayacağınız bir ad olursa, kod yazımı esnasında hata yapma olasılığınız azalır.
Şimdi tanımlama kısmına geçebiliriz.

 

Değişken tanımlama ile ilgili genel yazım kalıpları bu şekildedir.
Dim değişken_adı [(diziboyutu)] As tipi
Public değişken_adı [(diziboyutu)] As tipi
Static değişken_adı [(diziboyutu)] As tipi

 

Bu genel tanımlama ile beraber aşağıda belirtilen tanımlama yöntemleri de tercih edilebilir.

  1. Dim ile tanımlama
  2. Veri Tanımlayıcıları (Kısaltmalar) ile tanımlama
  3. DEF ile tanımlama

 

Dim ile Tanımlama

En çok bilinen ve kullanılan VBA Değişken Tanımlama yoludur.
Yazım kalıbını Syntax yukarıda belirttik. Tekrar birkaç örnekle netleştirelim.
Diyelim ki, A sütunundaki satırlarda (hücrelerde) kullanmak üzere satır adında bir değişken tanımlaması yapacağız, satır numaraları tam sayı oldukları için Veri Türleri makalemizde belirttiğimiz tam sayı veri tiplerinden birini kullanabiliriz. Kontrol ettireceğimiz satır sayısına veya hücrede olabilecek maksimum sayıya göre değişken veri tipini kullanmak daha uygun olacaktır. Sayısal ve Tam Sayı olarak kullanabileceğimiz, temelde uygun 3 değişken veri tipimiz var, ByteInteger ve Long. Eğer satır değişkenine atayacağımız sayısal veri 255 ve daha az ise, o zaman hafızada daha az yer kaplayan Byte değişken veri tipini kullanabiliriz. Eğer satır değişkenine atayacağımız sayısal veri -32767 ile +32768 arasında ise, o zaman da Integer değişken veri tipini kullanabiliriz. Daha büyük bir Tam Sayı olabilir ise, o zaman da Long değişken veri tipini kullanmalıyız. Eğer değişkeninin alabileceği maksimum sayıdan daha büyük bir sayı gönderilirse Overflow (Taşma) hatası alınır. Eğer Sayısal olarak belirtilen bir değişkene Metinsel bir ifade gönderilirse, o zaman da Type Mismatch (Tür Uyuşmazlığı) hatası alınız.

 

Dim ile Değişken tanımlamaya birkaç örnek verelim;

Sub PEAKUP()
    Dim satir As Long
    Dim sutun As Byte
    Dim metin As String
    Dim baslangic As Date
    Dim para As Currency
    Dim nesne As Object
    satir = 15
    sutun = 5
    metin = "Excel Turkey Forum"
    baslangic = "24.06.2018"
    para = 300
    Set nesne = ActiveSheet
End Sub

Bu şekilde her bir değişkeni ayrı ayrı satırlarda yazabildiğimiz gibi, istersek tek bir satırda da bu şekilde yan yana yazabiliyoruz.
Sadece en başta Dim olması gerekiyor ve her bir değişken arasına virgül koyarak devam ediyoruz.

Sub PEAKUP()
    Dim satir As Long, sutun As Byte, metin As String
    Dim baslangic As Date, para As Currency, nesne As Object
End Sub

Burada şuna dikkat etmek gerekiyor. Bazı kullanıcılar şurada yanılgıya düşüp yanlış bir tanımlama yapabiliyorlar.
Yukarıda yazdığım kodu eğer bu aşağıdaki gibi yazmaya kalkarsanız, yani Dim ile başlayıp ilk değişkeni tanımladım diyerek, devam eden yandaki değişkenleri de uygun değişken veri tipleri ile tanımlamış olmazsınız.. “sutun”, “metin” tanımlamalarında veri tipleri belirtilmediği için, Byte ve String değil, tanımsız veri tipi olan Variant olarak belirtilmiş olur. Dim ile tanımladığım ilk değişkende veri tipi belirttiğiniz için, devamında gelen diğer değişkenleri de tanımlamış olmuyorsunuz, her bir değişenin ayrı ayrı tipini de belirtmelisiniz.

 

Veri Tanımlayıcıları (Kısaltamalar) ile tanımlama

Abbreviations (Kısaltmalar)

Tür Bildirim son ekleri olarak da bilinir.
Bu çok fazla kullanılmaz ama kodlarda tasarruf sağlar.
VBA’ya değişken adının sonuna özel bir karakter ekleyerek bir değişken türünü söylemek de mümkündür.

Dim sayi% 'Integer
Dim uzunsayi& 'Long
Dim toplam! 'Single
Dim alttoplam# 'Double
Dim odeme@ 'Currency
Dim adi$ 'String
Dim enuzunsayi^ ' 64 bit'te LongLong

 

Veri Türü Kısaltması İfade Karakterleri

VBA

, veri türünü belirtmenin hızlı bir yolu olarak, bir değişkenin adına bir karakter eklemenize izin verir.
Değişkenleri bildirmek için bu yöntem kullanılmamalıdır ve yalnızca geriye dönük uyumluluk amacıyla kullanılabilir.
Aşağıdaki satır bir Double veri türü ile bir değişken bildirecektir.

Dim dDouble#

Ancak bu satır “As” anahtar sözcüğünü kullanarak bildirilmesi daha doğru olur.
Dim dDouble As Double

 

Veri Türü Kısaltmalar / Son Ekler

Eğer kısaltmaları kullanırsanız, o zaman türü bildirmek zorunda değilsiniz.
% ifadesini kullanırsanız, “As Integer” yazmanız gerekmez.
Bu kısaltmalar, Variant‘lara hazır bilgi atamak için yararlı olabilir.

Örnek; sayim = 10#

 

DEF ile Tanımlama

Değişkenlerimizi belirttiğimiz gibi birkaç farklı yöntemle tanımlayıp bildirebiliyorduk, bu yöntemlerden biri de DEF ile tanımlama.
Bu tanımlama genellikle kod penceresinin en üstünde prosedürden bağımsız olarak yapılır.
Değişken olarak kullandığımız isim ve veri tipini aşağıdaki gibi kısaltarak tanımlamasını yapabiliyoruz.
Def+Tür ‘den sonra gelen harf ile başlayan değişkenlerin o türde olduğunu ifade eder.

def ile değişken tanımlama tablosu

Def ile tanımlamaya Dim ile arasındaki farkı gösteren bir örnek verelim..

Öncelikle Dim ile değişkenlerimizi bu şekilde tanımlayalım.

Sub PEAKUP()
    Dim satir As Integer, sutun As Integer
    Dim metin As String, harf As String, kelime As String
    Dim tarih As Date, baslangic As Date
    Dim rakam As Double, fiyat As Double
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Şimdi bu tanımlamayı bir de Def ile yapalım.

DefInt S
DefStr H, K, M
DefDate B, T
DefDbl F, R
Sub PEAKUP()
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Gördüğünüz gibi sadece baş harflerini kullanarak türünü belirtip değişken tanılaması yapmış olduk.
Bu noktada değişken tanımlamaları fazla yer kaplamasın ve daha az satırda görünsün isterseniz, Aşağıda belirtildiği gibi Def satırlarını iki nokta üst üste ( : ) ile tek satırda yan yana yazabilirsiniz.

DefInt S: DefStr H, K, M: DefDate B, T: DefDbl F, R
Sub PEAKUP()
    satir = 10
    sütun = 5
    metin = "PEAKUP"
    harf = "E"
    kelime = "Kitap"
    tarih = "24.06.2018"
    baslangic = "14.12.1980"
    rakam = 1453.48
    fiyat = 5647.15
End Sub

Bu arada tüm değişken isimlerini, değerlerini ve türlerini Locals Window‘dan kolaylıkla takip edebilir ve değerlendirebilirsiniz.

def ile değişken tanılamayı locals windowda görüntüleme

 

Daha fazla detay için Microsoft Docs sayfasına bakabilirsiniz.

Diğer yazılarımızda görüşmek üzere, hoşça kalın. 🙋🏻‍♂️
Bu yazımızı çevrenizle paylaşarak birçok kişinin de bilgi sahibi olmasını sağlayabilirsiniz. 👍🏻

IF KARAR YAPISI İLE ŞARTA GÖRE İŞLEMLER

Bu yazımızda sizlere; makro tarafında olmazsa olmaz bir karar/koşul yapısından bahsediyor olacağım. Yazının sonunda IF Karar yapısı nedir, ne zaman ve nasıl kullanılırı öğrenmiş olacağız.

 

IF KARAR YAPISI NEDİR?

Bu

koşul yapısı; bütün programlama dillerinde olan, bazı şartların gerçekleşmesi veya gerçekleşmemesi durumunda ayrı-ayrı kod bloklarının çalıştırılmasına imkân veren yapıdır.

Belirtilen koşuldan geri dönen True/False Boolean değerine göre işlemler yapabilmenizi sağlar.
Eğer koşulun True Doğru olduğu söylenirse, belirtilen koşul(lar)ın altında bulunan ifadeler uygulanır.
Koşulun False Yanlış olduğu söylenirse, IF yapısından sonra belirtilen ifadeler uygulanır. İlaveten, duruma göre Else veya ElseIF ifadelerini belirttiysek o satırların da kontrolünü sağlar ve ne zaman sonuç True dönerse orada belirtilen komutlar uygulanır.

 

NE ZAMAN KULLANILIR? 

Kod yazarken, Eğer ile başlayan bir düşüncemiz/şartımız varsa ve bir veya birden fazla şarta göre işlemler yaptırmak istiyorsak genellikle bu yapıyı kullanırız. Bu yapıdan başka birkaç Karar/Koşul yapısı daha mevcuttur, bunlar; Select Case, IIF, Choose ve Switch yapılarıdır. Bu yapılara da hâkim olmak kod yazarken sizi rahatlatacaktır.

 

NASIL KULLANILIR?

Öncelikle yazım kalıbı veya söz dizimi dediğimiz durumu, yani bu IF yapısını VBA tarafında nasıl yazabiliriz ona bir bakalım.

 

YAZIM KALIBI

Yazım kalıbı Syntax aşağıdaki gibidir..
Mavi renkli kısımlar sabittir.
Kırmızı renkli kısımlar değişkendir.

If koşul(lar) Then
‘Kodlarınız
End If

Mantık olarak kabaca şöyle düşünebilirsiniz; “Eğer bu sayı 10’dan büyükse bunları yap.” gibi..

Eğer tek bir koşulumuz şartımız varsa, yukarıdaki kalıbı bu şekilde de kullanabilirsiniz.
If koşul(lar) Then ‘Kodlarınız
Tek şart varsa, End If ifadesini kaldırıp, koşulu Then ifadesinin yanına yazabilirsiniz.
If ve Then arasındaki koşulumuz da, duruma göre birden fazla olabilir.
Yani örneğin; A sütunundaki hücrelerdeki sayılar 10‘dan büyükse ve boş değilse gibi, And, Or, Xor vb. Mantıksal operatörleri de kullanabilirsiniz.

Şimdi bu kısmı tam olarak anlamanız için ufak bir kod örneği verelim..

If sayi > 10 And sayi < 20 Then

Tek bir If .. Then kalıbı arasında mantıksal operatörler kullanarak, koşulumuzu kendi içinde 2-3-4…’e çıkarabilirsiniz. Diyelim ki; A2:A10 hücre aralığında bazı sayılarımız var ve bu sayılardan 10‘dan büyük olanların B sütununa büyük ifadesini yazdıralım.

Bunun için bize gerekli olan kodlar bu şekildedir;

Sub IF_Kosul_Yapisi()
    For i = 2 To 10
        If Cells(i, "A") > 10 Then
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

Bu kodların nasıl çalıştığını gif resimde görerek daha iyi anlayabilirsiniz.

IF yapısı

 

BİRDEN FAZLA KOŞUL VE ELSE

Eğer birden fazla koşulumuz var ise ve mantık olarak, Eğer böyleyse bunu yap, değilse şunu yap gibi, iki farklı duruma göre işlem yapmak istiyorsanız, bunu da yine tek bir satırda bu şekilde yazabileceğiniz gibi;

If Cells(i, "A") > 10 Then Cells(i, "B") = "Büyük" Else Cells(i, "B") = "Küçük"

alt alta Else ifadesiyle birlikte de yazabilirsiniz. O zaman kalıbımız bu şekilde olacaktır.
If koşul(lar) Then
‘Doğruysa Kodlarınız
Else
‘Yanlışsa Kodlarınız
End If

Örnek kodlarımız..

If Cells(i, "A") > 10 Then
    Cells(i, "B") = "Büyük"
        Else
    Cells(i, "B") = "Küçük"
End If

Yukarıdaki kod, 10‘dan büyük olan hücrelerin sütununa Büyük, küçük olanların da sütununa Küçük yazar.

 

ELSEIF

Şimdi de ElseIf DeğilseEğer ifadesini dahil ederek koşullarımızı artıralım.
Bu kalıpta da mantığı kabaca şöyle düşünebilirsiniz; “Eğer bu böyleyse bunu yap, değilse eğer şöyleyse şunu yap, değilse eğer öyleyse onu yap.” gibi..

Yazım Kalıbı bu şekildedir..
If koşullar Then
‘kodlarınız
ElseIf koşullar Then
‘kodlarınız
ElseIf koşullar Then
‘kodlarınız
End If

Sonuc sütununa sonuçlarımızı bu şartlara göre yazdıralım.

  • Eğer sayı sıfıra eşitse Sıfır yazsın.
  • Eğer sayı 10’a eşitse Eşit yazsın.
  • Eğer sayı 10’dan küçükse Küçük yazsın.
  • Eğer sayı 10’dan büyükse Büyük yazsın.

Belirttiğimiz bu şartlarımıza göre, bize gereken kodlar bu şekilde olacaktır..

Sub Eger_Kosul_Yapısı_2()
    Dim i As Integer
    For i = 2 To Range("A65536").End(3).Row
        If Cells(i, "A") = 0 Then
            Cells(i, "B") = "Sıfır"
        ElseIf Cells(i, "A") = 10 Then
            Cells(i, "B") = "Eşit"
        ElseIf Cells(i, "A") < 10 Then
            Cells(i, "B") = "Küçük"
        ElseIf Cells(i, "A") > 10 Then
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

Bu kodları da gif resim üzerinde nasıl çalıştığını görerek daha net anlayabilirsiniz.

 

ELSEIF ve ELSE BİRLİKTE

Son olarak kodlarımıza, eğer yukarıda belirttiğimiz şartların hiçbirine uymuyorsa, o zaman End If satırından önce Else değilse ifadesi dahil edilerek, bu şekilde hücreye başka bir sonuç da yazdırılabilir.

Sub Eger_Kosul_Yapısı_3()
    Dim i As Integer
    For i = 2 To Range("A65536").End(3).Row
        If Cells(i, "A") = 0 Then
            Cells(i, "B") = "Sıfır"
        ElseIf Cells(i, "A") = 10 Then
            Cells(i, "B") = "Eşit"
        ElseIf Cells(i, "A") < 10 Then
            Cells(i, "B") = "Küçük"
        Else
            Cells(i, "B") = "Büyük"
        End If
    Next i
End Sub

 

Daha fazla detay için Visual Basic’te Koşul Yapılarını buradan inceleyebilirsiniz.

 

Diğer yazılarımızda görüşmek üzere, hoşça kalın. 🙋🏻‍♂️
Bu yazımızı çevrenizle paylaşarak birçok kişinin de bilgi sahibi olmasını sağlayabilirsiniz. 👍🏻

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.

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.

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.

Vba Editör - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Vba Editör

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.

Addins Klasörü - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Addins Klasörü

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

Fonksiyon Dosyası - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Fonksiyon Dosyası

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 Sekmesi
Geliştirici Sekmesi

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.

Eklenti aktif etmek
Eklenti aktif etmek
Fonksiyon Çağırmak
Fonksiyon Çağırmak

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.

Excel'de tanımlı fonksiyon kullanmak
Excel’de tanımlı fonksiyon kullanmak

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.

İşlev Ekle
İşlev Ekle

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.