VBA Dizi Boyutu Nedir?
VBA'daki diziler sabit veya dinamik boyutlara sahip olabilir. Sabit boyutlu bir dizi, bildirim sırasında belirtilen önceden belirlenmiş sayıda öğeye sahipken, dinamik bir dizi çalışma zamanı sırasında boyutunu değiştirebilir.
VBA Kodu Kullanılarak Bir Dizinin Boyutu Nasıl Bulunur?
VBA kodunu kullanarak bir dizinin boyutunu bulmak için “VBA Array Size UBound ve LBound” fonksiyonlarını kullanabilirsiniz . İşte adım adım bir kılavuz:
- Dizinizi tanımlayın ve başlatın.

- UBound ve LBound fonksiyonlarını kullanarak dizinin boyutunu belirleyin.

“UBound(arr)” fonksiyonu dizinin üst sınırını (indeks) döndürür ve “LBound(arr)” alt sınırını (indeks) döndürür. Alt sınırı üst sınırdan çıkarıp 1 ekleyerek dizinin boyutunu elde edersiniz. - Dizinin boyutunu görüntüle.

MsgBox fonksiyonu dizinin boyutunu gösteren bir mesaj kutusu görüntüler.
“FindArraySize” alt yordamını çalıştırmak dizinin boyutunu gösteren bir mesaj kutusu görüntüler.
Bu örnekte, beş elemanlı bir dizi tanımladığımız için "Dizinin boyutu: 5" görüntülenecektir.
Dim arr(1 To 5) As Integer ' 5 elemanlı örnek dizi
Dim size As Long
size = UBound(arr) – LBound(arr) + 1
MsgBox “Dizinin boyutu: ” & size
End Sub
Bir Dizinin Boyutunu Otomatik Olarak Bul
Bir dizinin boyutunu bulmak, dinamik olarak tanımlanmış bir dizideki öğe sayısını, diziye atanmış gerçek değerlere göre belirlemeyi içerir. Bunun için VBA Dizi Boyutu Dinamik işlevini kullanabilirsiniz.
- Adım 1: Dinamik dizinizi bildirin ve başlatın.

- Adım 2: “UBound” ve “LBound” fonksiyonlarını kullanarak dizinin boyutunu belirleyin.

“UBound(arr)” fonksiyonu dizinin üst sınırını (indeks) döndürür ve “LBound(arr)” alt sınırını (indeks) döndürür. Alt sınırı üst sınırdan çıkarıp 1 ekleyerek dizinin boyutunu elde edersiniz.
- Adım 3: Dizinin boyutunu görüntüleyin.

MsgBox fonksiyonu dizinin boyutunda bir mesaj kutusu görüntüler.
“FindArraySizeAutomatically” alt rutinini çalıştırmak, dizinin boyutunu gösteren bir mesaj kutusu görüntüler.

Bu örnekte, altı elemanlı bir dizi atadığımız için "Dizinin boyutu: 6" görüntülenecektir.

Not: VBA dizi boyutu, dizideki toplam eleman sayısını ifade ederken, dizi boyutunu bulmak, eleman sayısını açıkça belirtmeden dizinin boyutunu dinamik olarak belirlemeyi ifade eder.
İşte kodun tamamı:
Sub FindArraySizeAutomatically()
Dim arr() As Variant ' Dinamik bir dizi tanımla
arr = Array(1, 2, 3, 4, 5, 6) ' Başlangıç değerlerine sahip örnek dizi
Dim size As Long
size = UBound(arr) + 1 ' Dizinin boyutunu hesapla
MsgBox “Dizinin boyutu: ” & size ' Dizinin boyutunu görüntüle
End Sub
Örnekler
Örnek 1
Bu örnek, elektronik tablo hücrelerini doldurmak için verileri verimli bir şekilde depolamak ve düzenlemek amacıyla VBA Dizi Boyutunun nasıl kullanılacağını göstermektedir.
- Adım 1 : Visual Basic Düzenleyicisini (VBE) açın.
VBE'yi açmak için Excel'de Alt + F11 tuşlarına basın veya şeritteki Geliştirici sekmesine tıklayın ve ardından Visual Basic düğmesine tıklayın.

- Adım 2: Yeni bir modül oluşturun. VBE'de Ekle menüsüne tıklayın ve yeni bir modül oluşturmak için Modül'ü seçin.

- Adım 3: “PopulateCellsFromArray” alt rutinini başlatın.

- Adım 4: 'arr' adında 5 boyutunda ve String türünde bir dizi değişkeni bildirin.

Bu satır 5 boyutunda bir dizi değişkeni arr bildirir, yani 5 eleman depolayabilir. Bu dizideki elemanlar String türünde olacaktır.
- Adım 5: Integer türünde bir döngü sayacı değişkeni i bildirin.

Bu satır Integer türünde bir i değişkeni bildirir. Sonraki döngülerde döngü sayacı olarak kullanılacaktır.
- Adım 6: Dizi elemanlarına değer atamak için bir döngü başlatın.

Bu satır, dizi arr'nin elemanlarına değerler atayacak bir döngünün başlangıcını işaretler. Döngü 1'den 5'e kadar (dahil) yineleme yapacaktır.
- Adım 7: Dizi elemanlarının her birine bir dize değeri atayın ve döngünün bir sonraki yinelemesine geçin.

Bu satır, “arr” dizisinin her bir elemanına bir dize değeri atar. Her bir elemana atanan değer, “Value” dizesini ve i'nin geçerli değerini birleştirir.
Örneğin, ilk öğeye “Değer 1” değeri, ikinci öğeye “Değer 2” değeri vb. atanacaktır.
“Next I” döngünün sonunu belirtir. Döngü sayacı “i”yi bir sonraki değere taşır ve son koşula ulaşana kadar döngünün bir sonraki yinelemesiyle devam eder.
- Adım 8: Dizi değerlerini Excel hücrelerine yazmak ve döngünün bir sonraki yinelemesine geçmek için bir döngü başlatın.

Bu satır, 'arr' dizisinin değerlerini Excel hücrelerine yazacak bir döngünün başlangıcını işaretler. Döngü 1'den 5'e kadar (dahil) yineleme yapacaktır.
- Adım 9: Dizinin her bir öğesinin değerini A sütunundaki ilgili hücreye yazın.

- Bu satır, her dizi öğesinin değerini Excel çalışma kitabındaki etkin sayfanın A sütunundaki karşılık gelen bir hücreye yazar. Hücre adresi, "A" harfinin "i"nin geçerli değeriyle birleştirilmesiyle belirlenir.
- Örneğin, ilk yinelemede arr(1) değeri A1 hücresine yazılır, ikinci yinelemede arr(2) değeri A2 hücresine yazılır, vb.
- Bu kod, hücreleri dizi değerleriyle verimli bir şekilde doldurmak için döngüleri ve Aralık nesnesini kullanır.
- Adım 10: Modülü kaydedin ve VBA'yı kapatın. Şimdi Makro menüsünü açmak için Alt + F8 tuşlarına basın, “PopulateCellsFromArray” öğesini seçin ve kodu yürütün.

- Adım 11: Kodu çalıştırdığınızda, kodun beş elemanlı bir dizi "arr" başlattığını ve her elemana bir döngü kullanarak değerler atadığını göreceksiniz. Daha sonra değerleri diziden Excel hücrelerine yazar ve her eleman A sütununda ayrı bir hücreye yerleştirilir.

KODUN TAMAMI
Sub PopulateCellsFromArray()
Dim arr(1 To 5) As String
Dim i As Integer
‘ Assign values to the array
For i = 1 To 5
arr(i) = “Value ” & i
Next i
‘ Write array values to Excel cells
For i = 1 To 5
Range(“A” & i).Value = arr(i)
Next i
End Sub
Örnek 2
Aşağıdaki VBA kodu, Excel hücrelerini ay değerleriyle doldurmak için bir dizinin nasıl kullanılacağını göstermektedir. On iki ayın adlarını bir diziye atar ve ardından bu değerleri bir Excel çalışma sayfasının A sütunundaki ardışık hücrelere yazar. Lütfen “VBA Dizi Boyutu” çalışma kitabının 2. modülüne bakın.
- Adım 1: Yeni modülde “PopulateMonthCells” alt rutinini başlatın.

- Adım 2: Boyutunu belirtmeden “arr” adlı bir dizi değişkeni bildirin.

Bu satır, boyutunu belirtmeden bir dizi değişkeni "arr" bildirir. Variant türü, dizinin herhangi bir VBA veri türünün değerlerini tutmasına izin verir .
- Adım 3: Tamsayı türünde bir döngü sayacı değişkeni “i” bildirin.

Sonraki döngüde döngü sayacı olarak kullanılacaktır.
- Adım 4: Ayları diziye atayın.

Bu satır ayların değerlerini arr dizisine atar. Array fonksiyonu bir dizi oluşturur ve belirtilen değerleri ona atar.
- Adım 5: Ayları Excel hücrelerine yazmak için bir döngü başlatın.

Bu satır, "arr" dizisinin değerlerini Excel hücrelerine yazacak bir döngünün başlangıcını işaretler. Döngü, 0'dan dizinin üst sınırı olan "arr"a kadar yineleme yapacaktır. "UBound" işlevi, dizideki son öğenin dizinini almak için kullanılır.
- Adım 6: Dizinin her bir öğesinin değerini A sütunundaki ilgili hücreye yazın ve döngünün bir sonraki yinelemesine geçin.

Bu satır, her dizi öğesinin değerini etkin sayfanın A sütunundaki karşılık gelen hücreye yazar.
Hücre adresi, “A” harfinin mevcut “i + 1” değeriyle birleştirilmesiyle belirlenir. “+ 1”, A0 hücresi yerine A1 hücresinden değerlerin yazılmaya başlanması için eklenir.
Daha sonra döngü sayacı “i”yi bir sonraki değere taşır ve son koşula ulaşana kadar döngünün bir sonraki yinelemesiyle devam eder.
- Adım 7: Modülü kaydedin ve VBA'yı kapatın. Şimdi Makro menüsünü açmak için Alt + F8 tuşlarına basın, “PopulateMonthCells”i seçin ve kodu çalıştırın.

- Adım 8: Çalıştır'a tıkladığınızda, kod Array fonksiyonunu kullanarak ayların değerlerini bir diziye atar ve sonra bu değerleri Excel hücrelerine yazar. Döngü, eleman dizisini yineler ve bunları etkin sayfanın A sütunundaki ardışık hücrelere yazar.

İşte kodun tamamı:
Sub PopulateMonthCells()
Dim arr() As Variant
Dim i As Integer
' Ayları diziye ata
arr = Array(“Ocak”, “Şubat”, “Mart”, “Nisan”, “Mayıs”, “Haziran”, “Temmuz”, “Ağustos”, “Eylül”, “Ekim”, “Kasım”, “Aralık”)
' Ayları Excel hücrelerine yaz
For i = 0 To UBound(arr)
Range(“A” & i + 1).Value = arr(i)
Next i
End Sub
VBA'da, bir dizi bildirildikten sonra boyutunu doğrudan değiştiremezsiniz. İstenilen boyutta yeni bir dizi bildirmeniz veya diziyi yeniden boyutlandırmak için "ReDim" ifadesiyle birlikte dinamik dizileri kullanmanız gerekir.
Örneğin: ReDim arr(1 To newSize)
"ReDim" ifadesi diziyi belirtilen boyuta yeniden boyutlandırır.
VBA'da bir dizinin boyutunu artırmak için ReDim Preserve ifadesini kullanabilirsiniz. Bu ifade, mevcut değerleri koruyarak diziyi yeniden boyutlandırmanıza olanak tanır. İşte ilgili kod satırı:
ReDim Preserve arr(1 To newSize)
Bu satırda, "arr" dizinin adıdır ve newSize dizinin istenen yeni boyutudur. "ReDim Preserve" ifadesi, mevcut değerleri koruyarak diziyi belirtilen boyuta yeniden boyutlandırır.
Kullanılabilir bellek kaynakları VBA Dizi boyutu sınırını belirler. Bir dizinin maksimum boyutu, VBA projenize tahsis edilebilecek toplam bellek miktarına bağlıdır.
Varsayılan olarak, VBA dizi boyutu tek bir boyutta en fazla 2^30 – 1 öğeye (yaklaşık 1 milyar öğeye) sahip olabilir. Dizi boyutu kullanılabilir belleği aşarsa, "Bellek yetersiz" hatasıyla sonuçlanabilir.
