Genel Bakış
ColumnCount (ColumnCount property), UserForm ya da çalışma sayfası üzerindeki ListBox ve ComboBox denetimlerinde kaç sütunun gösterileceğini belirleyen özelliktir. Çok sütunlu bir listeyi (ürün, kategori, fiyat gibi) tek bir denetimde göstermek ve bu sütunlardaki değerlere kod ile erişmek için kullanılır. Varsayılan değeri 1 olduğundan, birden fazla sütunlu veri kaynağı ancak bu özellik artırıldığında tüm sütunlarıyla görünür.
D2 hücresine denetimin sütun sayısı olan 3 yazılır. D3 hücresi listedeki satır sayısını (5), D4 hücresi ise ilk satırın ikinci sütunundaki değeri (Çevre Birimi) gösterir. Column(1, 0) çağrısında ilk sayı sütunu, ikinci sayı satırı belirtir ve ikisi de 0'dan başlar.
D2 hücresinde ilk satırın sonucu olan Ankara (İç Anadolu), D7 hücresinde son satırın sonucu olan Van (Doğu Anadolu) görünür. Her satırda Column(0, i) şehir adını, Column(2, i) bölgeyi verir. Sütun sayısı 1 bırakılsaydı yalnızca ilk sütun yüklenir ve üçüncü sütuna erişim hata verirdi.
Seçilen satırın Value değeri, BoundColumn 3 olduğu için sicil numarasıdır ve D2 hücresine 1002 olarak yazılır. D3 hücresindeki Murat Demir ise Text özelliğinden gelir; varsayılan TextColumn ayarında ilk sütunu yansıtır. Gizlenen sütunun verisi kullanılabilir kalır; bu yöntem, kullanıcıya ad gösterip arka planda sicil numarasıyla çalışmak için kullanışlıdır.
Söz dizimi
Özellik okunabilir ve yazılabilir. Değer atamak ve okumak için söz dizimi şöyledir:
VBA
2 satır
nesne.ColumnCount = sütunSayısı
sütunSayısı = nesne.ColumnCount
- nesne: ListBox ya da ComboBox denetimi (ör. ListBox1). Çalışma sayfasına eklenmiş ActiveX denetiminde ise OLEObject.Object üzerinden erişilir.
- sütunSayısı: Long türünde tam sayı; isteğe bağlı değil, ama atanmazsa varsayılan değer 1 olur. Veri kaynağındaki tüm sütunları göstermek için -1 verilir.
Değerler ve davranış
- 1: Varsayılan değerdir; yalnızca ilk sütun görüntülenir.
- 2 ve üzeri: Belirtilen sayıda sütun yan yana görüntülenir. Sütun sayısı, veri kaynağının sütun sayısından fazla verilirse fazlalık boş sütun olarak kalır.
- -1: Veri kaynağındaki tüm sütunlar görüntülenir.
Birlikte kullanılan özellikler
- ColumnWidths: Her sütunun genişliğini noktalı virgülle ayrılmış listeyle belirler (ör. 70;50;0).
- BoundColumn: Value özelliğinin hangi sütunun değerini döndüreceğini belirler; varsayılanı 1'dir.
- TextColumn: Text özelliğinin hangi sütundan okunacağını belirler.
- ColumnHeads: RowSource ile bağlanan aralıkta sütun başlıklarını gösterir.
- List ve RowSource: Denetimin veri kaynağını belirler. List iki boyutlu dizi kabul eder; bu nedenle bir aralığın Value özelliği doğrudan atanabilir.
1. Üç sütunlu ListBox oluşturma
Sayfadaki A2:C6 aralığında ürün, kategori ve fiyat bilgisi var. Makro, sayfaya geçici bir ListBox ekler, ColumnCount değerini 3 yapar, aralığı listeye yükler ve sonuçları D sütununa yazıp denetimi siler. Kodu standart modüle yapıştırın ve sayfa etkinken çalıştırın.
VBA
25 satır
Option Explicit
Sub ListeKurulumu()
Dim ws As Worksheet
Dim ole As OLEObject
Dim lb As Object
Set ws = ActiveSheet
' Sayfaya geçici bir ListBox ekle
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=300, Top:=20, Width:=260, Height:=110)
Set lb = ole.Object
' Önce sütun sayısını, sonra veriyi ata
lb.ColumnCount = 3
lb.List = ws.Range("A2:C6").Value
' Sonuçları sayfaya yaz
ws.Range("D2").Value = lb.ColumnCount
ws.Range("D3").Value = lb.ListCount
ws.Range("D4").Value = lb.Column(1, 0)
' Geçici denetimi sil
ole.Delete
End Sub
ColumnCount
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Kategori | Fiyat | Sonuç |
| 2 | Klavye | Çevre Birimi | 450,00 | 3 |
| 3 | Monitör | Görüntü | 4.250,00 | 5 |
| 4 | Yazıcı | Çıktı | 3.100,00 | Çevre Birimi |
| 5 | Fare | Çevre Birimi | 220,00 | |
| 6 | Dizüstü Bilgisayar | Bilgisayar | 18.500,00 |
Ürün ListesiExcelDepo v1.0.0
2. Sütunlara kod ile erişme
A2:C7 aralığında şehir, plaka kodu ve bölge bilgisi bulunuyor. Makro geçici bir ListBox'a üç sütunu yükler, döngüyle her satırın ilk ve üçüncü sütunlarını birleştirip D sütununa yazar. Kodu standart modüle yapıştırın.
VBA
23 satır
Option Explicit
Sub SehirBolgeYaz()
Dim ws As Worksheet
Dim ole As OLEObject
Dim lb As Object
Dim i As Long
Set ws = ActiveSheet
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=300, Top:=20, Width:=260, Height:=110)
Set lb = ole.Object
' Üçüncü sütuna erişebilmek için sütun sayısı 3 olmalı
lb.ColumnCount = 3
lb.List = ws.Range("A2:C7").Value
' Satırlar 0'dan başlar; sütunlar da 0'dan başlar
For i = 0 To lb.ListCount - 1
ws.Cells(i + 2, 4).Value = lb.Column(0, i) & " (" & lb.Column(2, i) & ")"
Next i
ole.Delete
End Sub
ColumnCount
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Şehir | Plaka | Bölge | Sonuç |
| 2 | Ankara | 6 | İç Anadolu | Ankara (İç Anadolu) |
| 3 | İzmir | 35 | Ege | İzmir (Ege) |
| 4 | Bursa | 16 | Marmara | Bursa (Marmara) |
| 5 | Antalya | 7 | Akdeniz | Antalya (Akdeniz) |
| 6 | Trabzon | 61 | Karadeniz | Trabzon (Karadeniz) |
| 7 | Van | 65 | Doğu Anadolu | Van (Doğu Anadolu) |
Şehir BölgeExcelDepo v1.0.0
3. BoundColumn ve ColumnWidths ile birlikte
A2:C6 aralığında personelin adı, departmanı ve sicil numarası yer alıyor. Makro ColumnCount değerini 3 yapar, sicil sütununu ColumnWidths ile gizler, BoundColumn değerini 3 yaparak Value özelliğinin sicil numarasını döndürmesini sağlar ve ikinci satırı seçer. Kodu standart modüle yapıştırın.
VBA
23 satır
Option Explicit
Sub PersonelSecimi()
Dim ws As Worksheet
Dim ole As OLEObject
Dim lb As Object
Set ws = ActiveSheet
Set ole = ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=300, Top:=20, Width:=260, Height:=110)
Set lb = ole.Object
lb.ColumnCount = 3
lb.ColumnWidths = "80;80;0" ' Üçüncü sütun gizli kalır
lb.BoundColumn = 3 ' Value, sicil numarasını döndürsün
lb.List = ws.Range("A2:C6").Value
lb.ListIndex = 1 ' İkinci satırı seç (0 tabanlı)
ws.Range("D2").Value = lb.Value ' BoundColumn sütunundaki değer
ws.Range("D3").Value = lb.Text ' Görünen metin
ole.Delete
End Sub
ColumnCount
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ad | Departman | Sicil No | Sonuç |
| 2 | Elif Kaya | Muhasebe | 1001 | 1002 |
| 3 | Murat Demir | Satış | 1002 | Murat Demir |
| 4 | Ayşe Yıldız | İnsan Kaynakları | 1003 | |
| 5 | Can Öztürk | Lojistik | 1004 | |
| 6 | Zeynep Arslan | Satış | 1005 |
PersonelExcelDepo v1.0.0
Kullanırken dikkat edin
- Önce ColumnCount, sonra veri: Veriyi yüklemeden önce ColumnCount değerini atayın. Değer 1 iken List ile çok sütunlu veri atarsanız yalnızca ilk sütun görünür ve diğer sütunlara Column ile erişmeye çalışmak hata verebilir.
- Sütun ve satır numaraları 0'dan başlar: Column ve List özelliklerinde ilk sütun ya da satır 0 numaralıdır. Bu, çalışma sayfasındaki 1 tabanlı numaralandırmadan farklıdır ve en sık yapılan hata budur.
- Range.Columns.Count ile karıştırmayın: ColumnCount yalnızca ListBox ve ComboBox gibi denetimlerde bulunur. Bir aralıktaki sütun sayısını öğrenmek için Range.Columns.Count kullanılır; bu ikisi farklı nesnelere aittir.
- -1 değeri: Tüm sütunları görüntülemek için -1 verebilirsiniz; ancak sütun sayısı bilinen kaynaklarda kesin bir sayı vermek kodun okunmasını kolaylaştırır. Çok sütunlu listede sütun genişliklerini ColumnWidths ile ayarlamazsanız sütunlar eşit paylaşılır.
- Sütun başlıkları: ColumnHeads özelliği yalnızca RowSource ile bağlanan aralıklarda başlık satırını gösterir; List ile yüklenen verilerde başlık satırı otomatik görünmez.
- İlgili konular: