Merhabalar,
Excelde en çok kullanılan formüllerin başında gelen düşeyara formülünü hücrelere yazmadan makro ile nasıl yapılabileceğine göz atalım.Eğer ki düşeyara formülünü yeni kullanıyorsanız Excelde Düşeyara (VLOOKUP) Formülünü Nasıl Kullanırım yazımı okumanızı tavsiye ederim.
Makro yazarken düşeyara formülünü 2 şekilde kullanabiliriz,
1- Application.VLOOKUP(Aranacak_Veri, Aranacak_Tablo_Yeri, Bulunursa_Getirilecek_Sütun_Numarası, Eşleştirme_Şekli)
yada
2- Application.WorksheetFunction.VLOOKUP(Aranacak_Veri, Aranacak_Tablo_Yeri, Bulunursa_Getirilecek_Sütun_Numarası, Eşleştirme_Şekli)
Konunun daha kolay anlaşılması için Düşeyara Formülünün Detaylı Örnekleri yazımda yaptığım örnekleri burada makrolarla yapacağım.
Örnek-1 Aşağıda ki satış raporu tablosundan “Yasin” isimli personelin aylık sattığı ürün sayısını mesaj kutusu (MessageBox) ile gösterelim.
Bu işlem için kullanacağımız kod:
[code lang=”vb”]
Sub DUSEYARA()
Dim isim As String
isim = “Yasin”
urun_miktari = Application.WorksheetFunction.VLookup(isim, Sayfa1.Range(“B1:D12”), 3, False)
MsgBox “Aylık Satılan Ürün Miktarı : ” & urun_miktari
End Sub
[/code]
Yukarıdaki kod blogumuzda String tipinde bir isim değişkeni tanımladık ve ona “Yasin” değerini atadık ve düşeyara formülümüzün sonucunu “urun_miktari” adlı değişkene aktardık.
“urun_miktari” değişkenine herhangi bir tip tanımlaması yapmadığımız için default olarak “variant” tipinde olacaktır.Variant veri tipi hafızada gereğinden fazla yer kaplayacağı için değişken tipi tanımlanması tavsiyedir.
Aslında normal düşeyara formülünün kullanımından bir farkı yok.Yalnızca yazdığımız kısım ve cümleler farklılık gösteriyor.
Örnek-2 Satış Raporu tablosundan “Yasemin” isimli personelin görevli olduğu reyonu bulalım.
Kodlarımızda kullanacağımız sütunları kırmızı tablo ile belirttim ve sütun index numaralarını yazdım.
“Yasemin” isimli personelin görevli olduğu reyonu bulmak için kullanacağımız kod aşağıdaki gibidir.
[code lang=”vb”]
Sub DUSEYARA()
Dim isim As String
Dim urun_miktari As String
isim = “Yasemin”
urun_miktari = Application.WorksheetFunction.VLookup(isim, Sayfa2.Range(“B1:E12”), 4, False)
MsgBox “Reyon : ” & urun_miktari
End Sub
[/code]
İlk örnekteki kod bloğumuz ile bu kodumuz arasında yalnızca seçtiğimiz sütun (“B1:E12”) ve bulunduğu zaman gösterilecek olan sütun index numarası (4.sütun) değişmiştir.
Örnek-3 Satış Raporu Tablosundan Personel ID numarasına göre Personel Bilgileri Getirme
H1 hücresine gireceğimiz Personel ID numarasına göre Personelin tüm bilgilerini mesaj kutusu (MessageBox) ile gösterelim. Tablomuzda ki tüm sütunlarımızı kullanacağız ve arama yapacağımız sütunumuz en baştaki Personel ID sütunu.
Bu sorgulamada kullanacağımız kod bloğumuz aşağıdaki gibidir.
[code lang=”vb”]
Sub DUSEYARA()
Dim personel_ID As Double
Dim isim, satis_miktari, urun_miktari, reyon, mesaj As String
personel_ID = Sayfa2.Range(“H1”).Value
isim = “Personel İsmi : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 2, False)
satis_miktari = “Satış Miktarı :” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12″), 3, False) & ” TL”
urun_miktari = “Ürün Miktarı : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 4, False)
reyon = “Reyon : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 5, False)
mesaj = “Personel Detayları : ” & vbNewLine & isim & vbNewLine & satis_miktari & vbNewLine & urun_miktari & vbNewLine & reyon
MsgBox mesaj
End Sub
[/code]
Yukarıdaki kod bloğumuzda “personel_ID” değişkenine H1 hücresinden aldığımız değeri ve tüm formüllerimizin sonuçlarını bir değişkene atadık ve bu değişkenleri ” vbNewLine ” komutu ile satır satır mesaj kutusuna yazdırdık.Kod bloğumuz çalıştırıldıktan sonra sonuç aşağıdaki gibidir.
Örnek-4 3. örneğimizde H1 hücresinden aldığımız personel ID numarasını mesaj kutusu (inputbox) ile girelim
Bir önceki örneğimizde H1 hücresinde bulunan personel ID numarasını bilgi girme penceresi ile alıp düşeyara formülümüze aktaralım.
Bu örneğimizde kullanacağımız kod bloğumuz aşağıdaki gibidir.
[code lang=”vb”]
Sub DUSEYARA()
On Error GoTo HataYakalama:
Dim personel_ID As Double
Dim isim, satis_miktari, urun_miktari, reyon, mesaj As String
personel_ID = InputBox(“Personel ID numarasını Giriniz :”)
isim = “Personel İsmi : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 2, False)
satis_miktari = “Satış Miktarı :” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12″), 3, False) & ” TL”
urun_miktari = “Ürün Miktarı : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 4, False)
reyon = “Reyon : ” & Application.WorksheetFunction.VLookup(personel_ID, Sayfa2.Range(“A1:E12”), 5, False)
mesaj = “Personel Detayları : ” & vbNewLine & isim & vbNewLine & satis_miktari & vbNewLine & urun_miktari & vbNewLine & reyon
MsgBox mesaj
Exit Sub
HataYakalama:
If Err.Number = 1004 Then
MsgBox “Personel ID numarası Bulunamadı.”
ElseIf Err.Number = 13 Then
MsgBox “Geçersiz Bir Değer Girdiniz.”
End If
End Sub
[/code]
“personel_ID” değişkenimize “Inputbox” ile veri aktarılmasını sağlıyoruz.Herhangi bir hata olmasına karşı “HataYakalama” bloğu oluşturduk.Burada eğer girdiğimiz numara bulunamazsa yada girilen değer geçersiz (harf yada özel işaretler ) olursa hata verecektir.
GEÇERSİZ DEĞER AÇIKLAMASI: “personel_ID” değişkenimizi numara olarak tanımladığımız için numara dışında başka bir değer girildiği zaman hata vermektedir.
Kod bloğumuzu çalıştırıldığı zaman sonuç aşağıdaki gibi olacaktır.
Konuyla ilgili soru ve önerileriniz için iletişim sayfasını kullanabilir yada yorum bırakabilirsiniz.