Collection Nesnesi ile Çalışmak

Makro, formül vb.. şekilde bazı örneklerin paylaşılabileceği alan
Kullanıcı avatarı
ExcelVBA
Site Admin
Mesajlar: 10
Kayıt: 20 Haz 2023, 18:12
Lokasyon: İstanbul
Web Sitesi: https://www.excelvba.net
Meslek: Yönetim Kurulu Başkanı (Özel Sektör)
Adınız:
Soyadınız:

Collection Nesnesi ile Çalışmak

Mesaj gönderen ExcelVBA »

Excel VBA kodlarında bazı dizi tanımları işlemlerinizi Collection nesneleri ile de yapabiliyorsunuz.

Şimdi biraz Collection Nesnesinden bahsedelim.

Collectionun özelliklerine bakalım önce,

.Add = Koleksiyonumuza yeni bir veri ekler.
.Count = Koleksiyon içerisindeki toplam veri sayısını bildirir.
.Item = Koleksiyon içerisindeki bir veriyi belirtmekte/ifade etmekte kullanılır.
.Remove = Koleksiyon içerisindeki verileri siler.

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
	.Add "Makrolar"
	.Add "ExcelVBA.Net"
End With
MsgBox evn.Item(2)
End Sub
Kod parçası sonucunda alacağınız yanıt "ExcelVBA.Net" olacaktır. Çünkü evn koleksiyonundaki ikinci veriyi çağırmak istedik. 1 yazsaydık "Makrolar" sonucunu alacaktık.

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
    .Add "Makrolar"
    .Add "ExcelVBA.Net", , 1
End With
MsgBox evn.Item(2)
End Sub

Bu kez kodda biraz değişiklik yaparak ikinci satırdaki eklemede , , 1 yaptık. Bunun anlamı koleksiyona bir veri eklerken koleksiyonda eklenen verinin bulunacağı yeri belirlemek. İlk olarak yazdığımız veriden sonra yazdığımız "ExcelVBA.Net" verisinin kendisinden bir önceki veriden önde yer almasını istedik.

Add ( Item, Key, Before, After )
Yani;
Ekle ( Nesne, Anahtar, Öncesi, Sonrası )

Bu kodun mesajı yine "ExcelVBA.Net" olacaktır.

Örneklerimizi biraz daha genişletelim:

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
    .Add "Dosya"
    .Add "Makrolar"
    .Add "Excel"
    .Add "ExcelVBA.Net", , 3
End With
MsgBox evn.Item(3)
End Sub
Bu mesajı yanıtı da yine "ExcelVBA.Net" olacak. Burada .Add "ExcelVBA.Net", , 3 satırımızda üçüncü veriden önce yer alacağını belirttik. Kod satırını .Add "ExcelVBA.Net", , , 2 olarak değiştirseydik ;

Ekle("ExcelVBA.Net",Anahtar, Öncesi, sonrası ) mantığına göre
Add("ExcelVBA.Net",,,2) yani ikinci veriden sonrakine yerleştir demiş oluyoruz. Mesaj sonucumuz bu düzende de farklı olmayacaktır.

Şimdi Sayfa içerisinden koleksiyonumuza veri almaya bir bakalım:

Kod: Tümünü seç

A1 'e "İçerik" yazalım
A2 ' ye "Excel"
A3 ' e "Excel Fonksiyon"
A4 ' e "Excel Makro"
A5 ' e "Excel VBA"
A6 ' ya "ExcelVBA.Net" yazalım.

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To 10
    .Add Cells(i + 1, 1).Value ' 1. satırda başlık olduğunu düşündük, 2 den başlattık
Next i
End With
MsgBox evn.Item(3)
End Sub
Kod parçamız bize sayfamızın A4 hücresindeki veriyi mesaj olarak verecektir.

Örneğin koleksiyona aldıklarımızı şimdi de başka yere taşıyalım:

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To 10
    .Add Cells(i + 1, 1).Value ' 1. satırda başlık olduğunu düşündük, 2 den başlattık
Next i
End With
For a = 1 To evn.Count ' Koleksiyon içerisindeki veri sayısı alınıyor
Cells(a + 1, 5) = evn.Item(a) ' E sütununa denk gelen kodlama
Next a
End Sub
Bu kod parçası koleksiyon içindeki verilerin E sütununda 2.sıradan aşağıya doğru listelenmesini sağlayacaktır. Cells(a + 1, 5) kısmındaki + 1 eki, 2. sıradan başlaması gerektiğini belirliyor. a değişkeninin döngümüzde başlangıç değeri 1 'dir. 1 + 1 = 2 mantığındadır. , 5 de E sütununu ifade etmek için kullanıldı.

Add, Item ve Count özelliklerini sanırım algıladık. Remove özelliği ile neler yapabiliriz bir bakalım :

Yine verilerimizi hücrelerimize yazalım

Kod: Tümünü seç

A1 'e "İçerik
A2 ' ye "Excel"
A3 ' e "Excel Fonksiyon"
A4 ' e "Excel Makro"
A5 ' e "Excel VBA"
A6 ' ya "ExcelVBA.Net"
Sonra aşağıdaki kod parçamızı test edelim.

Kod: Tümünü seç

Sub Test()
Dim evn As Collection
Set evn = New Collection
With evn
For i = 1 To Range("A65536").End(3).Row
    .Add Cells(i, 1).Value  'Başlık satırı ile birlikte aldık
Next i
End With
evn.Remove (1) 'başlık satırını koleksiyon içinden sildirdik.
For a = 1 To evn.Count ' Koleksiyon içerisindeki veri sayısı aldık
Cells(a, 5) = evn.Item(a)  ' E sütununa denk gelen kodlama ile sayfamıza aktardık
Next a
End Sub
Bu örnekte koleksiyonumuz içinde 1 nolu sıradaki veriyi yani başlığımızı silmiş oluyoruz.