Vlookup Fonsiyonunda Array(dizi) Kullanımı

Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Vlookup fonksiyonunda Table_Array olarak array(dizi)'ı nasıl kullanabiliriz?

Örneğin,

Combobox'dan bir ayı seçtiğimde bana seçtiğim ayın gün sayısını Textboxda göstermesi gibi.

ay=array("Ocak","Şubat","Mart"...)
gün=array("31","28","31"...)

Texbox1.Value=WorksheetFunction.VLookup(Combobox1.Value,array1??,2,False)

Çok basittir ama şu an aklıma bir çözüm gelmedi.
 
Son düzenleme:
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Valla Sayın Ripek ben hiçbişe anlamadım bu sorudan.:???:
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Sn.alpi

Ekteki dosyadaki gibi bir çalışma yapmak istiyorum.

Burada Vlookup a2:b13 aralığından değilde array(dizi)'dan bulmasını ve 2.değerini yazmasını istiyorum.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Excel sayfasındaki verileri sayfaya yazmak istemiyorsunuz bunu kodlara dahil ederek arama yapmak istiyorsunuz ve değişken olarakda dizi kullanmak istiyorsunuz yanlış anlamadıysam.
Şöyle yapabilirsiniz;
Kod:
Dim Dizi(11, 1)
Private Sub ComboBox1_Change()
    TextBox1.Value = WorksheetFunction.VLookup(ComboBox1.Value, Dizi, 2, False)
End Sub
Private Sub CommandButton1_Click()
    Unload Me
End Sub
Private Sub UserForm_Initialize()
    For i = 0 To 11
        Dizi(i, 0) = MonthName(i + 1)
        ComboBox1.AddItem MonthName(i + 1)
    Next
    Dizi(0, 1) = 31
    Dizi(1, 1) = 28
    Dizi(2, 1) = 31
    Dizi(3, 1) = 30
    Dizi(4, 1) = 31
    Dizi(5, 1) = 30
    Dizi(6, 1) = 31
    Dizi(7, 1) = 31
    Dizi(8, 1) = 30
    Dizi(9, 1) = 31
    Dizi(10, 1) = 30
    Dizi(11, 1) = 31
End Sub
Bu kodları ekteki dosyanızdaki formun kod editörüne yazınız.
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Sorumu doğru anlamışsınız ama kodlarını çalıştıramadım.Siz bu kodları denediniz mi?
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Userforma aşağıdaki kodu yazın.

Kod:
Private Sub UserForm_Initialize()
For a = 1 To 12
ComboBox1.AddItem Format(1 & "." & a & "." & 2006, "mmmm")
Next
End Sub
Comboboxada aşağıdaki kodu yazın.

Kod:
Private Sub ComboBox1_Change()
TextBox1 = Day(DateSerial(2006, ComboBox1.ListIndex + 2, 1) - 1)
End Sub
Not:comboboxun rowsource özelliğine yazdığınız aralığı silmeyi unutmayın.
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Sn.Leventm ve Sn.alpi teşekkür ederim.

Verdiğiniz kodlar işime yaradı.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Ama sizin sorunuza bir cevap olmadı aslında, size bir arrayın içinden bir veri seçildiğinde bunun kaçıncı veri olduğunu bulan bir fonksiyon lazım. Örneğin

ay=array("Ocak","Şubat","Mart"...)

Burada ocak seçildiğinde bunun dizinin kaçıncı elemanı olduğunu bulmanız gerekiyor. Bu konuyu biraz araştıralım.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Sayın Levent bu sorunun cevabını bilmiyorum eğer cevap sizde varsa öğrenmek isterim.
 

Ali

Özel Üye
Katılım
21 Temmuz 2005
Mesajlar
7,919
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Excel hücresinde A1'e yazdığın değere göre ayları bulunabilir ama tersten işliyormu bilmiyorum.

=ARA(A1;{1;2;3;4;5;6;7;8;9;10;11;12};{"Ocak";"Şubat";"Mart";"Nisan";"Mayıs";"Haziran";"Temmuz";"Ağustos";"Eylül";"Ekim";"Kasım";"Aralık"})

Bunu koda uyarlamak lazım.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sayın Levent bu sorunun cevabını bilmiyorum eğer cevap sizde varsa öğrenmek isterim.
Cevabını bende bilmiyorum. Array şeklinde bir dizi tanımlanırsa sonuca ulaşamadım ama dizi aşağıdaki gibi tanımlanırsa sonuç elde edebildim.

Kod:
Sub bul()
Dim ay(12)
For a = 1 To 12
ay(a) = MonthName(a)
Next
MsgBox WorksheetFunction.Match("Aralık", ay(), 0) - 1
End Sub
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
...seçildiğinde bunun dizinin kaçıncı elemanı olduğunu bulmanız gerekiyor. Bu konuyu biraz araştıralım.
Sn.leventm

Olay aslında tam sizin anlattığınız gibi.Ama ben şu anki sorunumu aşağıdaki şekilde hallettim.Ama araştırılması gereken bir konu.

Kod:
Dim Dizi(11, 1) As Variant
Sub DiziOlustur()
    For i = 0 To 11
          Dizi(i, 0) = MonthName(i + 1)
    Next
    Dizi(0, 1) = 31
    Dizi(1, 1) = 28
    Dizi(2, 1) = 31
    Dizi(3, 1) = 30
    Dizi(4, 1) = 31
    Dizi(5, 1) = 30
    Dizi(6, 1) = 31
    Dizi(7, 1) = 31
    Dizi(8, 1) = 30
    Dizi(9, 1) = 31
    Dizi(10, 1) = 30
    Dizi(11, 1) = 31
End Sub

Sub  Göster()
Call DiziOlustur
MsgBox WorksheetFunction.VLookup(Combobox1.Value, Dizi, 2, False)
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Çözüm çok basitmiş.

Kod:
Sub bul()
deg = Array("a", "b", "c", "d", "e")
MsgBox WorksheetFunction.Match("d", deg, 0)
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu durumda sorunuzun çözümü aşağıdaki gibi oluyor.

Kod:
ay=array("Ocak","[COLOR=black]Şubat[/COLOR]","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık")
gun=array(31,28,31,30,31,30,31,31,30,31,30,31)
deg=worksheetfunction.match(combobox1,ay,0)
textbox1=gun(deg)
Not: Bu arada şubat ayı 29 gün çekerse bunu kod içinde değiştirmeniz gerekir.
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
İşte bu......

Teşekkürler.
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Tebrikler sayın Levent. Sayenizde öğrenmiş olduk.
 

Ali

Özel Üye
Katılım
21 Temmuz 2005
Mesajlar
7,919
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Bende kaçıncı fonksiyonu ile çözüm buldum koda adapte ediyordum ama Levent Bey yine hızlı çıkmış. Teşekkürler Levent Bey.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Rica ederim arkadaşlar bende uğraşırken yeni bir şeyler daha öğrenmiş oldum, beni yanıltan match fonksiyonu içinde diziyi ay() şeklinde göstermiş olmam oldu, halbuki () parantezlerine gerek yokmuş. Yukarıdaki örneklere dikkat ederseniz eğer diziyi dim olarak tanımlamışsanız match fonksiyonu içinde ay() şeklinde kullanmak gerekiyor. Array kullanımında parantezlere gerek yok.
 
Üst