• DİKKAT

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

Sıralama Sonuçlarının Listview'de Görüntülenmesi

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam,
Sayın Evren Gizlen Hocamız'dan istifade ile aşağıdaki kodları kullanıyorum.
c1 sayfasının A3 hücresinden itibaren sıralama yapıyor.
Ancak ben excel sayfasına değil, Userform1'deki listviewde sıralanmasını istiyorum.

Kod:
Sub ÇEŞİT_NORMAL_SIRALAMA_VBA() 'NORMAL SIRALAMA
Dim c1, insört As Worksheet, son2 As Long, z As Object, n As Long
Dim liste(), myarr(), i, j As Long, deg As String

Set c1 = Sheets("Çeşitler-1")
Set insört = Sheets("insört")
son2 = insört.Cells(65536, "G").End(xlUp).Row

c1.Range("A3:K65536").ClearContents

If son2 < 2 Then Exit Sub
liste = insört.Range("G2:L" & son2).Value
ReDim myarr(1 To 5, 1 To 65536)
Set z = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(liste, 1)
    deg = liste(i, 1) & "-" & liste(i, 3) & "-" & liste(i, 4)
    If Not z.exists(deg) Then
        n = n + 1
        z.Add deg, n
        myarr(1, n) = liste(i, 1)
        myarr(2, n) = liste(i, 3)
        myarr(3, n) = liste(i, 4)
                
    End If
    myarr(4, z.Item(deg)) = myarr(4, z.Item(deg)) + liste(i, 6)
    myarr(5, z.Item(deg)) = myarr(5, z.Item(deg)) + 1
       
Next i
Application.ScreenUpdating = False
c1.Range("A3").Resize(n, 5) = Application.Transpose(myarr)
Application.ScreenUpdating = True
MsgBox "Çeşitler-1 ve Slide Arıza Dağılımları (NORMAL) listelenmiştir.", vbInformation

End Sub
mesela ben myarr(1, n) yerine

UserForm1.ListView1.ListItems.Add
UserForm1.ListView1.ListItems(n).SubItems (2)


şeklinde yazdım ancak, c1.Range("A3").Resize(n, 5) olan kısmı listview kodlarına çeviremedim.

Yardımcı olabilirseniz çok sevinirim.
İyi çalışmalar
 
Son düzenleme:
Selam,
Sayın Evren Gizlen Hocamız'dan istifade ile aşağıdaki kodları kullanıyorum.
c1 sayfasının A3 hücresinden itibaren sıralama yapıyor.
Ancak ben c1 sayfasına değil de Userform1'deki listview sıralanmasını istiyorum.

Kod:
Sub ÇEŞİT_NORMAL_SIRALAMA_VBA() 'NORMAL SIRALAMA
Dim c1, insört As Worksheet, son2 As Long, z As Object, n As Long
Dim liste(), myarr(), i, j As Long, deg As String

Set c1 = Sheets("Çeşitler-1")
Set insört = Sheets("insört")
son2 = insört.Cells(65536, "G").End(xlUp).Row

c1.Range("A3:K65536").ClearContents

If son2 < 2 Then Exit Sub
liste = insört.Range("G2:L" & son2).Value
ReDim myarr(1 To 5, 1 To 65536)
Set z = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(liste, 1)
    deg = liste(i, 1) & "-" & liste(i, 3) & "-" & liste(i, 4)
    If Not z.exists(deg) Then
        n = n + 1
        z.Add deg, n
        myarr(1, n) = liste(i, 1)
        myarr(2, n) = liste(i, 3)
        myarr(3, n) = liste(i, 4)
                
    End If
    myarr(4, z.Item(deg)) = myarr(4, z.Item(deg)) + liste(i, 6)
    myarr(5, z.Item(deg)) = myarr(5, z.Item(deg)) + 1
       
Next i
Application.ScreenUpdating = False
c1.Range("A3").Resize(n, 5) = Application.Transpose(myarr)
Application.ScreenUpdating = True
MsgBox "Çeşitler-1 ve Slide Arıza Dağılımları (NORMAL) listelenmiştir.", vbInformation

End Sub
mesela ben myarr(1, n) yerine

UserForm1.ListView1.ListItems.Add
UserForm1.ListView1.ListItems(n).SubItems (2)


şeklinde yazdım ancak, c1.Range("A3").Resize(n, 5) olan kısmı listview kodlarına çeviremedim.

Yardımcı olabilirseniz çok sevinirim.
İyi çalışmalar

o kod bir diziyi bir kerede çalışma sayfasına atar.
Siz çalışma sayfasına listviewden veri atacağınız için(Ben öyle anladım) o kodu kullanamazsınız.
Listviewde döngüye girerek satır satır atmanız lazım.:cool:
Şöyle yapın.Hem listviewe veriyi diziden almak daha hızlı çalışır direk sayfadan veri almaktan
dizideki veriyi listviewe alın ve diziyi o yöntemle sayfaya atın.:cool:
 
Ben aşağıdaki kodları kullanıyorum. İsterseniz bir deneyin..

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
' LISTVIEW SÜTUNLARINDA SIRALAMA YAPAR
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
 
o kod bir diziyi bir kerede çalışma sayfasına atar.
Siz çalışma sayfasına listviewden veri atacağınız için(Ben öyle anladım) o kodu kullanamazsınız.
Listviewde döngüye girerek satır satır atmanız lazım.:cool:
Şöyle yapın.Hem listviewe veriyi diziden almak daha hızlı çalışır direk sayfadan veri almaktan
dizideki veriyi listviewe alın ve diziyi o yöntemle sayfaya atın.:cool:
Selam Sayın Evren Gizlen hocam,

Ancak ben c1 sayfasına değil de Userform1'deki listview sıralanmasını istiyorum.
şeklindeki ifademi
Ancak ben excel sayfasına değil, Userform1'deki listviewde sıralanmasını istiyorum.
şeklinde değiştirdim.
Tam anlatamamışım. Kusura bakmayın. Sayfadan alıp Listviewde sıralama olsun istiyorum.
Mesela 1.mesajımdaki kodlar ile
insört adlı sayfadan verileri alıp
çeşitler adlı sayfada benzersiz şekilde sıralıyorum.

isteğim insört asdlı sayadan veriler alınıp
Listviewde benzersiz şekilde sıralanması

İyi çalışmalar.
 
Ben aşağıdaki kodları kullanıyorum. İsterseniz bir deneyin..

Selam Sayın ReBiwAr,
İstediğim Bu değil. Ancak Yine de çok teşekkür ederim. Çok faydası oldu.

Benim İstediğim sıralama normal azalan artan sıralama değil.
Kodlara yeniden bir bakınız isterseniz. insört adlı sayfadaki 3 sütunu birden sorguluyor. benzer olmayanları listeliyor.
yani
A A A
A A A
A A B
A A B
A A C
A A C
A B C
A B C
B A C
B A C

ise
A A A
A A B
A A C
A B C
B A C
olarak sıralama yapıyor. ve bir kaç özelliği daha var.

İyi çalışmalar.
 
Lütfen userformunuzu ve örnek dosyanızı hazırlayarak sorunuzu sorunuz.
Dosaynızı olduğu gibi yollamanız a gerek yok .
Aşağıdaki gibi örnek bir dosya yollayablirisniz.
Dosyanız ektedir.
Kod:
Private Sub UserForm_Initialize()
Dim insört As Worksheet, son2 As Long, z As Object, n As Long
Dim liste(), myarr(), i, j As Long, deg As String
ListView1.View = lvwReport
ListView1.FullRowSelect = True
Set insört = Sheets("insört")
son2 = insört.Cells(65536, "G").End(xlUp).Row
ListView1.ColumnHeaders.Add , , insört.Range("G1"), 100
For i = 9 To 12
    ListView1.ColumnHeaders.Add , , insört.Cells(1, i), 100
Next
If son2 < 2 Then Exit Sub
liste = insört.Range("G2:L" & son2).Value
ReDim myarr(1 To 5, 1 To 65536)
Set z = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(liste, 1)
    deg = liste(i, 1) & "-" & liste(i, 3) & "-" & liste(i, 4)
    If Not z.exists(deg) Then
        n = n + 1
        z.Add deg, n
        myarr(1, n) = liste(i, 1)
        myarr(2, n) = liste(i, 3)
        myarr(3, n) = liste(i, 4)
                
    End If
    myarr(4, z.Item(deg)) = myarr(4, z.Item(deg)) + liste(i, 6)
    myarr(5, z.Item(deg)) = myarr(5, z.Item(deg)) + 1
       
Next i
For i = 1 To n
    ListView1.ListItems.Add , , myarr(1, i)
    ListView1.ListItems(i).SubItems(1) = myarr(2, i)
    ListView1.ListItems(i).SubItems(2) = myarr(3, i)
    ListView1.ListItems(i).SubItems(3) = myarr(4, i)
    ListView1.ListItems(i).SubItems(4) = myarr(5, i)
Next i
End Sub
 

Ekli dosyalar

Selam Sayın ReBiwAr,
İstediğim Bu değil. Ancak Yine de çok teşekkür ederim. Çok faydası oldu.

Benim İstediğim sıralama normal azalan artan sıralama değil.
Kodlara yeniden bir bakınız isterseniz. insört adlı sayfadaki 3 sütunu birden sorguluyor. benzer olmayanları listeliyor.
yani
A A A
A A A
A A B
A A B
A A C
A A C
A B C
A B C
B A C
B A C

ise
A A A
A A B
A A C
A B C
B A C
olarak sıralama yapıyor. ve bir kaç özelliği daha var.

İyi çalışmalar.

Özür dilerim yanlış anlamışım..
 
Lütfen userformunuzu ve örnek dosyanızı hazırlayarak sorunuzu sorunuz.
Dosyanızı olduğu gibi yollamanıza gerek yok .
Aşağıdaki gibi örnek bir dosya yollayablirisniz.
Dosyanız ektedir.

Sayın Evren Gizlen Hocam, verdiğiniz kodları asıl dosyama uyarladım. Süper oldu. Ellerinize sağlık. Gerçekten harikasınız. Çok Çok Teşekkür ederim.
Sayfa hücrelerine yazmak yerine listview'e aktarınca Kodlar çok çok hızlı çalıştığını gördüm. Çok güzel.

kolon başlıkları otomatik ilk satırlar eklendi. Bunu nasıl yaptınız?

Sizden bir önceki Sayın ReBiwAr'ın mesajdaki sıralama kodlarını listview'e uyarladım.
Ancak, galiba sayıları da metin olarak sıralıyor. Mesela,
1
2
3
4
yerine
1
10
11
12
2
20
diye sıralıyor.
bahsi geçen kodlarda ne gibi değişiklik yapmamız gerekir.?

İyi çalışmalar.
 
Son düzenleme:
Özür dilerim yanlış anlamışım..

Sayın ReBiwAr,
Niye özür diliyorsunuz ki? Tam nlatamadığımdan dolayı asıl benim özür dilemem gerekiyor.
Hem sizin cevabınız sorudan farklı olsa da, listview ile alakadar ve benim birkaç şey daha öğrenmeme vesile olmasından olayı ayrıca Teşekkür ederim.
Bir sorum olacak,
Sanırım Sayıları da metin olarak sıralıyor. mesela;
1
2
3
4
9
10
11
12
yerine
1
10
11
12
2
3
4
2
20
21 gibi sıralıyor.
bu konu da yardımcı olabilirseniz sevinirim.
İyi çalışmalar.
 
Geri
Üst