VBA - Dizi Değişkeni Bildirme (Dim), Oluşturma ve Başlatma

Bu öğretici, VBA'da Dizi Değişkenlerinin Nasıl Bildirileceğini (Dim), Oluşturulacağını ve Başlatılacağını gösterecektir.

VBA Dizi Değişkeni nedir?

Bir VBA dizi değişkeni, aynı ad altında saklanan ve aynı veri türüne sahip bir değişkenler grubu olarak düşünülebilir. Bir dizi metin, sayı veya nesneleri depolayabilir.

Dizindeki bir öğeye dizin numarasını kullanarak başvurursunuz.

Dim, Static, Public veya Private anahtar sözcüğünü kullanarak başka bir değişkeni bildirdiğiniz gibi bir dizi değişkeni bildirebilirsiniz.

Statik Diziler

2 tür dizi vardır - Statik ve Dinamik. Bir Statik dizi, diziyi ilk bildirdiğinizde belirtilen boyutuyla bildirilir. Sabit Dizi olarak da adlandırılır.

1 intA(4) tamsayı olarak karart

Yukarıdaki dizi, Prosedür veya Modül düzeyinde Dim ifadesi kullanılarak bildirilir ve dizinin LBound değerini bildirmediğimiz için dizinin boyutu 5'tir.

Hayır, bu bir yazım hatası değil! Diziye 4 girilmesine rağmen Dizi boyutu 5'tir. Bunun nedeni, dizi dizinlerinin otomatik olarak sıfırdan başlamasıdır.

Dizi İndeksleri

Dizi indeksleri otomatik olarak sıfırdan başlar. Seçenek Tabanı 1 kod modülünüzün en üstünde bildirilir.

Eğer Seçenek Tabanı 1 bildirildiğinde diziler otomatik olarak 1'de başlayacaktır.

Ancak, değişkenleri bu şekilde bildirmeyi sorunlu buluyorum. Kod gözden geçirenler, dizilerin sıfırdan veya Option Base 1 bildiriminden başladığının farkında olmayabilir.

Bunun yerine, dizilerin başlangıç ​​ve bitiş konumlarını açıkça bildirmeyi tercih ederim:

1 intA(2 - 5) tamsayı olarak karart

Bunu yaptığınızda diziyi istediğiniz sayıdan başlatabileceğinize dikkat edin (yalnızca 1 veya 0 değil).

Dinamik Diziler

Dinamik Dizi değişkeni, boyutu çalışma zamanında değiştirilebilen bir dizidir. Bir boyut olmadan dinamik değişkenler bildirirsiniz.

1 intA() tamsayı olarak karart

Dizi oluşturulduktan sonra Dizinin boyutunu belirtmek için ReDim ifadesini kullanabilirsiniz.

1 Yeniden Karartma intA(2)

Dinamik bir diziyi istediğiniz zaman yeniden boyutlandırabilirsiniz. Ancak ReDim Bildirimi kullanılırken mevcut tüm değerler silinir. Mevcut dizi değerlerini korumak için şunu kullanın: ReDim Koru Bunun yerine.

1 ReDim Koru intA(2)

Dinamik bir diziyi Prosedür, Modül veya Global düzeyde bildirebilirsiniz, ancak ReDim ifadesini yalnızca bir Prosedür içinde kullanabilirsiniz.

Varyant Diziler

Varyant dizileri, üzerinde çalışılması daha kolay olan Dinamik dizilerdir.

1 Dim değişkenAdları()

Veri türünü (varyant olduğu varsayılır) veya dizi boyutunu belirtmeniz gerekmediğine dikkat edin.

Aşağıda göreceğimiz gibi, Dizi İşlevini kullanarak değişken dizileri başlatabilirsiniz (önce dizileri yeniden boyutlandırmanıza gerek yoktur)!

Bildirme Modülü ve Genel Diziler

Yukarıda gösterildiği gibi, diziler bu prosedürde kullanılmak üzere prosedürler içinde bildirilebilir:

1234 Alt StatikArray()'diziyi LBound değeri 1 ve UBound değeri 4 olarak bildirinTamsayı olarak Dim IntA(1 - 4)Alt Bitiş

Ancak Modül veya Global düzeyde de bildirilebilirler.

1234567 Seçenek Açık'diziyi LBound değeri 1 ve UBound değeri 4 olarak bildirinTamsayı olarak Dim IntA(1 - 4)Alt StatikArray()Alt Bitiş

Bu örnekte, dizi değişkeni bu kod modülü içinde herhangi bir yerde çağrılabilir. Bunun yerine, VBA Projeniz boyunca kullanılabilecek bir genel dizi bildirebilirsiniz (sonraki bölüme bakın).

Genel Dizi Bildirmek

Bir Genel Değişken bildirir gibi bir Genel Statik dizi bildirirsiniz.

1 String olarak Public strNames(3)

Bu bildirimin modülünüzün en üstünde, Option Explicit'in altında olması gerekir. Daha sonra VBA projeniz boyunca herhangi bir modül veya prosedürde kullanılabilir.

Diziyi modülün en üstünde, ancak Dim anahtar sözcüğüyle bildirirseniz, o dizinin kullanımı o bireysel modülle sınırlandırılır. Diziyi ayrı bir modülde kullanmaya çalışmak hataya neden olur.

Dizileri Başlat

Statik bir diziye aşağıdaki şekilde değerler atayabilirsiniz.

1234567891011 Alt StatikArray()'diziyi LBound değeri 1 ve UBound değeri 4 olarak bildirinTamsayı olarak Dim IntA(1 - 4)'diziyi başlatIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'dizinin 2. konumunun sonucunu hemen pencerede gösterDebug.Print IntA(2)Alt Bitiş

Yukarıdaki prosedürü çalıştırırsanız, hemen pencerede 20 değeri görüntülenecektir.

Değerleri aynı şekilde bir Dinamik Diziye de atayabilirsiniz.

12345678910111213 Alt DinamikArray()'dinamik bir dizi ilan et, ancak bağlı değerleri atlaIntA() Tamsayı olarak Dim'diziyi başlatReDim IntA(1 - 4)IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'dizinin 2. konumunun sonucunu hemen pencerede gösterHata Ayıklama.YazdırIntA(2)Alt Bitiş

Dizi İşlevi

Yine de, yalnızca değişken dizisiyle, standart yöntemi kullanmaktan daha kolay olabilecek Dizi İşlevini kullanabilirsiniz.

12 'diziyi doldurintA() = Dizi(10, 20, 30, 40)

Diziyi Döngü ile Doldur

Excel'de bir dizi hücre arasında dolaşarak da dizileri doldurabilirsiniz.

1234567891011121314151617 Alt TestDynamicArrayFromExcel()'diziyi bildirDim strNames() As String'bir aralıktaki satırları saymak için bir tamsayı bildirinTamsayı Olarak Dim n'döngü için bir tamsayı bildirDim i Tamsayı Olarak'bir aralıktaki satırları sayınn = Aralık("A1", Aralık("A1").End(xlDown)).Rows.Count'diziyi, aralıktaki satır miktarına göre yeniden ayarlayın.ReDim strNames(n)i = 0 için n içinstrNames(i) = Aralık("A1").Offset(i + 1, 0)sonraki ben'dizideki değerleri gösterMsgBox Join(strNames())Alt Bitiş

Dizileri Yeniden Başlat

Dizinizi kodunuzun herhangi bir aşamasında yeniden başlatabilirsiniz, ancak daha sonra dizinizde o konumda bulunan orijinal değeri kaybedersiniz.

1234567891011121314 Alt StatikArray()'diziyi LBound değeri 1 ve UBound değeri 4 olarak bildirinTamsayı olarak Dim IntA(1 - 4)'diziyi başlatIntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'dizinin 2. konumunun sonucunu hemen pencerede gösterDebug.Print IntA(2)'diziyi yeniden başlatintA(2)= 200Debug.Print IntA(2)Alt Bitiş

Yukarıdaki örnekte, Statik dizi, 2 konumundaki değer dışında tüm değerleri tutacaktır - bu değer 200 olarak değişecektir.

ReDim'i kullanma

Dinamik Dizi kullanıyorsanız, Dizinizin boyutunu ayarlamak için ReDim ifadesi kullanılır. Array'in boyutunu istediğiniz kadar değiştirmek için kodunuzda daha sonra ReDim deyimini kullanabilirsiniz. Aşağıdaki kod satırı, intA Dizisini 2 boyutunda olacak şekilde yeniden başlatacaktır (Unutmayın - bir Dizi dizini 0'dan başlar!)

1 Tamsayı olarak ReDim intA(1)

Yani ReDim ifadesini içeren kod aşağıdaki örneğe benzeyecektir.

1234567891011121314151617 Alt TestDynamicArray()'diziyi bildirDim intA() Tamsayı OlarakYeniden Karartma intA(2)'diziyi sayılarla doldurunintA(0) = 2intA(1) = 5intA(2) = 9'konum 1'deki sayıyı gösterDebug.Print intA(1)'boyutu değiştirmek için diziyi yeniden düzenleyinYeniden Karartma intA(3)intA(0) = 6intA(1) = 8'bu sefer konum 1'deki sayıyı gösterDebug.Print intA(1)Alt Bitiş

Yukarıdaki prosedürü çalıştırırsanız, hemen pencerede 5 değeri görüntülenir ve ardından ReDim kullanarak diziyi yeniden boyutlandırıp yeniden doldurduğumuzda 8 değeri görüntülenir. Ancak, IntA(2)'yi doldurmadığımız ve Re-Dim Preserve kullanmadığımız için dizideki o konumdaki değer kaldırılacak ve dizideki hem 3 hem de 4 konumu sıfır olacaktır.

ReDim Korumasını Kullanma

ReDim Preserve kullanırsak, dizide bulunan orijinal değerleri koruyacaktır.

1234567891011121314151617 Alt TestDynamicArray()'diziyi bildirDim intA() Tamsayı OlarakYeniden Karartma intA(2)'diziyi sayılarla doldurunintA(0) = 2intA(1) = 5intA(2) = 9'konum 2'deki sayıyı gösterDebug.Print intA(2)'diziyi yeniden düzenleYeniden Karartma intA(3)intA(0) = 6intA(1) = 8'konum 2'deki sayıyı tekrar gösterDebug.Print intA(2)Alt Bitiş

Yukarıda görüntülenen her iki mesaj kutusunda, ReDim Preserve ifadesi bu değeri o konumda tuttuğu için 9 sayısı görünecektir.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave