Listviewde Satır Sayısını Hesaplama ve Sıralama İşlemleri

Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Konu başlığından da anlaşılacağı gibi listviewde belirli bir sütundaki verilere göre sıralama yapmayı ve textbox a toplam görünen satır sayısını yazdırmayı sağlayan kodları yazmam da yardımlarınızı talep ediyorum.

Bununla ilgili forumda arama yaptım ama maalesef bulamadım. Mevcut bir konu varsa ve ben bulamadıysam şimdiden kusuruma bakmayın, var olan linki benimle paylaşırsanız da yardım etmiş olursunuz.
 
Katılım
31 Aralık 2014
Mesajlar
1,845
Excel Vers. ve Dili
Excel 2010
Konu başlığından da anlaşılacağı gibi listviewde belirli bir sütundaki verilere göre sıralama yapmayı ve textbox a toplam görünen satır sayısını yazdırmayı sağlayan kodları yazmam da yardımlarınızı talep ediyorum.

Bununla ilgili forumda arama yaptım ama maalesef bulamadım. Mevcut bir konu varsa ve ben bulamadıysam şimdiden kusuruma bakmayın, var olan linki benimle paylaşırsanız da yardım etmiş olursunuz.
Merhaba.
Satır sayısı için:

Kod:
 TextBox1 = ListView1.ListItems.Count
Sıralama içinde aşağıdaki linkleri bir inceleyin.
http://www.excel.web.tr/f48/listview-sutun-siralama-t41825.html
http://www.excel.web.tr/f48/listview-syralama-sorunu-t104223.html
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
Çok teşekkür ederim. Satır sayma işlemi başarılı oldu.:eek:k::

Sıralama için şöyle birşey buldum. Ama sıralamayı sadece sütuna tıkladığımızda yapıyor ve sayıya göre sıralama yapmıyor. Sayılarıda metin olarak algıladığı için büyükten küçüğe doğru sıralama yaptığımda 90 ı, 800 den önce geliyor, çünkü ilk harfi baz alıyor. Bu kodlarda değişiklik yaparak veya başka kodlarla sayıya göre sıralama yapabilir miyiz?

Kod:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
On Error Resume Next
Dim i As Integer, J As Integer
Dim x As Integer
Select Case ColumnHeader.Index - 1

Case 2, 3

ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

For i = 1 To ListView1.ListItems.Count

ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = ListView1.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
Next i

Case 1

x = ColumnHeader.Index - 1
ListView1.Sorted = False
ListView1.SortKey = x

If ColumnHeader.Index = 1 Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Tag = ListView1.ListItems(i).Text

If CDbl(ListView1.ListItems(i).Text) >= 0 Then
ListView1.ListItems(i).Text = CDbl(ListView1.ListItems(i).Text)
Else
ListView1.ListItems(i).Text = "&" & CDbl(ListView1.ListItems(i).Text)
End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Text = ListView1.ListItems(i).Tag
Next i
Else

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Tag = ListView1.ListItems(i).ListSubItems(x).Text

If ListView1.ListItems(i).ListSubItems(x).Text <> "" Then
ListView1.ListItems(i).ListSubItems(x).Text = ListView1.ListItems(i).ListSubItems(x).Text
Else
ListView1.ListItems(i).ListSubItems(x).Text = "&" & ListView1.ListItems(i).ListSubItems(x).Text

End If
Next i

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Text = _
ListView1.ListItems(i).ListSubItems(x).Tag
Next i

End If

Case Else
ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1

If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If

ListView1.Sorted = True

End Select
End Sub
 
Katılım
31 Aralık 2014
Mesajlar
1,845
Excel Vers. ve Dili
Excel 2010
Çok teşekkür ederim. Satır sayma işlemi başarılı oldu.:eek:k::

Sıralama için şöyle birşey buldum. Ama sıralamayı sadece sütuna tıkladığımızda yapıyor ve sayıya göre sıralama yapmıyor. Sayılarıda metin olarak algıladığı için büyükten küçüğe doğru sıralama yaptığımda 90 ı, 800 den önce geliyor, çünkü ilk harfi baz alıyor. Bu kodlarda değişiklik yaparak veya başka kodlarla sayıya göre sıralama yapabilir miyiz?
Merhaba
Sayıları formatlı geldiği takdirde de sıralama istediğiniz şekilde
olacaktır.Örnek dosya
eklermisiniz.
 
Katılım
15 Ocak 2011
Mesajlar
64
Excel Vers. ve Dili
2011 türkçe
İnternette yaptığım detaylı araştırmada aşağıdaki kodu buldum ve tamda istediğim gibi oldu. Aynı sorunu yaşayanlar için paylaşıyorum.

UserForm sayfasına aşağıdaki kodları ekleyin. Fonksiyon; tarih, pozitif sayı, negatif sayıları sıralayabiliyor.

Kod:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
SortListView ListView1, ColumnHeader
End Sub

Public Sub SortListView(ListViewEVN As ListView, ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim strItem As String, intMaxItemLength As Long, intCounter As Long
    With ListViewEVN
        .Sorted = False
        .ColumnHeaders.Add , , , 0
    
        If ColumnHeader.Index = 1 Then
            strItem = .ListItems(1)
        Else
            strItem = .ListItems(1).SubItems(ColumnHeader.Index - 1)
        End If
    End With
    
    If IsDate(strItem) Then
        With ListViewEVN
            If ColumnHeader.Index = 1 Then
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(.ListItems(intCounter))
                    .ListItems(intCounter).SubItems(.ColumnHeaders.Count - 1) = Format(strItem, "yyyymmddHHMMSS")
                Next
            Else
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(.ListItems(intCounter).SubItems(ColumnHeader.Index - 1))
                    .ListItems(intCounter).SubItems(.ColumnHeaders.Count - 1) = Format(strItem, "yyyymmddHHMMSS")
                Next
            End If
            .SortKey = .ColumnHeaders.Count - 1
        End With

    ElseIf IsNumeric(strItem) Then
        With ListViewEVN
            intMaxItemLength = 0
            If ColumnHeader.Index = 1 Then
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(Replace(Replace(.ListItems(intCounter), ",", ""), ".", ""))
                    If Len(strItem) > intMaxItemLength Then
                        intMaxItemLength = Len(strItem)
                    End If
                Next
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(Replace(Replace(.ListItems(intCounter), ",", ""), ".", ""))
                    .ListItems(intCounter).SubItems(.ColumnHeaders.Count - 1) = "0" & String(intMaxItemLength - Len(strItem), "0") & strItem
                Next
            Else
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(Replace(Replace(.ListItems(intCounter).SubItems(ColumnHeader.Index - 1), ",", ""), ".", ""))
                    If Len(strItem) > intMaxItemLength Then
                        intMaxItemLength = Len(strItem)
                    End If
                Next
                For intCounter = 1 To .ListItems.Count
                    strItem = Trim(Replace(Replace(.ListItems(intCounter).SubItems(ColumnHeader.Index - 1), ",", ""), ".", ""))
                    .ListItems(intCounter).SubItems(.ColumnHeaders.Count - 1) = "0" & String(intMaxItemLength - Len(strItem), "0") & strItem
                Next
            End If
            .SortKey = .ColumnHeaders.Count - 1
        End With
    Else
        ListViewEVN.SortKey = ColumnHeader.Index - 1
    End If
    
    With ListViewEVN
        .SortOrder = 1 - .SortOrder
        .Sorted = True
        .ColumnHeaders.Remove .ColumnHeaders.Count
    End With
End Sub
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,873
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
İnternette yaptığım detaylı araştırmada aşağıdaki kodu buldum ve tamda istediğim gibi oldu. Aynı sorunu yaşayanlar için paylaşıyorum.

UserForm sayfasına aşağıdaki kodları ekleyin. Fonksiyon; tarih, pozitif sayı, negatif sayıları sıralayabiliyor.

Aynı sütuna bir kaç tane farklı tarihler, bir kaç tane farklı rakamlar, bir kaç tanede sayı olmayan farklı değerler yazın ve kodu çalıştırıp sonucu irdeleyiniz.
alternatif kod

Kod:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
siralamaListView ListView1, ColumnHeader
End Sub
Public Sub siralamaListView(ListViewbbb As ListView, ByVal ColumnHeader As MSComctlLib.ColumnHeader)

For i = 1 To ListViewbbb.ListItems.Count
deg1 = ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
deg2 = ListViewbbb.ListItems(i).Text

If ColumnHeader.Index > 1 Then

If IsNumeric(deg1) = True And Len(deg1) = 10 And IsDate(deg1) = True Then
deg1 = _
Format(CDate(deg1), "mm/dd/yyyy")
ElseIf IsNumeric(deg1) = True Then
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = _
Format(deg1, "000000000000.00")
Else
End If

Else

If IsNumeric(deg2) = True And _
Len(deg2) = 10 And _
IsDate(deg2) = True Then
ListViewbbb.ListItems(i).Text = Format(CDate(deg2), "mm/dd/yyyy")
ElseIf IsNumeric(deg2) = True Then
ListViewbbb.ListItems(i).Text = Format(deg2, "000000000000.00")
Else
End If

End If
Next i

ListViewbbb.Sorted = True
ListViewbbb.SortKey = ColumnHeader.Index - 1
If ListViewbbb.SortOrder = lvwAscending Then
ListViewbbb.SortOrder = lvwDescending
Else
ListViewbbb.SortOrder = lvwAscending
End If
ListViewbbb.Sorted = False

For i = 1 To ListViewbbb.ListItems.Count
deg1 = ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text
deg2 = ListViewbbb.ListItems(i).Text
If ColumnHeader.Index > 1 Then

If Len(deg1) = 10 Then
If IsNumeric(deg1) = True Then
If IsDate(deg1) = True Then
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = Format(deg1, "dd.mm.yyyy")
ay = Mid(deg1, 1, 2)
gun = Mid(deg1, 4, 2)
yıl = Mid(deg1, 7, 4)
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = Format(gun & "." & ay & "." & yıl, "dd.mm.yyyy")

Else
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = deg1 * 1
End If

ElseIf IsNumeric(deg1) = True Then
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = deg1 * 1
End If
Else
If IsNumeric(deg1) = True Then
ListViewbbb.ListItems(i).ListSubItems(ColumnHeader.Index - 1).Text = deg1 * 1

End If
End If

Else


If Len(deg2) = 10 Then
If IsNumeric(deg2) = True Then
If IsDate(deg2) = True Then
ListViewbbb.ListItems(i).Text = Format(deg2, "dd.mm.yyyy")
ay = Mid(deg2, 1, 2)
gun = Mid(deg2, 4, 2)
yıl = Mid(deg2, 7, 4)
ListViewbbb.ListItems(i).Text = Format(gun & "." & ay & "." & yıl, "dd.mm.yyyy")
Else
ListViewbbb.ListItems(i).Text = deg2 * 1
End If
ElseIf IsNumeric(deg2) = True Then
ListViewbbb.ListItems(i).Text = deg2 * 1
End If
Else
If IsNumeric(deg2) = True Then
ListViewbbb.ListItems(i).Text = deg2 * 1
End If
End If

End If




Next i
End Sub
 
Üst