VBA Dinamik Dizi Yardım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    acikistihbarat
    acikistihbarat's avatar
    Kayıt Tarihi: 25/Mart/2009
    Erkek

    iyi geceler arkadaşlar.excel vba da uğraşıp duruyordum ve dizilerle ilgili bişey yaparken dinamik çok boyutlu dizi tanımlayamadım. normal tek boyutlu dizi gibi redimle boyutunu değiştiremedim.diziyi 2 boyutlu tanımladığımda redim işe yaramadı.zaten boyut tanımlandı gibi birşey uyarısı verdi. bu işi nasıl çözebiliriz veya dinamik çok boyutlu dizi yerine neyi kullanabiliriz ?

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    Dizi değişkenini hiç bir boyut belirtmeden tanımla.

    Dim arr() As Variant gibi

    Sonrasında istediğin gibi değiştirebilirsin.

    Örnek olarak  : 

    Dim arr()
    ReDim arr(1, 3, 3)
    MsgBox UBound(arr, 1)
    ReDim arr(3, 5, 1)
    MsgBox UBound(arr, 2)
    ReDim arr(5, 2, 0)
    MsgBox UBound(arr, 3)
    
    buzukatak tarafından 19/Eki/13 02:16 tarihinde düzenlenmiştir

    anlıyorum.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    acikistihbarat
    acikistihbarat's avatar
    Kayıt Tarihi: 25/Mart/2009
    Erkek
    buzukatak bunu yazdı

    Dizi değişkenini hiç bir boyut belirtmeden tanımla.

    Dim arr() As Variant gibi

    Sonrasında istediğin gibi değiştirebilirsin.

    Örnek olarak  : 

    Dim arr()
    ReDim arr(1, 3, 3)
    MsgBox UBound(arr, 1)
    ReDim arr(3, 5, 1)
    MsgBox UBound(arr, 2)
    ReDim arr(5, 2, 0)
    MsgBox UBound(arr, 3)
    

    teşekkürler ama bunu preserve ile kullanamıyorum hata veriyor. dizi tek boyutluyken girilmiş değerlerin kaybolmaması gerekiyor.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek
    acikistihbarat bunu yazdı
    buzukatak bunu yazdı

    Dizi değişkenini hiç bir boyut belirtmeden tanımla.

    Dim arr() As Variant gibi

    Sonrasında istediğin gibi değiştirebilirsin.

    Örnek olarak  : 

    Dim arr()
    ReDim arr(1, 3, 3)
    MsgBox UBound(arr, 1)
    ReDim arr(3, 5, 1)
    MsgBox UBound(arr, 2)
    ReDim arr(5, 2, 0)
    MsgBox UBound(arr, 3)
    

    teşekkürler ama bunu preserve ile kullanamıyorum hata veriyor. dizi tek boyutluyken girilmiş değerlerin kaybolmaması gerekiyor.

    Preserve ile ancak son boyutun uzunluğunu değiştirebilirsin ki bu yeni bir boyut ekleyememene / silememene sebep olur, bundan ötesine izin yok. Bu sana uymuyorsa ihtiyacını giderecek başka bir şeyler düşünmen gerekli.

    Dim arr()
    ReDim arr(0, 0)
        arr(0, 0) = "00"
    ReDim Preserve arr(0, 1)
        arr(0, 1) = "01"
    MsgBox arr(0, 0)
    MsgBox arr(0, 1)
    buzukatak tarafından 19/Eki/13 03:42 tarihinde düzenlenmiştir

    anlıyorum.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    istediğin şey için preserve kullanamazsın hocam ama şöyle bi çözümü deneyebilirsin. 

    nested olarak iç içe tanımlayabilirsin. şurada bir örnek var. mesela 3x2 lik bir dizi

    Public Function nested()
        Dim outer
        outer = Array(Array(1, 2), Array(3, 4))
    
        ReDim Preserve outer(1 To 3)
    
        outer(3) = Array(5, 6)
    
        nested = outer
    End Function
    

     

     

    sana diziyi dönderiyor... bu fonksiyonu kullanabilirsin. 

     

    bir de şöyle bi çözüm var döngülü

    tempArray = myArray
    ReDim myArray(1 To (UBound(myArray()) * 2), 1 To m)
    For i = 1 To n
         For j = 1 To m
              myArray(i, j) = tempArray(i, j)
         Next j
    Next i
    

     

     

    burada bir kaç farklı çözüm daha mevcut ve yukarıda verdiklerimin açıklamaları

    http://stackoverflow.com/questions/3992717/how-can-i-redim-preserve-a-2d-array-in-excel-2007-vba-so-that-i-can-add-rows 

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Bu gibi durumlarda ya çok boyutlu diziyi doğrusal olarak ele alacaksınız ya da koleksiyonları kullanacaksınız.

    yo

    http://stackoverflow.com/questions/678938/linear-simulation-of-multidimensional-array/678968#678968

     

    YeniHarman tarafından 19/Eki/13 12:00 tarihinde düzenlenmiştir

    Olaylara karışmayın!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    performans sorun degilse tek string olarak ele al.

    Mesela 3 tane int i saklamak icin dongulerle

    "1,2,3;3,6,90;70,60,80;3,60,90,55;"

    kullanmak istddiginde split ile kullanabilirsin. Ama cok hafiza yer ve islemciyi de daha fazla kullanir.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    acikistihbarat
    acikistihbarat's avatar
    Kayıt Tarihi: 25/Mart/2009
    Erkek

    cevaplar için teşekkürler.uğraştığım şey çok ta önemli değildi. diziyi sabit boyuta ayarladım şimdilik sıkıntı yok tekrar teşekkürler.

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    Düz mantık yeni bi dizi oluştur burdakileri ona aktar bu diziyi sil :)


    Si vis pacem para bellum.
Toplam Hit: 3110 Toplam Mesaj: 9