EXCEL VBADA LISTOBJECTS[LİSTE NESNELERİ]

 


VBA'da (Visual Basic for Applications) ListObject, Excel'de tanıtılan ve bir tabloyu temsil eden bir özelliktir. Tablolar, Excel'de verileri yönetmenin ve analiz etmenin güçlü bir yoludur ve ListObject, VBA kodu aracılığıyla tablolarla çalışmak için programlı bir yol sağlar.


  • Tanım: Bir ListObject esasen bir tabloya dönüştürülmüş bir aralıktır. Yapılandırılmış bir biçime sahiptir, sütunların adları vardır ve formüllerde yapılandırılmış referanslar kullanma yeteneği vardır.
  • Bir ListObject Oluşturma: Excel'de bir veri aralığı seçip ardından bunu bir tabloya dönüştürerek bir ListObject oluşturabilirsiniz. Bir ListObject oluşturmak ve aralığı belirtmek için VBA ListObjects.Add querytable kodunu kullanabilirsiniz.

Excel'de bir değer kümesini ele alalım.

VBA ListObjects - Tanım Örneği - 1

Aşağıdaki VBA kodunu kullanarak bu değerleri VBA ListObjects tablosuna dönüştürün .

VBA ListObjects - Tanım Örneği - 2

VBA ListObjects.Add işlevini kullanarak Excel'de bir tablo oluşturmak için bir alt rutin tanımlayın . Burada, gösterildiği gibi tabloyu işlevde adlandırabilir ve tablo oluşturulur.

VBA ListObjects - Tanım Örneği - 2

Böylece VBA ListObjects tablosu başarıyla oluşturulmuş oldu.


ÖNEMLİ NOKTALAR

  • ListObject, Excel VBA'da bir tabloyu temsil eden bir özelliktir. Excel'de yapılandırılmış verilerle çalışmak için programlı bir yol sağlar.
  • Tablolar Excel'de manuel olarak veya ListObjects.Add metodu kullanılarak VBA üzerinden oluşturulabilir.
  • Tablolar bir veri aralığına dayalı olabilir ve aralık dinamik olarak genişleyebilir veya daralabilir.
  • ListObjects yapılandırılmış referansları destekler ve formüllerdeki tablo sütunlarına ve verilere kolayca başvurulmasını sağlar.
  • Tablolar yeni verileri içerecek şekilde boyutlarını otomatik olarak ayarlar ve bu sayede dinamik veri kümeleri için uygun hale gelir.

Excel VBA'da ListObjects Kullanarak Tablo Formatı Nasıl Oluşturulur?

Burada, VBA ListObjects tablosunu kullanarak VBA kullanarak bir tablo biçiminin nasıl oluşturulacağını öğreniyoruz. Daha önce, mevcut verileri bir tabloya nasıl dönüştüreceğinizi gördünüz.

Bu örnekte, her iki değeri tanımlamayı ve bunları VBA'da tabloya dönüştürmeyi öğreneceksiniz.

  1. ListObjects kullanarak tablo formatı oluşturmak için alt yordamı adlandırın.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 1

  2. Çalışma Sayfası veri türünü kullanarak tabloyu içeren Çalışma Sayfasını tanımlayın.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 2

  3. VBA Aralık fonksiyonunu kullanarak Excel dosyasında yazdırılacak bazı değerleri tanımlayın, böylece tablo haline dönüştürülebilir.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 3

    1. satırda başlıklar belirtilir.

  4. Tablonun aralığını saklamak için bir Aralık değişkeni tanımlayın.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 4

    Geçerli bölge işlevini kullanarak, bir dizideki tüm boş olmayan hücreleri gruplandırabilirsiniz. Ayrıca, yeni değerlerin eklenmesiyle aralığı daha dinamik hale getirir.

  5. Bir ListObject tanımlayın ve verilen aralığı Excel Tablosuna dönüştürün.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 5

    Burada • xlSrcRange tabloyu eklediğimiz hücre aralığını temsil eder. • tableRange hedef aralığını temsil eder. • xlYes tablonun başlıkları olduğunu belirtir. VBA ListObjects.Add işlevini kullanarak, verilen aralığı bir tabloya dönüştürebilirsiniz.
     

  6. Tablonuzun adını Name fonksiyonunu kullanarak tanımlayın.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 6

    Kod:

    Sub CreateTableFormat()
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Sheets(“Sheet5”)
    ' Bazı örnek verileri girin veya önceden Excel'e elle girebilirsiniz
    ws.Range(“A1”).value = “ID”
    ws.Range(“B1”).value = “Name”
    ws.Range(“A2”).value = “S01”
    ws.Range(“B2”).value = “John Doe”
    ws.Range(“A3”).value = “S02”
    ws.Range(“B3”).value = “Jane Doe”
    Dim tableRange As Range
    Set tableRange = ws.Range(“A1”).CurrentRegion
    Dim myTable As ListObject
    Set myTable = ws.ListObjects.Add(xlSrcRange, tableRange, , xlYes)
    With myTable
    ' Bir tablo adı ayarlayın
    .name = “MyTable”
    End With
    End Sub

  7. Yukarıdaki alt rutini çalıştırın ve ardından oluşturulan yeni tabloyu görmek için “Sheet5”e gidin.


    Excel VBA'da ListObjects Kullanarak Tablo Biçimi Nasıl Oluşturulur - Adım 7


VBA ListObjects ile Excel Tabloları Nasıl Biçimlendirilir?

Aşağıdaki adımları izleyerek Excel tablolarını biçimlendirmek için VBA ListObjects'i nasıl kullanacağınızı öğrenin.

  • Adım 1: Excel Çalışma Kitabını açın ve başlık çubuğunda “ Geliştirici sekmesi ” seçeneğini seçin.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 1a

“Visual Basic”i seçin. Boş olacak VBA Editörü açılacaktır. Editörde, VBA araç çubuğunda “Ekle”yi seçin.

Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 1b

Açılır menüden “Modül”ü seçin.

VBA ListObjects ile Excel Tabloları Nasıl Biçimlendirilir - Adım 1c
  • Adım 2: Aşağıda verilen değer kümesini ele alalım.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 2a

Tabloya dönüştürmek için “Ctrl+T” tuşlarını kullanın.

Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 2b
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 2c
  • Adım 3: Excel tablolarını VBA ListObjects AutoFilter ile biçimlendirmek için bir alt rutin tanımlayın.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 3
  • Adım 4: Tabloyu tanımlayın ve yalnızca sonucu yanlış olan değerlerin görülebildiği üçüncü sütuna göre tabloyu filtreleyin. xlAnd operatörü de kullanılır.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 4

VBA ListObjects.AutoFilter fonksiyonunu kullanarak yalnızca “FALSE” sonucuna sahip değerler gösterilecektir.

  • Adım 5: Tüm etkin filtreleri kaldırmak için başka bir alt rutin tanımlayın.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 5
  • Adım 6: Filtrelenen Başlığı seçin. Burada, “S” başlıklı sütun filtrelenmiştir.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 6
  • Adım 7: ListObject'in FilterMode özelliğinin “TRUE” döndürüp döndürmediğini bir If koşullu ifadesi kullanarak kontrol edin.
Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 7

Eğer doğruysa ShowAllData özelliği çağrılır ve tüm filtreler kaldırılır.

Kod:

Sub FilterListObject()
ActiveWorkbook.Sheets(“Sheet3”).ListObjects(“Table3”).Range.AutoFilter Field:=3, Criteria1:= _
“FALSE”, Operator:=xlAnd
End Sub

Sub ClearAllFilters()
Range(“Table3[[#Headers],[S]]”).Select
If ActiveWorkbook.Worksheets(“Sheet3”).FilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub

  • Adım 8: Excel VBA Düzenleyicisi'ndeki etkinlik çubuğunda “F5” veya “Çalıştır” simgesine tıklayın.

FilterListObject alt rutini çalıştırıldığında tablo.

Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 8a

ClearAllFilters alt rutini çalıştırıldığında tablo.

Excel Tabloları VBA ListObjects ile Nasıl Biçimlendirilir - Adım 8b

Excel tablolarını VBA ListObjects ile nasıl biçimlendireceğinizdir.


Örnekler

VBA ListObjects'in Excel'de nasıl kullanıldığını görmek için bazı ilginç örneklere göz atın.

Örnek 1

Bir tablonun içindeki herhangi bir hücreye tıkladığınızda ve birden fazla tablonuz varsa, aşağıdaki adımları izleyerek ActiveCell'in nesne adını kontrol ederek tablonun ismini alabilirsiniz.

Bir örnek tabloyu ele alalım:

Örnek 1
  • Adım 1: ActiveCell'in içinde bulunduğu tablo adını bulmak için bir alt prosedür tanımlayın.
Örnek 1 - Adım 1
  • Adım 2: ListObject'in adını saklamak için bir dize değişkeni bildirin.
Örnek 1 - Adım 2
  • Adım 3: ListObject'in mevcut olmaması durumunda herhangi bir hatayı önlemek için VBA On Error Resume Next'i kullanın.
Örnek 1 - Adım 3
  • Adım 4: Bir If-koşulu kullanarak, dize değişkeninin boş bir dize olup olmadığını kontrol edin.
Örnek 1 - Adım 4

Boş değilse, ListObject'in adını bir MessageBox'a yazdırın .

  • Adım 5: ActiveCell'inizin bulunduğu bir tablo yoksa Else koşulunu tanımlayın.
Örnek 1 - Adım 5

Kod:

Sub SelectedCellInTable()
Dim Test As String
On Error Resume Next
Test = ActiveCell.ListObject.name
On Error GoTo 0
If Test <> “” Then
MsgBox “Cell is part of the table named: ” & Test
Else
MsgBox “Cell is not part of any table”
End If
End Sub

  • Adım 6: Alt prosedürü çalıştırın ve sonuçları görün.
Örnek 1 - Adım 6

İmleciniz şu anda “Tablo1” tablosundadır.

Örnek 2

Sayısal değerlerini azalan düzende sıralamanız gereken bir tablo düşünün. VBA ListObjects, tabloyu depolamak ve ardından VBA ListObjects'te bulunan işlevleri kullanarak sıralamak için kullanılabilir.

Örnek 2
  • Adım 1: Verilen tabloyu artan veya azalan düzende sıralayacak alt rutini adlandırın.
Örnek 2 - Adım 1
  • Adım 2: VBA sabitlerini kullanarak sıralama sırasını tanımlayın ve bunu bir tamsayı değişkeninde saklayın. Burada tablo azalan düzende sıralanacaktır.
Örnek 2 - Adım 2
  • Adım 3: Sıralanacak tabloyu saklamak için bir ListObject değişkeni tanımlayın.
Örnek 2 - Adım 3
  • Adım 4: Daha önce yapılmış herhangi bir sıralama varsa, bunları kaldırın ve varsayılan duruma geri getirin. Yapılmazsa, beklenmeyen çıktılarla sonuçlanabilir.
Örnek 2 - Adım 4
  • Adım 5: ListObject içerisindeki Sort.Sortfields fonksiyonunu kullanarak ikinci sütunu sayısal değerlere göre azalan düzende sıralayın.
Örnek 2 - Adım 5

Add2 fonksiyonunu kullanarak, tablodaki satırlar “Key” bileşenine göre sıralanır. Bunun için, ListColumns fonksiyonunu kullanarak, 2. sütunu seçin ve daha önce tanımlanan sıralama düzenine göre sıralayın.

  • Adım 6: Sıralama işlevini uygulayın.
Örnek 2 - Adım 6

Kod:

Sub SortTable()
Dim SortOrder As Integer
SortOrder = xlDescending ‘(or xlAscending)
Dim tb2 As ListObject
Set tb2 = ActiveSheet.ListObjects(“Table7”)
‘Clear Any Prior Sorting
tb2.Sort.SortFields.Clear
tb2.Sort.SortFields.Add2 _
Key:=tb2.ListColumns(2).Range, _
Order:=SortOrder
tb2.Sort.Apply

  • Adım 7: Yukarıdaki alt rutini çalıştırın ve ardından sonuçları görmek için tabloyu görüntüleyin.
Örnek 2 - Adım 7

Böylece tabloyu azalan düzende başarıyla sıralamış oldunuz.

Örnek 3

Verilen tabloda bir değerin yerini bulmak istediğinizi varsayalım. Aranacak değeri yazarsanız, içinde bulunduğu tablonun satır numarasını döndürür. Bu, VBA ListObjects kullanılarak yapılabilir.

Örnek 3
  • Adım 1: Yukarıda verilen tabloda değerleri arayacak alt rutini adlandırın.
Örnek 3 - Adım 1
  • Adım 2: InputBox fonksiyonunu kullanarak kullanıcının arayacağı değeri alın .
Örnek 3 - Adım 2

Application.InputBox işlevi, normal InputBox işlevinin yaptığı gibi sayfaları VBA Düzenleyicisi'nden Excel Çalışma Kitabına değiştirmez. InputBox'ın başlığı, sorulacak sorgudan sonra tanımlanır. 9985650255

  • Adım 3: Tabloyu bir ListObject ile tanımlayın. Değerin aranacağı tablodur.
Örnek 3 - Adım 3
  • Adım 4: Tablo mevcut değilse hata işlemeyi gerçekleştirin .
Örnek 3 - Adım 4
  • Adım 5: Tabloda arama değerini arayın. Bu örnekte, arama için yalnızca ilk sütun dikkate alınır.
Örnek 3 - Adım 5

ListObject'teki DataBodyRange niteliğini kullanarak, VBA'daki "xlWhole" sabitini kullanarak tüm tabloyu tarayarak tablodaki değeri bulun. Bulunursa, adresi değişkende saklayın.

  • Adım 6: Hata numaralarını 0'a sıfırlayın.
Örnek 3 - Adım 6
  • Adım 7: Hücrenin boş olup olmadığını kontrol edin. Eğer boşsa, değerin bir MessageBox'ta bulunduğu tablo dizinini yazdırın.
Örnek 3 - Adım 7
  • Adım 8: Tabloda değer bulunamaması durumunda yürütülecek Else koşulunu bildirin.
Örnek 3 - Adım 8

Kod:

Sub LookupTableValue()
Dim LookupValue As String
LookupValue = Application.InputBox(“Enter value in table”, “Search Table”)
Dim tbl As ListObject
Set tbl = ActiveWorkbook.Sheets(“Sheet4”).ListObjects(“Table4”)
On Error Resume Next
Dim FoundCell As Range
Set FoundCell = tbl.DataBodyRange.Columns(1).Find(LookupValue, LookAt:=xlWhole)
On Error GoTo 0
If Not FoundCell Is Nothing Then
MsgBox “Found in table row: ” & _
tbl.ListRows(FoundCell.Row – tbl.HeaderRowRange.Row).Index
Else
MsgBox “Value not found”
End If
End Sub

  • Adım 9: Tabloda kimlik numarasını aramak için alt programı çalıştırın.
Excel'de VBA ListObjects - Örnek 3 - Adım 9a
Excel'de VBA ListObjects - Örnek 3 - Adım 9b

Tablodaki değerleri aramak için bir alt rutini başarıyla oluşturdunuz.

Dikkat Edilmesi Gereken Önemli Noktalar

  • ListObjects içindeki sütunlar ve verilerle çalışırken kod okunabilirliğini artırmak için yapılandırılmış referanslardan yararlanın.
  • Bir ListObject üzerinde işlem yapmadan önce, belirtilen sayfada var olup olmadığını kontrol edin.
  • Tabloları yeniden boyutlandırırken, yeni aralığın tablonun yapısını koruduğundan emin olun.
  • Tablonuz harici verilere bağlıysa, veri kaynağı değiştikten sonra tablonuzu yenilemeyi unutmayın.
  • Tabloları yeniden boyutlandırırken, sütun sayısını tutarsız bir şekilde değiştirmek gibi tablonun yapısını bozan aralıklar belirtmekten kaçının.

1. VBA'da bir ListObject'in boyutunu dinamik olarak değiştirebilir miyim?

Evet, VBA'da Resize metodunu kullanarak yeni bir aralık belirleyerek bir ListObject'in boyutunu dinamik olarak değiştirebilirsiniz .

2. VBA kullanarak ListObject'teki verileri nasıl filtreleyebilirim?

Verileri belirli ölçütlere göre filtrelemek için ListObject'te VBA ListObjects AutoFilter yöntemini kullanın. Aşağıdaki örnekte gösterildiği gibi filtreleme için sütun dizinini ve ölçütleri belirtin.

Excel VBA ListObjects - SSS 2

3. VBA kullanarak bir ListObject'e hesaplanan sütunlar eklemek mümkün müdür?

Evet, VBA ListObjects.Add metodunu kullanarak Excel VBA'da hesaplanmış sütunlar eklemek mümkündür. Aşağıdaki kısa örneğe bakalım. Tabloyu ele alalım.

Excel VBA ListObjects - SSS 3

“Satışlar” ve “Maliyet” sütunlarının toplamını bulmak için yeni bir sütun ekleyebilirsiniz.

SSS 3 - 1

Excel’deki “SUM” fonksiyonunu kullanarak yeni bir sütun ekleyebilir ve bunu yapabilirsiniz.

SSS 3 - 2

4. VBA'da bir ListObject'i nasıl silerim?

VBA'da bir ListObject'i silmek için ListObject üzerindeki Delete metodunu kullanın.

Excel VBA ListObjects - SSS 4

Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...