Excel'de VBA Dizileri Nedir?
Bir değişken tanımlayıp bir değer depoladığımızda, belirli bir anda yalnızca bir değer tutabilir. Değişkende birden fazla değer depolamak için, değişkeni bir dizi değişkeni olarak bildirmeli ve farklı değişkenler oluşturmak yerine ona aynı veri türünden çok sayıda değer atamalıyız. Örneğin, 100 üründen oluşan bir listeniz olduğunu varsayalım. Aynı veri türünden 100 farklı değişken oluşturmak yerine, dizi yöntemiyle tek bir değişken oluşturabilir ve 100 ürünün hepsini aynı değişkene atayabiliriz.
Önemli Noktalar
- VBA Dizileri tek bir değişken adı içerisinde birden fazla değeri depolayabilir.
- Beş tür VBA dizisi vardır: Statik, Dinamik, Tek Boyutlu, İki Boyutlu ve Çok Boyutlu Dizi
- REDIM ifadesiyle, makronun çalışma zamanı sırasında dizinin uzunluğunu tanımlayabiliriz. Ancak, dizinin yalnızca üst sınırını değiştirebiliriz, alt sınırını değiştiremeyiz.
- Tek boyutlu bir dizi, değerleri bir satırdan veya sütundan alabilir.
- İki boyutlu bir dizi hem satırlara hem de sütunlara erişebilir.
- Bir dizi hücre başvurusu bir satır numarasıyla başlar, ardından ilişkili sütun numarası gelir.
VBA Dizilerinin Özellikleri
VBA dizilerinin özellikleri aşağıdaki gibidir:
- Bir dizi değişkeninde, birden fazla değer aynı veri türüyle birlikte saklanabilir. Bu, verileri tutabilen ayrı bir bellek birimi oluşturmanın basit bir yoludur.
- Dizilerin iki türü vardır, Tek Boyutlu ve İki Boyutlu.
- Bir dizi statik veya dinamik olabilir. Statik bir dizide, dizinin sınırını tanımlarız, oysa dinamik bir dizide sonsuz sayıda satır ve sütun depolayabiliriz.
- Statik dizinin boyutunu sıfırlayamayız, ancak dinamik bir dizide, kodun içindeyken bunu sıfırlayabiliriz.
VBA'da Dizileri Bildirme
Bir dizi değişkeni bildirmek, normal bir değişken bildirmekten biraz farklıdır. Dizi değişkenleri bildirilirken Matematik Matrisi Kuralı uygulanır.
Örneğin, String veri türünden iki değeri tutacak bir dizi bildirmek istiyorsanız , dizi değişkenini aşağıdaki gibi bildirebiliriz.

“k” harfi değişken ismi olup, parantez içerisinde dizinin limitini 1 olarak tanımladık.
VBA'da dizi aralığı 0'dan başlar, dolayısıyla iki değer atamak için değeri 1 olarak verdik.
Bu dizi değişkenlerine değer atamak için, bunları aşağıda gösterildiği gibi atayabiliriz:

İlk değer olan “Merhaba”, parantez içindeki dizinin konumu 0 olacak şekilde “k” değişkenine atanır ve ikinci değer olan “Hi” ise parantez içindeki sayı belirtilerek “k” değişkenine atanır.
Bu iki değişken değerini göstermek için aşağıdaki görseldeki mesaj kutusunu kullanabiliriz.

Aynı değişkenin iki değerini göstermek için iki mesaj kutusu kullandık. Makroyu çalıştırdığımızda, birbiri ardına aşağıdaki mesaj kutularını alırız.
İlk Mesaj Kutusu İkinci Mesaj Kutusu

Yukarıdaki kodda diziyi statik olarak tanımladık, yani dizinin boyutunu çok önceden tanımladık. Ancak dizinin boyutundan emin değilsek dinamik diziler kullanabiliriz.
VBA Dizilerinin Türleri
VBA dizilerinin temel olarak 5 türü vardır ve bunlar aşağıdaki gibidir:
- Statik Dizi
- Dinamik Dizi
- Tek Boyutlu Dizi
- İki Boyutlu Dizi
- Çok Boyutlu Dizi
Bunları teker teker pratik bir örnekle ele alacağız.
1 – Statik Dizi
Statik dizi, sabit uzunluktaki bir diziden başka bir şey değildir. Bir dizi tanımladığımızda, dizinin uzunluğunu önceden belirleriz.
A1:A5 hücrelerinde beş ürün bilgisini depolamamız gerektiğini varsayalım. Öncelikle sabit uzunluğu 0 ile 4 arasında olan değişken dizisini aşağıdaki gibi tanımlamalıyız.

Dizinin uzunluğu şu şekildedir.

Daha sonra dizi değişkenine ürün adlarını aşağıdaki görselde gösterildiği gibi atayabiliriz.

Yukarıda atanan değerleri hücrelere depolamak için başka bir değişkenle FOR NEXT döngüsünü kullanabiliriz .

Bu, aşağıdaki resimde gösterildiği gibi değeri depolayacaktır.

2 – Dinamik Dizi
Dinamik dizi türü, çalışma zamanı sırasında dizileri yeniden boyutlandırmamıza olanak tanır. Örneğin, gelecek ay pazara kaç ürünün gireceğinden emin değiliz, bu nedenle bu durumda çalışan listesini tutacak dizinin boyutunu gerçekten tanımlayamayız.
Dinamik yapıdaki diziyi bildirmek için, statik diziyi bildirirken kullandığımız tekniğin aynısını, ancak bu kez boş parantez kullanarak kullanmamız gerekir.

Parantez içerisinde görebileceğiniz gibi herhangi bir alt sınır (LBOUND) veya üst sınır (UBOUND) girmedik.
REDIM Deyimini Kullanın
Değişkeni tanımladıktan sonra dizinin boyutunu değiştirmek istediğimizde aşağıda gösterildiği gibi REDIM anahtar kelimesini kullanmalıyız.

Yukarıdaki kodda görebileceğimiz gibi, dizi değişkeninin alt sınırını belirtmedik. VBA REDIM ifadesini kullandığımızda , dizi değişkeninin alt sınırını değiştirmemize izin verilmez.
Artık dizi değişkenine 5 değer atayabiliriz.

Verileri hücrelerde saklamak için aşağıdaki döngüyü kullanın.


Bu, A1'den A5'e kadar olan hücrelerdeki değerleri depolayacaktır.
Ancak çalışma zamanı sırasında bir ürün daha eklememiz gerektiğinde aşağıdaki gibi başka bir REDIM ifadesini kullanabiliriz.

Makroyu çalıştırdığımızda sadece 6. pozisyona , yani A6 hücresindeki Guava'ya atanan son değeri alacağız.

Bunun sebebi REDIM ifadesini ikinci kez kullandığımızda dizi değişkenine bellek tahsisi yapması ve daha önce atanmış tüm değerlerin silinmesidir.
REDIM PRESERVE İfadesini kullanın
Preserve anahtar kelimesi, dizi değişkenine yeni değerler atadığımızda tüm eski değerleri korumamıza yardımcı olur.

Bu kodu çalıştırdığımızda, 6 ürün değerinin tamamını saklaması gerekir.

3 – Tek Boyutlu Dizi
Adından da anlaşılacağı gibi, tek boyutlu bir dizi yalnızca bir satır veya sütundaki verileri tutabilir.
Örneğin, şehir adlarını ilk sütuna, yani A sütununa ekleyeceğiz. Aşağıdaki kod referansımız içindir.

Kodu çalıştırdığımızda şehir isimlerini A sütununa ekleyecektir.

Ancak bu şehirlerin karşısına ülke adlarını eklememiz gerektiğinde bunu yapamayız çünkü tanımladığımız dizi tek boyutludur.
4 – İki Boyutlu Dizi
Bu, tek boyutlu dizinin gelişmiş bir versiyonudur; yani; bu dizi türünü kullanarak hem satırlara hem de sütunlara erişebiliriz.
Önceki örnekte şehir adlarına karşı ülke adları eklememiz gerektiğini varsayalım. İlk olarak, aşağıdaki resimde vurgulandığı gibi dizi boyutunu tanımlamamız gerekir.

Parantez içerisinde sütun sınırını 1 ila 2 olarak ekledik, yani iki sütuna ve beş satıra erişim sağlayalım.
İlk satır için değeri aşağıdaki gibi atayabiliriz.

Parantez içerisinde (1,1 ) yani birinci satır birinci sütundan bahsetmiştik.
Daha sonra Londra şehrine karşı , ülkeyi gösterildiği gibi tedarik edebiliriz.

Parantez içerisinde (1,2) yani birinci satır ikinci sütundan bahsetmiştik.
Bu şekilde aşağıdaki görselde görüldüğü gibi beş şehrin tamamı için şehir ve ülke isimlerini verebiliriz.

Bu değerleri hücrelere eklemek için aşağıdaki gibi iç içe döngüler kullanmamız gerekiyor.

Bu, değerleri gösterildiği gibi ekleyecektir.

5 – Çok Boyutlu Dizi
Bu, birden fazla satıra ve birden fazla sütuna erişecek bir dizidir. Varsayalım ki, her şehir ve ülke için bir sıralama eklememiz gerekiyor, o zaman bir sütuna daha sahip olmalıyız.
Bunun için sütun uzunluğunu 1 ile 3 arasında tanımlayabiliriz.

Daha sonra değerleri aşağıda gösterildiği gibi atayabiliriz.

Dizi parantezinin içinde, ilk sayı satırı, ikinci sayı ise sütunu temsil eder. Tüm şehirler için sıralama numaraları atayın.

Şimdi yukarıdaki değerleri eklemek için döngüyü biraz değiştirelim.

İç içe döngü uzunluğunu 1'den 2'ye, 1'den 3'e değiştirdik.
Bu, aşağıdaki gibi değerleri ekleyecektir.

Dikkat Edilmesi Gereken Önemli Noktalar
- VBA'da dizi uzunluğu 0'dan başlar.
- Bir dizi yalnızca bir veri türünü içerebilir.
- VBA kodlaması yaptığınızda dosyayı Makro Etkin çalışma kitabı olarak, yani XLSM dosya uzantısıyla kaydetmeniz gerekir.
- REDIM ifadesini ikinci kez kullandığımızda dizinin hafızasından tüm eski değerler silinecek ve boş değer dönecektir.
- REDIM Preserve, çalışma zamanı sırasında değerleri yeniden atarken tüm eski değerleri alır.
