• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

TextBoxlardaki Verileri ListBoxa Tekrarsız Listeleme

Katılım
24 Temmuz 2019
Mesajlar
480
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
İyi akşamlar diliyorum arkadaşlar.
8 ile 47 numaralar arasında textboxlar var. Bunlarda bazı değerler benzerdir. Bazen iki bazen dört veya daha fazla Textbox değeri aynıdır. Bunları listboxa birer defa olacak şekilde nasıl listeleyebilirim?
teşekkür ederim.
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,763
Excel Vers. ve Dili
Excel 2019 Türkçe
Chatgpt çözümü;
Evet 👍 VBA ile gayet rahat yapılır.
(Muhtemelen Excel VBA kullanıyorsun, ona göre anlatıyorum.)
Ama önce netleştireyim:
👉 TextBox’lar bir UserForm üzerinde mi?
Aşağıdaki çözüm UserForm üzerindeki TextBox8–TextBox47 içindir.
Amaç
  • TextBox8 ile TextBox47 arasındaki değerleri al
  • Aynı olanları tek sefer yaz
  • ListBox’a ekle
En temiz VBA çözümü (Dictionary ile)
VBA’da Dictionary, tekrarları engellemek için en doğru yoldur.
1️⃣ Önce referans ekle
VBA editörde:

Tools > References

✔ Microsoft Scripting Runtime işaretle
2️⃣ Kod


Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

Dim i As Integer
Dim deger As String

For i = 8 To 47
deger = Trim(Me.Controls("TextBox" & i).Text)

If deger <> "" Then
If Not dict.Exists(deger) Then
dict.Add deger, Nothing
End If
End If
Next i

Me.ListBox1.Clear

Dim key As Variant
For Each key In dict.Keys
Me.ListBox1.AddItem key
Next key

Ne yapıyor bu kod?

✔ Boş TextBox’ları almaz

✔ Aynı değeri 1 kere ekler

✔ 2 tane de olsa, 10 tane de olsa fark etmez

✔ Otomatik çalışır
Alternatif (Referans eklemeden – basit yöntem)


Dim i As Integer
Dim deger As String
Dim varItem As Variant

Me.ListBox1.Clear

For i = 8 To 47
deger = Trim(Me.Controls("TextBox" & i).Text)

If deger <> "" Then
On Error Resume Next
varItem = Application.Match(deger, Me.ListBox1.List, 0)
If IsError(varItem) Then
Me.ListBox1.AddItem deger
End If
On Error GoTo 0
End If
Next i
Küçük ama önemli ipuçları
  • Trim → boşluk sorunlarını çözer
  • "abc" ile "ABC" aynı kabul edilsin dersen söyle, ekleyelim
  • İstersen kaç kere tekrar ettiğini de ListBox’ta gösterebiliriz
İstersen bir üst seviye yapalım:
  • 🔹 Sadece en çok tekrar edenleri listeleyelim
  • 🔹 Yanına adet sütunu ekleyelim
  • 🔹 TextBox’lar yerine dinamik kontrol yapalım
Hangisini istiyorsun? 😊
 
Katılım
24 Temmuz 2019
Mesajlar
480
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
Chatgpt çözümü;
Evet 👍 VBA ile gayet rahat yapılır.
(Muhtemelen Excel VBA kullanıyorsun, ona göre anlatıyorum.)
Ama önce netleştireyim:
👉 TextBox’lar bir UserForm üzerinde mi?
Aşağıdaki çözüm UserForm üzerindeki TextBox8–TextBox47 içindir.
Amaç
  • TextBox8 ile TextBox47 arasındaki değerleri al
  • Aynı olanları tek sefer yaz
  • ListBox’a ekle
En temiz VBA çözümü (Dictionary ile)
VBA’da Dictionary, tekrarları engellemek için en doğru yoldur.
1️⃣ Önce referans ekle
VBA editörde:

Tools > References

✔ Microsoft Scripting Runtime işaretle
2️⃣ Kod


Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

Dim i As Integer
Dim deger As String

For i = 8 To 47
deger = Trim(Me.Controls("TextBox" & i).Text)

If deger <> "" Then
If Not dict.Exists(deger) Then
dict.Add deger, Nothing
End If
End If
Next i

Me.ListBox1.Clear

Dim key As Variant
For Each key In dict.Keys
Me.ListBox1.AddItem key
Next key

Ne yapıyor bu kod?

✔ Boş TextBox’ları almaz

✔ Aynı değeri 1 kere ekler

✔ 2 tane de olsa, 10 tane de olsa fark etmez

✔ Otomatik çalışır
Alternatif (Referans eklemeden – basit yöntem)


Dim i As Integer
Dim deger As String
Dim varItem As Variant

Me.ListBox1.Clear

For i = 8 To 47
deger = Trim(Me.Controls("TextBox" & i).Text)

If deger <> "" Then
On Error Resume Next
varItem = Application.Match(deger, Me.ListBox1.List, 0)
If IsError(varItem) Then
Me.ListBox1.AddItem deger
End If
On Error GoTo 0
End If
Next i
Küçük ama önemli ipuçları
  • Trim → boşluk sorunlarını çözer
  • "abc" ile "ABC" aynı kabul edilsin dersen söyle, ekleyelim
  • İstersen kaç kere tekrar ettiğini de ListBox’ta gösterebiliriz
İstersen bir üst seviye yapalım:
  • 🔹 Sadece en çok tekrar edenleri listeleyelim
  • 🔹 Yanına adet sütunu ekleyelim
  • 🔹 TextBox’lar yerine dinamik kontrol yapalım
Hangisini istiyorsun? 😊
Üstadım size ne kadar teşekkür etsem azdır. TextBoxlar UserForm üzerindedir.
İfade ettiğiniz:
  • Trim → boşluk sorunlarını çözer
  • "abc" ile "ABC" aynı kabul edilsin dersen söyle, ekleyelim
  • İstersen kaç kere tekrar ettiğini de ListBox’ta gösterebiliriz
Şu özellikleri de eklesek muazzam bir şey olacaktır. Saygılar sunarım.
 
Son düzenleme:
Katılım
24 Temmuz 2019
Mesajlar
480
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
19-12-2025
@hamitcan hocam
varItem = Application.Match(deger, Me.ListBox3.List, 0) şu satırda "Type Mismach hatası veriyor.
VBA çözümü (Dictionary ile) olan kod düzgün çalıştı.
 
Son düzenleme:

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,763
Excel Vers. ve Dili
Excel 2019 Türkçe
Listbox ismini kontrol ettiniz mi ? her yerde ListBox3 mü ?
 
Üst