[Çözüldü]  Class ve Dictionary(sorun)

VBA Makrolar ile ilgili sormak istedikleriniz, yapmak istedikleriniz hakkında yardım alabileceğiniz bölümdür.

Class ve Dictionary(sorun)

İleti#1)  feraz » 06 Ekm 2019 14:11

Merhaba.

Classs ve dictionay olayını beraber kullanmak için bir örnek uyguladım lakinRange("E1").Resize(dic.Count, 3).Value = Application.Transpose(dic.Keys) bu satırda hata veriyor.
Döngüye sokunca sorun olmuyor lakin topluca aktarmada sorun var.

Yarımcı olacaklara teşekkürler.

Kod: Tümünü seç
Sub Test_Dictionary()

    Dim tmer As Double
    tmer = Timer
   
    Dim xyz As Class1
    Dim dic As New Scripting.Dictionary
    Dim arr()
    Dim i As Long, son As Long
   
    Range("E:G").ClearContents
    son = Cells(Rows.Count, 1).End(3).Row
    arr = Range("A1:C" & son).Value
    Application.ScreenUpdating = False
   
    For i = 1 To son
        Set xyz = New Class1
        xyz.Model = arr(i, 1)
        xyz.Renk = arr(i, 2)
        xyz.Yil = arr(i, 3)
        dic.Add xyz, xyz
    Next
    Range("E1").Resize(dic.Count, 3).Value = Application.Transpose(dic.Keys)
'    Range("E1").Resize(dic.Count, 3).Value = arr
    Application.ScreenUpdating = True
   
    Set dic = Nothing
    Set xyz = Nothing
    Erase arr
    MsgBox Format((Timer - tmer) / 86400, "hh:mm:ss")

End Sub
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
feraz
Site Dostu
 
Kayıt: 19 May 2014 17:36
Konum: Almanya
Meslek: İşçi
Yaş: 40
İleti: 6017
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray

Cevap: Class ve Dictionary(sorun)

İleti#2)  Ozan İLGÜN » 07 Ekm 2019 15:32

Application da transpose yok. Worksheetfunction.Transpose var. Ancak transpose edeceğin şey array olmalı. Sen kendi classını transpose etmeye çalışırsan hata alırsın. Kullandığın şekliyle kullanmanı öneriririm. Yada verileri class içerisinde dictionary de tutmak yerine bir sayfaya yerleştirip o bölgeyi transpose edebilirsin.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2855
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul



Cevap: Class ve Dictionary(sorun)

İleti#3)  feraz » 07 Ekm 2019 15:49

Merak etmiştim sebebini hocam.
Evet en iyisi Array olayı.
Kullanıcı avatarı
feraz
Site Dostu
 
Kayıt: 19 May 2014 17:36
Konum: Almanya
Meslek: İşçi
Yaş: 40
İleti: 6017
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray

Cevap: Class ve Dictionary(sorun)

İleti#4)  Ozan İLGÜN » 08 Ekm 2019 08:28

Neden direk arr'den verileri almıyorsun anlamadım sanırım classı başka bir şekilde kullanacaksın. Class ile yapmak istiyorsan bu şekilde yapabilirsin.

Classa bunu ekle
Kod: Tümünü seç
Public Property Get Sonuc() As Variant
   Sonuc = Array(pModel, pRenk, pYil)
End Property

Kod: Tümünü seç
Sub Test_Dictionary()

    Dim tmer As Double
    tmer = Timer
   
    Dim xyz As Class1
    Dim dic As New Scripting.Dictionary
    Dim arr()
    Dim i As Long, son As Long
   
    Range("E:G").ClearContents
    son = Cells(Rows.Count, 1).End(3).Row
    arr = Range("A1:C" & son).Value
    Application.ScreenUpdating = False

    For i = 1 To son

        Set xyz = New Class1
        xyz.Model = arr(i, 1)
        xyz.Renk = arr(i, 2)
        xyz.Yil = arr(i, 3)
     
     
        dic.Add xyz.Model, xyz.Sonuc()
    Next

    Range("E1").Resize(son, 3).Value = Application.Transpose(Application.Transpose(dic.Items)) 'Application.Transpose(arr)

    Application.ScreenUpdating = True
   
    Set dic = Nothing
    Set xyz = Nothing
    Erase arr
    MsgBox Format((Timer - tmer) / 86400, "hh:mm:ss")

End Sub


ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2855
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul



REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: Class ve Dictionary(sorun)

İleti#5)  feraz » 08 Ekm 2019 09:39

Ah sayın Ozan hocam sizin kadar bilgili olsaydım keşke.

Class olayına bir el atayım demiştim tıkanmıştım.
Dictionary olayınıda zar zor hallettim zaten.

Bu transpose ile Array olayını kullanmayıda öğrendik şükür.
Zaten hız için en iyisi array olayı bildiğim.
Sizin son kodlarlada 100000 satır için denememde 5 saniye sürdü süper olarak.

Dic.add yerine mesela arr(i,1)
Arr(i,2) vs... olarakta dizi içine alıp basit şekilde transpose yapılıyor fakat mantık öğrenmek istemiştim sayenizdede çözdük olayı.Bir dosyada bana lazım olacağını sanmıyorum bulunsun yinede :)

Sağolunuz abey.
Kullanıcı avatarı
feraz
Site Dostu
 
Kayıt: 19 May 2014 17:36
Konum: Almanya
Meslek: İşçi
Yaş: 40
İleti: 6017
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray

Cevap: Class ve Dictionary(sorun)

İleti#6)  Ozan İLGÜN » 08 Ekm 2019 10:35

Tahmin ettim merak üzerine olduğunu. :lol: Aklınıza takılan başka soru olursa beklerim.Bu arada aslında orda dictionary kullanmaya pek gerek yok. Arraylist yada collection daha çok iş görür. Dictionary iki boyutlu verileri tutar ve bunları key ve value olarak saklar. Dictionaryde olan bir key değerini bir daha girerseniz bu zaten var diye hata verecektir. Bunun kullanım alanları farklıdır.
Sortedlist ,hashtable , stack ,queue denemenizi öneririm. Farklı alanlarda kullanmak için doğru tipi bulursanız projelerinizde kolaylık sağlarsınız.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2855
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul



REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: Class ve Dictionary(sorun)

İleti#7)  feraz » 08 Ekm 2019 10:54

:)

Arraylist bunu sevmiştim bir zamanlar lakin yavaş olduğu için terk ettim genel olarak :)
Tabii Arraylist sort için lazım oluyordu.
Sortedlist ,hashtable , stack ,queue bunlarıda bir araştırayım.

100 bin satır denememde resimdeki gibi hatalı sonuç oluyor sayın hocam varmıdır bununda bir çözümü.
Ama transpose iyi çalışıyor :)
Dosya boyutu 2,5Mb olduğu için alttaki linke ekledim 100Bin için.

https://dosya.co/0oh9ttywopbz/Class_get_ve_let_örnekk(dictionary_ve_Type).rar.html
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
feraz
Site Dostu
 
Kayıt: 19 May 2014 17:36
Konum: Almanya
Meslek: İşçi
Yaş: 40
İleti: 6017
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray

Cevap: Class ve Dictionary(sorun)

İleti#8)  Ozan İLGÜN » 09 Ekm 2019 08:49

Dictionary de kayıtlar zaten görünüyor. Sorun transpose limitinin 65536 olması.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2855
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul



Cevap: Class ve Dictionary(sorun)

İleti#9)  feraz » 09 Ekm 2019 09:12

Evet hocam transposede 65536 olayını biliyordum.

Dosyada 65536 ya kadar normal sonrası hatalı.

Zaten konu class ve dictionary idi yani çözüldü. [TESEKKÜR]
Kullanıcı avatarı
feraz
Site Dostu
 
Kayıt: 19 May 2014 17:36
Konum: Almanya
Meslek: İşçi
Yaş: 40
İleti: 6017
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray

Cevap: Class ve Dictionary(sorun)

İleti#10)  Ozan İLGÜN » 09 Ekm 2019 09:30

Transpose'un 65536 olayını 65536nın katlarına göre kodu uyarlayarak 1-65536 ya kadar 65537 den 131072'ye kadar şeklinde yine transposeye sokabiliriz. Bilgin olsun istedim.
ozan.ilgun@boun.edu.tr

Resim
Kullanıcı avatarı
Ozan İLGÜN
Forum Moderatörü
 
Adı Soyadı:Ozan İlgün
Kayıt: 20 Şub 2013 12:43
Konum: İst. Maltepe
Meslek: Arşivist
Yaş: 33
İleti: 2855
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul




Forum Genel Makro Soruları

Online Kullanıcılar

Bu forumu görüntüleyenler: Google [Bot], Google Adsense [Bot], kutlayislek ve 1 misafir

Bumerang - Yazarkafe