Özellik ikonu

Array

İndirme izni yok

Genel Bakış

Array (Array işlevi), virgülle ayırdığınız değerlerden bir Variant dizi oluşturan VBA işlevidir. Birkaç sabit değeri ayrı ayrı değişkenlere ya da hücrelere yazmadan tek bir listede toplamak, döngüyle dolaşmak veya bir kontrol listesi olarak kullanmak için idealdir. Dönen dizi varsayılan olarak 0 indeksinden başlar.

Söz dizimi​

Array işlevinin genel biçimi ve en yaygın kullanımı aşağıdaki gibidir:
VBA 4 satır
Array(arglist)

Dim dizi As Variant
dizi = Array(deger1, deger2, deger3)
  • arglist: Diziye konacak değerlerin virgülle ayrılmış listesidir; isteğe bağlıdır. Hiç değer vermezseniz uzunluğu sıfır olan boş bir dizi oluşur. Değerler farklı veri türlerinde (metin, sayı, tarih, Boolean) olabilir.
  • Sonucun atanacağı değişken: Variant türünde tanımlanmalıdır. Sabit boyutlu bir diziye (Dim ile boyutu belirtilmiş) ya da String gibi türlü bir değişkene doğrudan atama yapılamaz ve tür uyuşmazlığı hatası oluşur.

Dönüş değeri ve alt sınır​

Array işlevi, içinde tek boyutlu dizi taşıyan bir Variant döndürür. Dizinin alt sınırı modülün başındaki Option Base deyimine bağlıdır.
  • Varsayılan durum: Option Base kullanılmadıysa alt sınır 0'dır; 5 değer verirseniz indeksler 0'dan 4'e gider.
  • Option Base 1: Modülün başına bu deyimi yazarsanız Array ile oluşturulan dizilerin alt sınırı 1 olur.
  • VBA.Array: İşlevi VBA.Array biçiminde tür kitaplığı adıyla çağırırsanız Option Base etkisiz kalır ve alt sınır her zaman 0'dır.
  • LBound ve UBound: Dizinin sınırlarını öğrenmek için LBound ve UBound işlevlerini kullanın; eleman sayısı üst sınırdan alt sınırın çıkarılıp 1 eklenmesiyle bulunur.

Kullanım biçimleri​

Bir elemana dizi adı ve parantez içindeki indeksle ulaşırsınız. Dizide dolaşmak için For...Next döngüsünü LBound ve UBound ile birlikte ya da For Each döngüsünü kullanabilirsiniz. Dizinin elemanları sabit değildir; sonradan değiştirebilirsiniz ama eleman sayısını Array ile artıramazsınız.

Bir Array elemanı da başka bir dizi olabilir. Bu yapı iç içe (jagged) dizi olarak bilinir ve iki indeksle okunur:
VBA 3 satır
Dim ic As Variant
ic = Array(Array(1, 2), Array(3, 4))
' ic(1)(0) ifadesi ikinci iç dizinin ilk elemanını verir
Range.Value özelliğine bir Array atarsanız değerler yatay olarak (tek satırda yan yana) yazılır. Dikey yazmak için Application.Transpose yöntemini kullanın.

1. Ay adlarını dizi ile sayfaya yazma​

A sütununda sıra numaraları ve C sütununda aylık satış tutarları hazırdır. Ay adlarını B sütununa yazacak makroyu Alt+F11 ile açtığınız bir standart modüle yapıştırın. Dizi 0 indeksinden başladığı için döngü LBound ve UBound değerlerine göre kurulmuştur.
VBA 14 satır
Option Explicit

Sub AylariYaz()
    Dim aylar As Variant
    Dim i As Long

    ' Ay adlarını Array işleviyle bir Variant değişkene yükle
    aylar = Array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran")

    ' Alt ve üst sınırı kullanarak sonlu bir döngü kur
    For i = LBound(aylar) To UBound(aylar)
        ActiveSheet.Cells(i + 2, 2).Value = aylar(i)
    Next i
End Sub
Array
Formülünü incelemek için bir hücre seçin.
ABC
1SıraAy AdıSatış Tutarı
21Ocak12.500,00
32Şubat13.800,50
43Mart15.200,00
54Nisan14.150,00
65Mayıs16.900,00
76Haziran18.250,00
AylarExcelDepo v1.0.0
Makro çalışınca B2 hücresine Ocak, B3 hücresine Şubat ve B7 hücresine Haziran yazılır. Dizinin ilk elemanı 0 indeksinde olduğu için döngü 0'dan başlar ve satır numarası i + 2 olarak hesaplanır.

2. Option Base ve VBA.Array farkı​

Bu örnekte modülün en üstünde Option Base 1 yazılıdır. Aynı değerlerle önce Array, sonra VBA.Array ile iki dizi oluşturulur ve sınırları B sütununa yazılır. Kodu yeni bir standart modüle yapıştırın; Option Base deyimi yalnızca bulunduğu modülü etkiler.
VBA 20 satır
Option Base 1
Option Explicit

Sub SinirlariYaz()
    Dim sehirler As Variant
    Dim sabit As Variant

    ' Option Base 1 nedeniyle alt sınır 1 olur
    sehirler = Array("Ankara", "İstanbul", "İzmir")

    ' VBA.Array, Option Base ayarını yok sayar ve alt sınır 0 olur
    sabit = VBA.Array("Ankara", "İstanbul", "İzmir")

    With ActiveSheet
        .Range("B2").Value = LBound(sehirler)
        .Range("B3").Value = UBound(sehirler)
        .Range("B4").Value = UBound(sehirler) - LBound(sehirler) + 1
        .Range("B5").Value = LBound(sabit)
    End With
End Sub
Array
Formülünü incelemek için bir hücre seçin.
AB
1ÖlçütDeğer
2Array alt sınır1
3Array üst sınır3
4Eleman sayısı3
5VBA.Array alt sınır0
Alt SınırExcelDepo v1.0.0
Array işlevinin alt sınırı B2 hücresinde 1, üst sınırı B3 hücresinde 3 olarak görünür. Eleman sayısı 3 bulunur. VBA.Array ile oluşturulan dizinin alt sınırı ise B5 hücresinde 0 değerini alır; çünkü Option Base bu çağrıyı etkilemez.

3. Kampanya şehirlerini dizide arama​

A sütunundaki şehirlerin kampanya kapsamında olup olmadığı C sütununa yazılacaktır. Kapsama giren şehirler kodun içinde Array ile listelenir ve Application.Match yöntemiyle aranır. Kodu bir standart modüle yapıştırın.
VBA 19 satır
Option Base 0
Option Explicit

Sub KampanyaKontrol()
    Dim kapsam As Variant
    Dim satir As Long

    ' Kampanya kapsamındaki şehirler
    kapsam = Array("Ankara", "İzmir", "Bursa", "Antalya")

    For satir = 2 To 9
        ' Match bulamazsa hata döndürür; IsError ile yakalanır
        If IsError(Application.Match(ActiveSheet.Cells(satir, 1).Value, kapsam, 0)) Then
            ActiveSheet.Cells(satir, 3).Value = "Hayır"
        Else
            ActiveSheet.Cells(satir, 3).Value = "Evet"
        End If
    Next satir
End Sub
Array
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirSatış AdediKampanya Kapsamında
2Ankara240Evet
3Konya180Hayır
4İzmir310Evet
5Trabzon95Hayır
6Bursa205Evet
7Van60Hayır
8Antalya275Evet
9Samsun120Hayır
KampanyaExcelDepo v1.0.0
Ankara satırında C2 hücresi Evet, Konya satırında C3 hücresi Hayır değerini alır. Listede olmayan şehirlerde Application.Match hata verdiği için IsError denetimi Hayır sonucunu yazdırır. Kampanya şehirlerini değiştirmek için yalnızca Array içindeki değerleri düzenlemeniz yeterlidir.

Kullanırken dikkat edin​

  • Variant zorunluluğu: Array işlevinin sonucunu yalnızca Variant türünde bir değişkene atayabilirsiniz. Değişkeni Dim x(2) As String gibi sabit boyutlu ya da türlü tanımlarsanız atama sırasında hata alırsınız.
  • İndeks 0'dan başlar: Dizinin ilk elemanı varsayılan olarak 0 indeksindedir. İndeks sınırlarını elle yazmak yerine LBound ve UBound kullanın; böylece Option Base değişse de kodunuz bozulmaz. Sınırın dışına çıkarsanız Subscript out of range (dizin sınırlar dışında) hatası oluşur.
  • Option Base yalnızca modülü etkiler: Option Base 1 deyimi yalnızca yazıldığı modüldeki Array çağrılarını ve dizi tanımlarını etkiler. Aynı projedeki başka modüllerde alt sınır yine 0 olur. Bu karışıklığı önlemek için VBA.Array kullanabilirsiniz.
  • Büyük listeler için uygun değildir: Array işlevi kod içinde elle yazdığınız kısa listeler için uygundur. Yüzlerce hücredeki değeri diziye almak için bir Range nesnesinin Value özelliğini bir Variant değişkene atamak daha pratiktir; bu durumda dizi iki boyutlu ve 1 tabanlı olur.
  • Hücreye yazarken yön: Bir Range nesnesine Array atadığınızda değerler yatay yazılır. Dikey yazmak için Application.Transpose kullanın. Aralığın boyutu dizinin eleman sayısıyla uyuşmazsa fazla hücrelere #YOK (#N/A) hatası yazılabilir.
  • İlgili konular:
    • Split ve Join: Metni diziye bölen ve diziyi metne birleştiren işlevler.
    • LBound ve UBound: Dizinin alt ve üst sınırını veren işlevler.
    • Option Base: Dizilerin varsayılan alt sınırını belirleyen deyim.
    • Dim ve ReDim: Dizi tanımlama ve yeniden boyutlandırma deyimleri.
    • IsArray: Bir değişkenin dizi içerip içermediğini sınayan işlev.
    • Filter: Bir metin dizisini ölçüte göre süzen VBA işlevi.
    • Application.Match: Bir değeri dizi ya da aralıkta arayan yöntem; çalışma sayfasındaki KAÇINCI işleviyle aynı mantıktadır.
    • Range.Value: Hücre değerlerini dizi olarak okuma ve yazma özelliği.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst