VBA Koleksiyonu, bir değişkene atanabilen bir veri türüdür. Değişkeni kullanarak bir dizi öğeyi depolayabilir veya toplayabiliriz. Excel'de VBA koleksiyonunu kullanarak, Koleksiyon nesnesinin öğelerine kolayca erişebilir ve bunları işleyebiliriz.
VBA, Workbooks, Worksheets, Range ve Cells koleksiyonları gibi yerleşik koleksiyonlarla birlikte gelir. Collection veri türü, bir koleksiyonun öğelerini gruplamak için kullanılır, VBA'daki dizilere benzer ancak biraz farklıdır.
Bu yazımızda VBA Collection'ın nasıl kullanılacağını görelim.
ÖNEMLİ NOKTALAR
- VBA koleksiyonu, erişilebilen ve değiştirilebilen bir dizi benzer değeri depolamak için kullanılan bir nesnedir.
- VBA Collection kullanarak, toplanan değerlere, ya indeks numarasını girerek ya da verilen anahtar değerini girerek ulaşabiliriz.
- Collection nesnesine atanan toplam değerleri Collection dot count metodunu kullanarak bulabiliriz.
- VBA Collection nesnesinin yeni bir örneğini oluşturarak koleksiyonu null değerine sıfırlayabiliriz.
Koleksiyonlar ve Diziler
Koleksiyonlar ve Diziler bazı benzer özelliklere sahiptir. Ancak aralarında birkaç fark vardır. Şimdi bunlara bir bakalım.
| Ayrıntılar | Sıralamak | Koleksiyon |
|---|---|---|
| Boyut | Diziler çok boyutludur. Diziyi birkaç boyutla tanımlayabiliriz | Koleksiyonlar tek boyutludur. |
| Değişkenin Boyutu | Dizilerin boyutuna, onlara değer atamadan önce karar vermeliyiz. Verinin boyutundan çok önceden emin olmamız gerekir. "ReDim" anahtar sözcüğünü kullanarak kodun ortasında dizinin boyutunu ayarlayabiliriz, ancak önceki dizi değerlerini kaybetmek istemiyorsanız "Preserve" kelimesini kullanmamız gerekir. | Koleksiyonların herhangi bir boyuta ihtiyacı yoktur, onlara değer atamaya devam edebiliriz. Burada verinin boyutunun farkında olmamıza gerek yok. |
| Düzenlenebilir | Diziler değiştirilebilir | Koleksiyonlar salt okunurdur |
| Veri Türü | Bir dizi, dizi bildirilirken değişkene atanmış tek bir veri türünü kabul eder. Tüm değerler aynı veri türünde olmalıdır. | Koleksiyonda istediğimiz veri tipini atayabiliyoruz ve her türlü veriyi kabul ediyor. |
| Verilerin Yerini Belirleme | Diziler, döngüye girip belirli değeri bulmak için döngü koduna ihtiyaç duyar | Koleksiyonlar, anahtar adını kullanarak gerekli verileri getirebilir. |
VBA'da Koleksiyon Nesnesi Nasıl Oluşturulur?
VBA'da bir koleksiyon nesnesi oluşturmak için aşağıda listelenen adımları izleyin.
Adım 1- Öncelikle Visual Basic Editor penceresine gidin ve ardından makroya isim vererek alt prosedürü başlatın.

Adım 2 – Daha sonra DIM anahtar sözcüğünü kullanarak bir değişken tanımlayın.

Adım 3 – Daha sonra tanımlı değişken için aşağıdaki gibi koleksiyon nesnesini atamamız gerekiyor.

Adım 4 – Koleksiyon bir nesne değişkeni olduğundan, Set anahtar sözcüğünü kullanmamız ve ardından koleksiyonun örneğini aşağıdaki gibi oluşturmamız gerekir.

Adım 5 – Şimdi, MyCollection koleksiyon değişken adını kullanarak koleksiyona değerler atamaya başlayabiliriz.
Koleksiyonla birlikte kullanılabilen yöntemleri görmek için koleksiyon adını MyCollection girin ve IntelliSense listesini görmek için noktayı (.) girin.

Gördüğümüz gibi, Ekle, Say, Öğe ve Kaldır olmak üzere 4 yöntemimiz var.
Adım 6 – Add metodunu kullanarak koleksiyon listesine birkaç öğe ekleyelim .
Koleksiyon adını girdikten sonra add metodunu seçerek add metodunun sözdizimini görebilirsiniz.

add metodunun sözdizimi 4 argümana sahiptir. Bu 4 argümandan ilki zorunludur ve kalan 3'ü isteğe bağlıdır.
Öğe – Bu argümanda, koleksiyon değişkenine atadığımız değeri vermemiz gerekiyor.
[Anahtar] – Bu argümanda, verilen öğe adına anahtar adını sağlamamız gerekir, böylece daha sonra bu anahtar adını kullanarak öğeyi alabiliriz.
Bu iki argüman başlangıç için yeterli.
Adım 7 – Sonra, Öğe argümanının altına bir değer girin .

Adım 8 – Daha sonra anahtar adını “KA” olarak verin .

Adım 9 – Şimdi, ileti kutusunda atanan değeri gösterelim. MsgBox fonksiyonunu girin ve ardından koleksiyon değişken adını girin.

Adım 10 – Koleksiyon değişkeninin değerini almak için, atanan değerin indeks numarasını vermemiz gerekir. Koleksiyon değişkenine yalnızca bir değer atadığımız için, indeks numarasını 1 olarak verin.
Sub Collection_Object()
Dim MyCollection As Collection
Set MyCollection = New Collection
MyCollection.Add "Bangalore", "KA"
MsgBox MyCollection(1)End Sub
Bu kodu çalıştıralım, bu kodu çalıştırdığımızda mesaj kutusunda aşağıdaki gibi atanan değeri göreceğiz.

Koleksiyon değişkeni için mesaj kutusunda, atadığımız değer yalnızca bir olduğundan indeks numarasını 1 olarak verdik. Ancak, koleksiyon değişkenine değer atarken verilen indeks numarasından ayrı olarak anahtar adını da verebiliriz.

Sub Collection_Object()
Dim MyCollection As Collection
Set MyCollection = New Collection
MyCollection.Add "Bangalore", "KA"
MsgBox MyCollection("KA")End Sub
Bu aynı zamanda koleksiyon değişkenine atanan değeri de döndürecektir.

Bir Koleksiyondan Tüm Öğeleri Kaldırma
Değerlerin bir Koleksiyon nesne değişkenine nasıl atanacağını gördük. Benzer şekilde, atanan değerleri koleksiyondan da kaldırabiliriz.
Örneğin aşağıdaki atanmış değerlere bakın.
Capital_Cities.Add “Mumbai”, “MH”
Capital_Cities.Add “Bangalore”, “KA”
Capital_Cities.Add “Ahmedabad”, “GJ”
Capital_Cities.Add “Bhopal”, “MP”
Capital_Cities.Add “Jaipur”, “RJ”
Capital_Cities koleksiyon değişkenine 4 değer atadık. Koleksiyon nesnesinin 3. atanmış değerinin değerini kaldırmak için , koleksiyonun dizin numarasını izleyen Remove metodunu kullanabiliriz .

Daha sonra remove metodunun indeks argümanına sayı olarak 3 değerini verelim.

Bu, 3. atanan değeri kaldıracak ve sonraki tüm pozisyonlar yukarı kaydırılacak ve 4. konumlandırılan değer artık 3 olacak.
Benzer şekilde, tüm koleksiyon değerlerini kaldırmak için koleksiyonu, koleksiyon nesnesinin yeni bir örneğine sıfırlamamız gerekir.

Bir Koleksiyona Öğe Ekleme
Hindistan'daki bazı eyaletlerin başkentlerini içeren bir VBA Koleksiyonu oluşturmamız gerektiğini varsayarak, koleksiyon nesnesi değişkenini kullanacağız.
Öncelikle başkentleri tutacak bir değişken tanımlayalım ve veri türünü Collection olarak atayalım .

Daha sonra set anahtar sözcüğünü kullanarak koleksiyonun bir örneğini oluşturun.

Unutmayın, bu yöntem koleksiyonun örneğini oluşturmanın gecikmeli bir yöntemidir. Ancak, bir değişken tanımlayabilir ve koleksiyon nesnesinin örneğini aşağıdaki gibi tek bir satırda oluşturabiliriz.

Bu yöntem , koleksiyon nesnesinin veri türünü atamadan önce sadece New kelimesini ekleyerek bir satır daha kod kısaltmamızı sağladı .
Şimdi koleksiyon nesnesi değişkeni name'i kullanacağız ve başkent isimlerini atayacağız. Örneğin, Maharashtra eyaleti için başkent Mumbai'dir ; bu nedenle öğeyi Mumbai olarak ekleyebiliriz .

Anahtar için MH durumunun kısa kodunu verebiliriz .

Yani, artık Maharashtra'nın başkentini bulmamız gerektiğinde, MH kısa kodundaki Capital_Cities koleksiyon değişkenine sormamız yeterli ve Mumbai başkent adını döndürecek .
Görüldüğü gibi bazı başkent isimleri atadık ve aşağıda sizin için hazırlanmış tam kod yer alıyor.
Sub Collection_Object_Add_Item()
Dim Capital_Cities As Collection Set MyCollection = New Collection Capital_Cities.Add "Mumbai", "MH" Capital_Cities.Add "Bangalore", "KA" Capital_Cities.Add "Ahmedabad", "GJ" Capital_Cities.Add "Bhopal", "MP" Capital_Cities.Add "Jaipur", "RJ"
End Sub
Birden fazla değer atadığımızda, her bir koleksiyonu tek tek dolaşmak ve koleksiyonun değerlerini tek tek saklamak veya almak için döngüler kullanmamız gerekir.
Örneğin, aşağıdaki kod her başkenti hücrelerde saklayacaktır.
Sub Collection_Add_Items()
Dim Capital_Cities As New Collection
Capital_Cities.Add "Mumbai", "MH"
Capital_Cities.Add "Bangalore", "KA"
Capital_Cities.Add "Ahmedabad", "GJ"
Capital_Cities.Add "Bhopal", "MP"
Capital_Cities.Add "Jaipur", "RJ"
Dim k As Long
For k = 1 To 5
Cells(k, 1).Value = Capital_Cities(k)
Next kEnd Sub
Yukarıdaki kod koleksiyon değişken değerleri arasında döngü kuracak ve değerleri hücrelerde depolayacaktır.

Benzer şekilde bunu bir soru-cevap türü olarak da kullanabiliriz; kullanıcıya eyalet kısayol kodunu girme seçeneği sunacağız ve kullanıcı girdisine bağlı olarak verilen eyaletin başkentini alacağız.
Aşağıdaki kod, girdi kutusunu kullanarak kullanıcıdan girdi almak için tasarlanmıştır.
Sub Collection_Add_Items_User_Input()
Dim Capital_Cities As New Collection Capital_Cities.Add "Mumbai", "MH" Capital_Cities.Add "Bangalore", "KA" Capital_Cities.Add "Ahmedabad", "GJ" Capital_Cities.Add "Bhopal", "MP" Capital_Cities.Add "Jaipur", "RJ" Dim State_Code As String State_Code = Application.InputBox("Which State Capital City you need?", "Enter the state short code") On Error GoTo MyValue If State_Code <> "" Then MsgBox Capital_Cities(State_Code) Else MsgBox "The state short code is wrong"
MyValue: MsgBox “Durum kısa kodu yanlış”
End If
End Sub
Bu kod bizden eyalet kısa kodunu girmemizi isteyecektir.

Öncelikle başkentini bulmamız gereken eyaletin kısa kodunu girmemiz gerekiyor. Örneğin, "MP" kısa kodunu girelim.

Daha sonra Tamam'a tıkladığımızda Madhya Pradesh'in başkenti karşımıza çıkacak.

Koleksiyon listesinde olmayan durum kısa kodunu girdiğimizi varsayalım; o zaman, Verilen durum kısa kodu yanlış mesaj kutusunu alacağız .

Bir Koleksiyonun Öğelerine Erişim
Koleksiyon değişkenine değerler atandıktan sonra, bu değerlere, değerleri atarken verilen indeks numarasını veya anahtar sözcüğü kullanarak erişebiliriz.
Örneğin aşağıdaki atanmış değerlere bakın.
Capital_Cities.Add “Mumbai”, “MH”
Capital_Cities.Add “Bangalore”, “KA”
Capital_Cities.Add “Ahmedabad”, “GJ”
Capital_Cities.Add “Bhopal”, “MP”
Capital_Cities.Add “Jaipur”, “RJ”
Yukarıdaki tüm toplama değerlerinin indeks numarası ardışıktır, ilk değer 1 indeks numarasını işgal eder ve bu böyle devam eder.
Bir koleksiyon değişkeninin 1. değerine erişmek için koleksiyon değişkeni adını, parantezi açmamızı ve indeks numarasını girmemizi gerektirir.

İndeks numarasını 3 olarak verin.

Bu , bir mesaj kutusunda 3. koleksiyon değerini, yani “Ahmedabad” değerini döndürecektir .

Ancak anahtar isimlerine yani “GJ”ye dayalı olarak da koleksiyon değerlerine erişebiliriz.

Bu da bir öncekiyle aynı değeri döndürecektir, ancak bu en doğru olanıdır, çünkü indeks numarasıyla koleksiyon değerinin konumundan emin olmamız gerekir.
Bir Koleksiyonu Sıralama
Koleksiyon değerleri depolandığında, bulundukları sıraya göre indeks pozisyonunu alacaklardır. Örneğin, aşağıdaki değerlere bakın.
Index1 = Capital_Cities.Add “Mumbai”, “MH”
Index 2 = Capital_Cities.Add “Bangalore”, “KA”
Index 3 = Capital_Cities.Add “Ahmedabad”, “GJ”
İkinci konumlandırılmış değer "Bangalore"dur. Ancak, Before ve After argümanlarını kullanarak koleksiyon değerinin konumunu sıralayabiliriz.
İkinci pozisyon değerini birinci pozisyona taşımamız gerektiğini varsayarak Add metodunun Before argümanını kullanmamız gerekiyor.

Before argümanı için, ilk endeks numarasından önce hareket etmek için endeks numarası olarak 1 verdik. Yani, değeri almaya çalıştığımızda, ilk değer olarak "Mumbai" değil "Bangalore" alacağız.
Benzer şekilde değeri aşağı doğru hareket ettirmek istiyorsak Add metodunun After argümanını kullanabiliriz.
Dikkat Edilmesi Gereken Önemli Noktalar
- VBA Koleksiyonu bir Nesne veri türüdür ve dizilerden farklıdır.
- VBA Collection nesnesini tanımladığımızda, set anahtar sözcüğünü kullanmamız ve koleksiyonun yeni bir örneğini oluşturmamız gerekir. Örneğin, Set Collection Name, New Collection'a eşittir.
- Collection nesnesinde yalnızca Add metodu zorunludur.
- Koleksiyona atanan değerlerin sırasını değiştirmek için Excel'deki Koleksiyon nesnesinin Öncesi veya Sonrası argümanını kullanmamız gerekir.
- Atanmış her değer için anahtarlar benzersiz olmalıdır, aksi takdirde çalışma zamanı hatası alırız.
Koleksiyon değişkeninin boş olup olmadığını kontrol etmek için, koleksiyon nokta sayısı yöntemini kullanmamız gerekir. Örneğin, koleksiyonun boş olup olmadığını kontrol etmek için, aşağıdaki kod yardımcı olacaktır.
If Collection_Name.Count = 0 Then
MsgBox “Collection is empty”
Else
MsgBox “Collection is not empty”
End If
VBA'da koleksiyonda döngü oluşturmak için, aşağıdaki gibi FOR NEXT döngüsünü kullanmamız gerekir.
Bu kod, atanan değerler koleksiyonunda döngü oluşturacak ve verileri hücrelerde depolayacaktır.
Koleksiyonu VBA'da yazdırmak için Debug.Print komutunu ve ardından koleksiyon değişken adını kullanmamız gerekir.
Bir koleksiyon, herhangi bir referans ayarı olmadan kullanılabilen yerleşik bir nesnedir. Ancak, sözlük, nesne referans türünü Microsoft Scripting Runtime olarak ayarlamamızı gerektirir .
