Redim ile elde ettiğimiz dizinin içinde küçükten büyüğe sıralama

Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Selam arkadaşlar,

Kod:
Dim a, i, satir, k, b(), z
Set s1 = Sheets("veri")
Set s2 = Sheets("SONUC")
'*******************************************
a = s1.Range("a2:v" & s1.[a65536].End(3).Row).Value   'veri sayfasındaki veriler a değişkenine tanımlanıyor.
ReDim b(1 To UBound(a, 1), 1 To 70)  ' Dizinin boyutu belirleniyor. Not: Burada elle belirledim buranın normalde bilgisayara alınacak değerin sayısı hesaplattırılıp onun yazdırılması gerekiyor. Böyle ilerde sorun olabilir.
With CreateObject("Scripting.Dictionary")  'Dictionary nesnesi yaratılıyor.
    .CompareMode = vbTextCompare
    For i = 1 To UBound(a, 1)
        
        If CDate(a(i, 2)) >= CDate(TextBox1) And CDate(a(i, 2)) <= CDate(TextBox2) Then 'Eğer a değişkeninin 2. verisi girilen tarihler arasında ise
          If (a(i, 4)) = "ALIS" Then
            If Not IsEmpty(a(i, 5)) Then ' a değişkeninin 7.elemanı boş değil ise yani sayı sutununda dğer var ise
                z = a(i, 5) ' birleştirmedim   & ":" & a(i, 7) ' a değişkeninin 5. ve 7. verilerini z'de birleştir.
                If Not .exists(z) Then  ' z değişkeni yok ise
                    
                    satir = satir + 1
                    
                    b(satir, 1) = satir ' Dizinin 1.elemanı Sıra No
                    b(satir, 2) = a(i, 5)  'Dizinin 2.elemanı mlz kodu
                    b(satir, 3) = a(i, 6)  'Dizinin 3.elemanı mlz adı
                    b(satir, 4) = a(i, 7)  'Dizinin 4.elemanı mlz brim
                    .Add z, satir
                
                'if not .exixts(z) ninki
                End If
                    b(.Item(z), 5) = b(.Item(z), 5) + a(i, 8) ' Dizinin 4.elemanına  (a değişkeninin 8 verisi toplanıyor) yani gelen toplanıyor aynı ise
                    b(.Item(z), 6) = b(.Item(z), 6) + a(i, 10) '  Dizinin 5.elemanına  (a değişkeninin 9 verisi toplanıyor) yani iade toplanıyor aynı ise
            
'                    b(.Item(z), 5) = b(.Item(z), 5) + a(i, 8)  ' Dizinin 4.elemanına  (a değişkeninin 8 verisi toplanıyor) yani gelen toplanıyor aynı ise
'                    b(.Item(z), 6) = b(.Item(z), 6) + a(i, 9) '  Dizinin 5.elemanına  (a değiş
            
            
            
            ' İF NOT ISEMPTY(a(i, 5)  inki
            End If
 
 
 
End If
        
        
        
        
'TARİH İF
        End If
    Next
End With
 
''''  işte burada list box a aktarmadan  b dizinin ikinci verisine göre çüçükten büyüğe sıralama yapmak istiyorum nasıl yapılır
 
If satir > 0 Then ListBox1.Column = Application.Transpose(b)
Kod:
End With
 
''''  işte burada list box a aktarmadan  b dizinin ikinci verisine göre çüçükten büyüğe sıralama yapmak istiyorum nasıl yapılır
 
If satir > 0 Then ListBox1.Column = Application.Transpose(b)
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Tek boyutlu array için aşağıdaki fonksiyonu kullanabilirsiniz...

Kod:
Function TheSort(myArray)
Dim unsorted As Boolean, L As Long, tmpMem

    unsorted = True
    
    Do While unsorted
        unsorted = False
        For L = LBound(myArray) To UBound(myArray) - 1
            If myArray(L) > myArray(L + 1) Then
                tmpMem = myArray(L)
                myArray(L) = myArray(L + 1)
                myArray(L + 1) = tmpMem
                unsorted = True
                Exit For
            End If
        Next
    Loop
    
    TheSort = myArray
End Function
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Benimki sanırım tek boyutlu değil hocam. Benimkine uygun nasıl yapılabilir.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Dosyanızı eklerseniz daha pratik çözümler önerilebilir.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Uzun uzadıya sıralama algoritması hazırlamak yerine,
diziyi bir temp sayfasında sıralasak nasıl olur?

Kod:
b2=application.transpose(b)
addr = range(cells(1,1), cells(ubound(b2,1), ubound(b2,2)).address
range(cstr(addr)).value = b2
range(cstr(addr)).sort key:=?? 'sıralanacak sütun
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
örnek bir dosya ekliyorum userform KULLANICI ADI ADMIN şifre 001

Rapor kısmındaki raporda sıralama yapılacak.
Dosya ektedir.
 

Ekli dosyalar

Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Uzun uzadıya sıralama algoritması hazırlamak yerine,
diziyi bir temp sayfasında sıralasak nasıl olur?

Kod:
b2=application.transpose(b)
addr = range(cells(1,1), cells(ubound(b2,1), ubound(b2,2)).address
range(cstr(addr)).value = b2
range(cstr(addr)).sort key:=?? 'sıralanacak sütun
Zeki bey örnek dosyayı ekledim rica etsem bu kodunuzu benim kodlara nasıl uyarlayabiliriz.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Ekli dosyalara VBE şifrelerini eziyet olsun diye mi koyuyorsunuz?
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Pardon zeki bey kaldırmayı unutmuşum kullanımda kişilerde bir hata oluşursa kodlarda yanlışlıkla silinme olmasın diye koyuyordum. Kusura bakmayın şifre 123
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sanıyorum yapmak istediğiniz tarih aralığına göre veri sayfasındaki verileri tarayıp, uygun verileri listboxa sıralı olarak aktarmak. Sıralama kriterleri nelerdir.
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Özür dilerim Levent Bey yazınızı geç gördüm iki gündür başka işlerimden dolayı ilgilenemedim. Evet orada aldığımız tarih aralığına göre ve birinci kriterimiz olan "ALIŞ" fişlerinin listesi.
Orda kodlar var o kodlarda elde ettiğimiz zaman sıralı gelmiyor doğal olarak giriş sırasına göre geliyor benim istediğim onları sıralamak en küçük koddan büyüğe doğru.
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Sanıyorum yapmak istediğiniz tarih aralığına göre veri sayfasındaki verileri tarayıp, uygun verileri listboxa sıralı olarak aktarmak. Sıralama kriterleri nelerdir.
Hocam ilk mesajımda kodlarım ve örnek dosyamda mevcut vba şifrem 123 . Şimdi redime aldığım tarih aralığı ve istediğim kriterdeki verileri bu dizi içinde nasıl A dan Z ye veya Z den A yaa sıralayabilirim.

End With ''''
işte burada list box a aktarmadan b dizinin ikinci verisine göre çüçükten büyüğe sıralama yapmak istiyorum nasıl yapılır
If satir > 0 Then ListBox1.Column = Application.Transpose(b)

burada zaten b dizisi içinde veriler var burda dizinin ikinci stununda bulunan mlz kodlarını A dan Z ye sıralamak istiyorum.
 
Üst