• DİKKAT

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

[ÇÖZÜLDÜ] Mükerrer isimlerin userformda görünmesini sağlamak..

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Katılım
5 Nisan 2006
Mesajlar
449
Excel Vers. ve Dili
Office Excel 2003
TÜRKÇE
Sevgili excel severler, kullanmakta olduğum dosyada bir sütundaki tekrarlanan değerleri userform üzerinde tek kayıt olarak görmek istiyorum. Yani bir nevi süzme işlemi yapılacak. Birden fazla tekrarlayan isimleri tek olarak alacak ve sağına da kaç kez tekrarlandığı yazılacak. Bu şekilde bir kod mümkün mü? İlgilenenlere teşekkür ederim....
 
Aşağıdaki kodları kullanabilirsiniz.

Kod:
Private Sub UserForm_Initialize()
Dim a, i As Long, b(), n As Long

With Range("c2:c" & [c65536].End(3).Row)
     a = .Value
     ReDim b(1 To UBound(a, 1), 1 To 3)
End With

With CreateObject("Scripting.Dictionary")
     .CompareMode = vbTextCompare
     For i = 1 To UBound(a, 1)
          If Not .exists(a(i, 1)) Then
               n = n + 1
               b(n, 1) = n  'Sıra No
               b(n, 2) = a(i, 1) 'İl Adı
               .Add a(i, 1), n
          End If
          b(.Item(a(i, 1)), 3) = b(.Item(a(i, 1)), 3) + 1 ' Sayısı
     Next
End With

With Me.ListBox1
    .Clear
    .ColumnCount = 3
    .ColumnWidths = "20;75;20"
    .List() = b
End With
End Sub
 
Bir örnek hazırladım. Forma bir adet liste kutusu (listbox) bir adet de düğme ekleyin ve aşağıdaki kodu, düğmeye atayarak deneyebilirsiniz.

Kod:
Private Sub CommandButton1_Click()
ListBox1.ColumnCount = 2
For c = 2 To [c65536].End(3).Row
il = Cells(c, "c")
    For l = 0 To ListBox1.ListCount - 1
    If ListBox1.List(l) = il Then GoTo atla
    Next
ListBox1.AddItem Cells(c, "c")
   ListBox1.List(x, 1) = WorksheetFunction.CountIf(Range("c1:c65536"), il)
x = x + 1
atla:
Next
End Sub
 
Ekli dosyayı incelyiniz.
Userform'un General bölümüne aşağıdaki kodları.(Alfabetik sıralama yapmak için)
Kod:
Private Function Sirala(Liste As Variant)
Dim i As Integer, j As Integer, x As Variant
    For i = LBound(Liste) To UBound(Liste) - 1
        For j = i + 1 To UBound(Liste)
            If StrComp(Liste(i, 0), Liste(j, 0), vbTextCompare) = 1 Then
                x = Liste(j, 0)
                Liste(j, 0) = Liste(i, 0)
                Liste(i, 0) = x
            End If
        Next j
    Next i
    Sirala = Liste
End Function
Initialize olayına aşağıdaki kodu yazınız.:cool:
Kod:
Private Sub UserForm_Initialize()
Dim i As Long
Sheets("Sayfa1").Select
For i = 2 To Cells(65536, "C").End(xlUp).Row
    If Cells(i, "D").Value <> "" And Cells(i, "D").Value > 1 Then
        ListBox1.AddItem Cells(i, "C").Value
    End If
Next i
Liste = ListBox1.List
ListBox1.List = Sirala(Liste)
End Sub
 
Eğer formunuza bir adet listview ekler ve bir düğmeye aşağıdaki kodu tanımlarsanız, listeniz listviewde daha görsel ve sıralı bir şekilde listelenir.

Kod:
ListView1.View = lvwReport
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Add , , "il"
ListView1.ColumnHeaders.Add , , "kayıt sayısı"
For c = 2 To [c65536].End(3).Row
il = Cells(c, "c")
    For l = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(l) = il Then GoTo atla
    Next
x = x + 1
ListView1.ListItems.Add , , Cells(c, "c")
   ListView1.ListItems(x).SubItems(1) = WorksheetFunction.CountIf(Range("c1:c65536"), il)
atla:
Next
ListView1.Sorted = True
ListView1.SortOrder = 1
ListView1.SortKey = 1
ListView1.Sorted = False
 
Say&#305;n Ripek, Say&#305;n Mesleki ve Say&#305;n orion2
Her &#252;&#231;&#252;n&#252;ze de &#231;ok te&#351;ekk&#252;r ederim. De&#287;i&#351;ik alternatifler sunmu&#351;sunuz. Listbox'a al&#305;rken, sadece tekrarlayan isimleri ve sa&#287;&#305;na da ka&#231; kez tekrarland&#305;&#287;&#305;n&#305; almas&#305;n&#305; istemi&#351;tim. Bu &#351;ekilde bir d&#252;zenleme yap&#305;labilir mi. Yani 1 kez yaz&#305;lan ismi listeye almas&#305;na gerek yok. Sayg&#305;lar&#305;mla....
 
Sayın Ripek, Sayın Mesleki ve Sayın orion2
Her üçünüze de çok teşekkür ederim. Değişik alternatifler sunmuşsunuz. Listbox'a alırken, sadece tekrarlayan isimleri ve sağına da kaç kez tekrarlandığını almasını istemiştim. Bu şekilde bir düzenleme yapılabilir mi. Yani 1 kez yazılan ismi listeye almasına gerek yok. Saygılarımla....

Ekli dosyayı inceleyiniz.:cool:
D sütunundaki formülleri istediğiniz kadar çoğaltabilirsiniz.:cool:
 
Kodlar&#305; a&#351;a&#287;&#305;daki &#351;ekilde revize ediniz.

Kod:
Private Sub UserForm_Initialize()
Dim a, i As Long, b(), c(), n, s As Long

With Range("c2:c" & [c65536].End(3).Row)
     a = .Value
     ReDim b(1 To UBound(a, 1), 1 To 3)
     ReDim c(1 To UBound(a, 1), 1 To 3)
End With

With CreateObject("Scripting.Dictionary")
     .CompareMode = vbTextCompare
     For i = 1 To UBound(a, 1)
          If Not .exists(a(i, 1)) Then
               n = n + 1
               b(n, 1) = n  'S&#305;ra No
               b(n, 2) = a(i, 1) '&#304;l Ad&#305;
               .Add a(i, 1), n
          End If
          b(.Item(a(i, 1)), 3) = b(.Item(a(i, 1)), 3) + 1 ' Say&#305;s&#305;
     Next
End With

For i = 1 To UBound(b, 1)
    If b(i, 3) > 1 Then
        s = s + 1
        c(s, 1) = s
        c(s, 2) = b(i, 2)
        c(s, 3) = b(i, 3)
    End If
Next i

With Me.ListBox1
    .Clear
    .ColumnCount = 3
    .ColumnWidths = "20;50;20"
    .List() = c
End With
End Sub
 
Sevgili Orion2 ve Ripek, her ikinize de te&#351;ekk&#252;r eder, sayg&#305;lar sunar&#305;m. Ayr&#305;ca Bayram&#305;n&#305;z&#305; da kutlar, size ve ailenize sa&#287;l&#305;kl&#305; ve mutlu nice bayramlar temenni ederim. Sayg&#305;lar&#305;mla...
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst