Özellik ikonu

ListCount

İndirme izni yok

Genel Bakış

ListCount (ListCount property), bir ListBox ya da ComboBox denetimindeki satır (öğe) sayısını döndüren özelliktir. Liste boşsa 0 verir. Döngü sınırını belirlemek, listenin boş olup olmadığını denetlemek ve son öğeye ulaşmak için kullanılır.

ListCount nedir ve nerede kullanılır​

ListCount özelliği, UserForm üzerindeki ya da çalışma sayfasına yerleştirilmiş ActiveX ListBox ve ComboBox denetimlerinde bulunur. Listeye AddItem yöntemiyle, .List özelliğiyle ya da RowSource ile eklenen öğelerin toplamını verir. Özellik yalnızca okunur; değer atamaya çalışırsanız hata alırsınız. Listeyi değiştirmek için AddItem, RemoveItem ve Clear yöntemlerini kullanın.

  • ListBox ve ComboBox: ListCount her ikisinde de aynı mantıkla çalışır.
  • Çok sütunlu liste: ListCount satır sayısını verir, sütun sayısını değil. Sütun sayısı için ColumnCount özelliği vardır.
  • Sütun başlıkları: ColumnHeads ile gösterilen başlık satırı ListCount değerine dahil edilmez.
  • RowSource kullanımı: Liste bir hücre aralığına bağlıysa ListCount o aralığın satır sayısını verir.
  • Form Denetimleri: Geliştirici sekmesindeki Form Denetimleri (Form Controls) ActiveX değildir; onlarda sayıyı ControlFormat nesnesi üzerinden okursunuz.

Söz dizimi​

Özellik parametre almaz; denetim adından sonra yazılır ve Long türünde bir sayı döndürür:

VBA 5 satır
nesne.ListCount

' UserForm içinden örnekler
Sayi = Me.ListBox1.ListCount
Sayi = UserForm1.ComboBox1.ListCount

  • nesne: ListBox ya da ComboBox denetimi; zorunludur. ActiveX denetimi sayfadaysa önce OLEObjects koleksiyonundan alıp .Object özelliğiyle denetimin kendisine ulaşırsınız.
  • Dönüş değeri: Listedeki öğe sayısı. Liste boşsa 0 döner.

Sıfır tabanlı dizin ve döngüler​

Listedeki öğeler 0'dan başlayarak numaralanır. Bu yüzden ilk öğenin dizini 0, son öğenin dizini ListCount - 1 olur. Tüm öğeleri dolaşırken döngüyü şöyle kurun:

VBA 3 satır
For i = 0 To lst.ListCount - 1
    ' lst.List(i) ile öğeye ulaşın
Next i

Liste boşsa döngü hiç çalışmaz, çünkü üst sınır -1 olur. Son öğeyi seçmek için ListIndex özelliğine ListCount - 1 değerini atayabilirsiniz. Hiçbir öğe seçili değilken ListIndex değeri -1'dir.

  • List(i): i. dizindeki öğenin metnini verir.
  • ListIndex: Seçili öğenin dizinini verir ya da ayarlar.
  • Selected(i): ListBox'ta i. öğenin seçili olup olmadığını verir.
  • ListRows: ComboBox açıldığında görünen satır sayısıdır. ListCount ile karıştırmayın.

UserForm içinde kullanım​

UserForm açılırken listeyi doldurup öğe sayısını denetlemek yaygın bir kullanımdır. Aşağıdaki kod UserForm kod modülündeki UserForm_Initialize olay yordamına yazılır:

VBA 6 satır
Private Sub UserForm_Initialize()
    Me.ListBox1.RowSource = "Personel!A2:A20"
    If Me.ListBox1.ListCount = 0 Then
        Me.cmdSil.Enabled = False
    End If
End Sub

Bu örnekte liste boşsa Sil düğmesi devre dışı bırakılır. Düğme adı cmdSil olarak varsayılmıştır.

1. Listeye eklenen ve silinen öğeleri saymak​

Personel adları A sütunundadır. Makro sayfaya geçici bir ListBox ekler, adları listeye yükler ve her işlemden sonra ListCount değerini C sütununa yazar. Sonunda geçici denetimi siler. Kodu standart bir modüle yapıştırın.
VBA 31 satır
Option Explicit

Sub ListeSayisiniYaz()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim lst As Object

    Set ws = Worksheets("Personel")

    ' Sayfaya geçici bir ListBox ekle
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=300, Top:=10, Width:=120, Height:=80)
    Set lst = ole.Object

    ' Adları aralıktan yükle
    lst.List = ws.Range("A2:A7").Value
    ws.Range("C2").Value = lst.ListCount
    ws.Range("D2").Value = "Aralıktan yüklenen öğe sayısı"

    ' Bir öğe ekle
    lst.AddItem "Zeynep Aydın"
    ws.Range("C3").Value = lst.ListCount
    ws.Range("D3").Value = "AddItem sonrası"

    ' İlk öğeyi sil
    lst.RemoveItem 0
    ws.Range("C4").Value = lst.ListCount
    ws.Range("D4").Value = "RemoveItem sonrası"

    ' Geçici denetimi kaldır
    ole.Delete
End Sub
ListCount
Formülünü incelemek için bir hücre seçin.
ABCD
1Ad SoyadDepartmanListCountAçıklama
2Ayşe YılmazMuhasebe6Aralıktan yüklenen öğe sayısı
3Mehmet KayaSatış7AddItem sonrası
4Fatma Demirİnsan Kaynakları6RemoveItem sonrası
5Ali ÇelikSatın Alma
6Elif ŞahinBilgi İşlem
7Mustafa ArslanÜretim
PersonelExcelDepo v1.0.0
A2:A7 aralığındaki adlar yüklendiğinde ListCount 6 olur. AddItem ile bir öğe eklenince sayı 7 değerine çıkar. RemoveItem ile ilk öğe silinince sayı 6 olur. ListCount her işlemden sonra güncel öğe sayısını verir.

2. Koşula uyan öğeleri listeleyip son öğeyi seçmek​

Stok sayfasında ürünler ve stok miktarları vardır. Makro stoğu 10'un altındaki ürünleri geçici bir ListBox'a ekler. ListCount ile kritik ürün sayısını, ListIndex ile de listenin son öğesini bulur. Kodu standart bir modüle yapıştırın.
VBA 30 satır
Option Explicit

Sub KritikStoklariListele()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim lst As Object
    Dim i As Long

    Set ws = Worksheets("Stok")
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=400, Top:=10, Width:=120, Height:=80)
    Set lst = ole.Object

    ' Stoğu 10'un altındaki ürünleri listeye ekle
    For i = 2 To 9
        If ws.Cells(i, 2).Value < 10 Then lst.AddItem ws.Cells(i, 1).Value
    Next i

    ' Kritik ürün sayısı
    ws.Range("C2").Value = lst.ListCount
    ws.Range("D2").Value = "Kritik ürün sayısı"

    ' Liste boş değilse son öğeyi seç ve adını yaz
    If lst.ListCount > 0 Then
        lst.ListIndex = lst.ListCount - 1
        ws.Range("C3").Value = lst.List(lst.ListIndex)
        ws.Range("D3").Value = "Listenin son öğesi"
    End If

    ole.Delete
End Sub
ListCount
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünStokSonuçAçıklama
2Kalem1204Kritik ürün sayısı
3Defter8CetvelListenin son öğesi
4Silgi45
5Zımba4
6Dosya60
7A4 Kağıt7
8Makas30
9Cetvel9
StokExcelDepo v1.0.0
Stoğu 10'un altında kalan ürünler listeye eklendi ve ListCount kritik ürün sayısı olarak 4 değerini verdi. Son öğenin dizini ListCount - 1 olduğundan ListIndex ile seçilen ürün Cetvel oldu. Liste boş olsaydı ListCount 0 döneceği için If bloğu çalışmaz ve ListIndex hatası oluşmazdı.

3. ComboBox'a yinelenen kayıt eklememek​

A sütunundaki kategorilerde tekrarlar vardır. Makro her kategoriyi geçici bir ComboBox'a yalnızca listede yoksa ekler. Varlık denetimi için 0'dan ListCount - 1'e kadar döner. Sonuç B sütununa, öğe sayısı C2 hücresine yazılır. Kodu standart bir modüle yapıştırın.
VBA 40 satır
Option Explicit

' Aranan metin listede var mı?
Function ListedeVarMi(cbo As Object, ByVal aranan As String) As Boolean
    Dim i As Long
    For i = 0 To cbo.ListCount - 1
        If cbo.List(i) = aranan Then
            ListedeVarMi = True
            Exit Function
        End If
    Next i
End Function

Sub TekrarsizListeOlustur()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim cbo As Object
    Dim i As Long

    Set ws = Worksheets("Kategoriler")
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=300, Top:=10, Width:=120, Height:=20)
    Set cbo = ole.Object

    ' Her kategoriyi yalnızca listede yoksa ekle
    For i = 2 To 11
        If Not ListedeVarMi(cbo, ws.Cells(i, 1).Value) Then
            cbo.AddItem ws.Cells(i, 1).Value
        End If
    Next i

    ' Tekrarsız öğeleri B sütununa yaz
    For i = 0 To cbo.ListCount - 1
        ws.Cells(i + 2, 2).Value = cbo.List(i)
    Next i

    ' Toplam öğe sayısı
    ws.Range("C2").Value = cbo.ListCount

    ole.Delete
End Sub
ListCount
Formülünü incelemek için bir hücre seçin.
ABC
1KategoriTekrarsız ListeTekrarsız Sayı
2MeyveMeyve5
3SebzeSebze
4MeyveSüt Ürünleri
5Süt ÜrünleriBakliyat
6SebzeŞarküteri
7Bakliyat
8Meyve
9Süt Ürünleri
10Bakliyat
11Şarküteri
KategorilerExcelDepo v1.0.0
ListedeVarMi işlevi, liste boşken ListCount 0 olduğu için döngüye girmez ve False döndürür. İlk kategori bu sayede eklenir. Tekrarlar elendikten sonra ComboBox'ta 5 farklı kategori kalır. İlk tekrarsız öğe B2 hücresinde Meyve olarak görünür; diğer öğeler altındaki hücrelere sırayla yazılır.

Kullanırken dikkat edin​

  • Son dizin ListCount değil, ListCount - 1'dir: Öğeler 0'dan başladığı için en sık yapılan hata döngüyü 0 To ListCount biçiminde yazmaktır. Bu, son turda var olmayan bir dizine erişmeye çalışır ve "Subscript out of range" benzeri bir hata verir. Döngüyü her zaman 0 To ListCount - 1 olarak kurun.
  • Özellik salt okunurdur: ListCount değerine atama yapamazsınız. Öğe sayısını değiştirmek için AddItem, RemoveItem ya da Clear yöntemlerini kullanın. Silme döngüsünde ListCount azalacağından, öğeleri sondan başa doğru silmek daha güvenlidir.
  • Boş liste ve ListIndex: Liste boşken ListCount 0'dır; hiçbir öğe seçili değilken de ListIndex -1'dir. Bir öğeye erişmeden önce ListCount > 0 koşulunu denetleyin. Seçili öğeyi okumadan önce de ListIndex değerinin -1 olmadığından emin olun.
  • ListCount satır sayısıdır: Çok sütunlu bir listede ListCount sütun sayısını değil satır sayısını verir. ComboBox'taki ListRows ise açılır listede aynı anda görünen satır sayısını belirler. Bu iki özellik birbirinden bağımsızdır.
  • ActiveX denetimlerine .Object ile ulaşın: Sayfadaki bir ActiveX ListBox ya da ComboBox için ListCount'u doğrudan OLEObject üzerinden okuyamazsınız. Önce OLEObject.Object ile denetimin kendisine ulaşın. Sayfada tasarım modundaki denetimler için makro içinde denetim adını kullanmak da mümkündür; sayfa modülünde bu ad doğrudan nesne gibi çalışır.
  • İlgili konular:
    • ListBox ve ComboBox: ListCount'un bulunduğu denetimler.
    • AddItem, RemoveItem, Clear: Listeyi değiştiren yöntemler.
    • List, ListIndex, Selected: Öğelere ve seçime erişen özellikler.
    • RowSource ve ColumnCount: Listeyi hücre aralığına bağlayan ve sütun sayısını belirleyen özellikler.
    • ListRows: ComboBox'ta görünen satır sayısı.
    • UserForm_Initialize: Listenin doldurulduğu olay.
    • BAĞ_DEĞ_DOLU_SAY ve EĞERSAY: Hücre aralığındaki öğeleri sayan çalışma sayfası işlevleri.
Ö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
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst