ListBox üzerinde listelenen verilerden tek olanları sayma

Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Forum içerisinde yaptığım aramada bazı uygulamalar buldum ve bunların içerisinde aşağıdaki kodlar benim istediğim sayma işlemini yapıyor ancak elimdeki veri miktarı çok fazla ve bu kodlar ile işlem önce sayıp sonra tek olanları ListBox içerisine aldığı için çok uzun sürüyor.
Bunun yerine ListBox içerisine açılışta UserForm_Initialize ile verileri zaten alıyoruz. Alınan bu verilerin içerisinde tek olanları saydırsak ve sadece sayılan verileri label yardımı ile görüntülesek. Bana gerekli olan tek olanların sayısı ayrıca tek olanların görüntülenmesine gerek yok tüm listemin görüntülenmesi yeter yani 3500 (hergün artıyor) veri içerisinde 1200 civarında tek olan var ve ben bu tek olan sayısını Formu açtığımda görüntülemek istiyorum tabii beni kasmadan :(
Kod:
Private Sub CommandButton1_Click()
Dim AllCells As Range, Cell As Range
    Dim ciftdegil As New Collection
    Dim i As Integer, j As Integer
    Dim Swap1, Swap2, Item
    Set AllCells = Range("E1:E65536")
        On Error Resume Next
    For Each Cell In AllCells
        ciftdegil.Add Cell.Value, CStr(Cell.Value)
    Next Cell
    On Error GoTo 0
    With UserForm1
              .Label1.Caption = "Benzersiz Öğe Sayısı : " & ciftdegil.Count
    End With
       For i = 1 To ciftdegil.Count - 1
        For j = i + 1 To ciftdegil.Count
            If ciftdegil(i) > ciftdegil(j) Then
                Swap1 = ciftdegil(i)
                Swap2 = ciftdegil(j)
                ciftdegil.Add Swap1, before:=j
                ciftdegil.Add Swap2, before:=i
                ciftdegil.Remove i + 1
                ciftdegil.Remove j + 1
            End If
        Next j
    Next i
    
    For Each Item In ciftdegil
        UserForm1.ListBox1.AddItem Item
    Next Item
        UserForm1.Show
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Hangi sütundaki veriler tekrarsız olarak sayılacaktır.
 
Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Hocam saygılar
E1:E65536 sütunundaki tek olanlar sayılacak.

Form açıldığında ListBox üzerine "A1:AV3510" arasında veri var ve bu veriler içerisinde "E" sütununda adresler mevcut ben yukardaki kod içerisinde "E" sütununa göre ayarlama yaptım ama bahsettiğim gibi önce sayıp sonra ListBox a veri aldığı için işlem çok uzun sürüyor ve hergün veri girişi yaparak listeyi şişirdiğimizden dolayı tek kayıt sayımızı merak ediyoruz.

Bize gerekli olan ListBox içerisine alınan veri içerisinde "E" Sütununda bulunan kayıtların tek olanlarının sayısını görmek
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kodu denermisiniz.

Kod:
son = [e65536].End(3).Row
MsgBox Evaluate("SUMPRODUCT((E1:E" & son & "<>" & """" & """" & ")/COUNTIF(E1:E" & son & _
",E1:E" & son & "&" & """" & """" & "))")
Not: A&#351;a&#287;&#305;daki linkte Sn Ali beyin &#246;nerdi&#287;i fonksiyonun koda &#231;evrilmi&#351; halidir.

Ka&#231; adet farkl&#305; say&#305; var nas&#305;l bulunur
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Ekli dosyayı inceleyiniz.:cool:
Kod:
Sub listele()
Dim i As Long, toplam As Double
ListBox1.Clear
ReDim myarr(1 To 1, 1 To 1)
For i = 1 To Cells(65536, "E").End(xlUp).Row
    If Cells(i, "E").Value Mod 2 = 1 Then
        a = a + 1
        ReDim Preserve myarr(1 To 1, 1 To a)
        myarr(1, a) = Cells(i, "E").Value
        toplam = toplam + Cells(i, "E").Value
    End If
Next
ListBox1.Column = myarr
Label2.Caption = Format(toplam, "#,##0.00")
End Sub
Kod:
Private Sub UserForm_Initialize()
Call listele
End Sub
 
Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Say&#305;n Orion Hocam Leventm hocama cevap yazarken istedi&#287;im cevap sizden gelmi&#351; te&#351;ekk&#252;rler.

say&#305;n Leventm Hocam Orion Hocam&#305;n g&#246;nderdi&#287;i kodlar i&#351; g&#246;r&#252;yor sizin kodlar&#305;n&#305;zda &#231;ok h&#305;zl&#305; ikisi aras&#305;nda karars&#305;z kald&#305;m. Sizin kodunuzu UserForm_Initialize i&#231;erisine ekledim ve a&#231;&#305;l&#305;&#351;ta &#246;nce MsjBox i&#231;erisinde say&#305;y&#305; g&#246;steriyor sonra Form a&#231;&#305;l&#305;yor. Sizin kodunuzu bir button a eklesek ve sadece button u t&#305;klad&#305;&#287;&#305;m&#305;zda ..... say&#305;s&#305; kadar tek kay&#305;t var dese m&#252;mk&#252;nm&#252; acaba birde son olarak 1201.999999 olarak &#231;&#305;k&#305;yor. 1202 kay&#305;t var k&#252;s&#252;rat&#305; yok edebilirmiyiz


Sonradan Farkettim Orion Hocam kodlar say&#305;sal de&#287;erlerde okey ama metin oldumu sorun &#231;&#305;k&#305;yor. Metin sayacak &#351;ekilde de&#287;i&#351;tirmek m&#252;mk&#252;nm&#252; acaba
 
Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Sayın Orion Hocam ekte sadece E sütununda adresler var buna göre uyarlanabilirmi
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Alternatif olarak a&#351;a&#287;&#305;daki kodu deneyin.

Kod:
Private Sub UserForm_Initialize()
For a = 1 To [e65536].End(3).Row
If WorksheetFunction.CountIf(Range("e1:e" & a), Cells(a, "e")) = 1 Then c = c + 1
Next
Label2 = c
End Sub
 
Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Hocam &#351;imdi oldu a&#231;&#305;l&#305;&#351; etkilenmiyor sadece 1,2 saniye beklemesi artt&#305; ama bu bekleme de normal say&#305;l&#305;r.

Tekrar &#231;ok te&#351;ekk&#252;rler. Sayg&#305;lar
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Sanırım problem çözüldü.:cool:
 
Katılım
19 Ağustos 2005
Mesajlar
201
Excel Vers. ve Dili
Excel 2003 Tr
Evet Orion2 Hocam Leventm Hocam sayesinde sorun halloldu ama sizde her zaman oldu&#287;u gibi bug&#252;nde ilgi ve alakan&#305;z&#305; esirgemediniz sizede &#231;ok te&#351;ekk&#252;rler ve sayg&#305;lar sunar&#305;m
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Evet Orion2 Hocam Leventm Hocam sayesinde sorun halloldu ama sizde her zaman olduğu gibi bugünde ilgi ve alakanızı esirgemediniz sizede çok teşekkürler ve saygılar sunarım
Rica ederim.
Saygılar bizden.:cool:
 
Üst