• DİKKAT

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

Dinamik Şekilde Array Kullanımı

Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
Kod:
Dim Eskisatırbul() As Variant

Eskisatır = ActiveCell.Value 'değişebilir

buldönsay = buldönsay + 1
[COLOR="DarkRed"]Eskisatırbul = Array(buldönsay) = ActiveCell.Vallue[/COLOR] (her kodlar baştan döngündüğünde Eskisatırbul adlı değişkene aktif hücrenin değerini eski değerleri kaybetmeden eklemek istiyorum)

For bulsay = 1 To buldönsay
If Eskisatırbul(bulsay) = Eskisatır Then
'goto
Else
'goto
End If
Next bulsay


Değişkenle Array değişkenin sayısını artırarak aktif hücreyi her kod döndükçe Array değişkenine eklemek ve sonra da yine değişkenle aktif hücreyi bu Array listesinde kontrol etmek istedim. Ama sanırım yaptığım şekilde kullanılamıyor. Böyle kullanılmaz mı yoksa ben mi yanlış yapıyorum.

Teşekkürler.
 

Ekli dosyalar

Son düzenleme:
Merhaba,

Böyle anlaşılması zor. Ne yapmak istediğinizi örnek dosya ile anlatın, kodlar hazırlanır.
 
Ekledim ama derdimi nasıl anlatacağımı bilemedim doğrusu. :)
 
deneme = array ("a", "b", "c")

Yukarıdaki atamayı;

For say = 1 To 3
ActiveCell.Offset(say, 0)
deneme=(say) ActiveCell.Value
Next say

şeklinde önceden belli olmayan hücrelerden alınacak değerlerle yapmak istiyorum.
döngünün aldıığı hücrelerde misal; d, e, f değerleri var.
Ve değişken aşağıdaki hali alacak üstteki şartlarda;
Deneme = array("d","e","f")
değerlerini içerecek değişken


Mümkün değilse uğraşmayayım tabi. :)


Umarım bu sefer anlatabildim. :)
 
Son düzenleme:
A1 hücresinde c,d,e yazıp ve A1 hücresi seçili iken aşağıdaki kodu deneyin.
Kod:
Sub DENE()
a = Split(ActiveCell, ",")
For i = 0 To UBound(a)
MsgBox a(i)
Next
End Sub
 
A1 hücresinde c,d,e yazıp ve A1 hücresi seçili iken aşağıdaki kodu deneyin.
Kod:
Sub DENE()
a = Split(ActiveCell, ",")
For i = 0 To UBound(a)
MsgBox a(i)
Next
End Sub

Döngü bir kez çalışıyor sadece c değerini diziye atıyor. Split ve UBound nasıl bir etkiye sebep oluyor? Kodu çözemedim. Virgül neye yarıyor. :)
 
3 kere dönmesi gerekir. kodu denedim.
split=aralarında virgül, başka bir karakter (mesela #) bulunan metin dizisini array/diziye çevirir.
UBound = bir dizinin eleman sayısını verir. dizi elemanları 0 dan başladığından bir eksik değer verir.(Örnek: Ubound; c,d,e eleman sayısını 2 verir ama 0 dan başlayacağı için eleman sayısı aslında 3 dür.
 
3 kere dönmesi gerekir. kodu denedim.
split=aralarında virgül, başka bir karakter (mesela #) bulunan metin dizisini array/diziye çevirir.
UBound = bir dizinin eleman sayısını verir. dizi elemanları 0 dan başladığından bir eksik değer verir.(Örnek: Ubound; c,d,e eleman sayısını 2 verir ama 0 dan başlayacağı için eleman sayısı aslında 3 dür.

Çok özür dilerim. A1 hücresine değerlerin hepsini yaz dediğinizi anlamadım. A1, A2, A3 e yazdım.


Aktif olan hücreyi nasıl diziye atayabilirim. Diğer kısımlarını artık yapabilirim sanırım.
Dizi diyelim ki 5. diziye kadar doldu kodlar bir daha dönünce aktif hücreyi bu sefer 6. diziye alacak. Sadece sıradaki diziye eklesin istiyorum aktif hücreyi. Bunu döndürmeyi başaramadım.

Özellikle anlatımınız için ve diğer yardımlarınız için teşekkürler.
 
Son düzenleme:
Aşağıdaki gibi İç içe iki döngü ile A1 hücresine d,g,j A2 hücresine o,l,j,h,g A3 hücresine 5,ş,k,j,y yazıp deneyin herhalde böyle bir şey istiyorsunuz.
Kod:
Sub DENE()
For e = 0 To 2
a = Split(ActiveCell.Offset(e, 0), ",")
For i = 0 To UBound(a)
MsgBox a(i)
Next
Next
End Sub
 
Son düzenleme:
Fazladan bir satır vardı #11 mesajı düzelttim.
 
Merhaba,

A sütununu diziye almak istiyorsanız aşağıdaki kodları deneyiniz.

Kod:
Sub DiziyeAl()

    Dim i   As Integer, _
        j   As Integer, _
        Dizi

    j = Cells(Rows.Count, "A").End(3).Row
    
    ReDim Dizi(j - 1)
    
    For i = 1 To j
        Dizi(i - 1) = Cells(i, "A")
    Next i
    
    MsgBox UBound(Dizi)
    
End Sub

Not : Dizi elemanını 1 den de başlatmak olası, yukarıdaki örnekte Sıfırdan başlıyor.
 
Hepinize yardımlarınız için teşekkür ediyorum. Bu bilgiler ışığında çalışmamı tamamlayabileceğim. :)
 
Merhabalar, Assagidaki dinamik dizide listeye veri girmeye calisiyorum ama kayit sayfasindaki bilgileri Liste sayfasina aliyor ama A2 satirdan alip uzerine yaziyor , benim istedigim, Listede enson bos olan satira eklemesi (altaki A2 hucresin de sabit olmamasi, yardimlariniz bekliyorum

Tesekkurler

Sub Kayit()

Dim s1, s2 As Worksheet, Dizi As Object
Dim son As Long, Veri As Variant, X As Long, say As Long
Dim Aranan As String

Set s1 = Sheets("Kayit")
Set s2 = Sheets("Liste")

Set Dizi = CreateObject("Scripting.Dictionary")

son = s1.Cells(s1.Rows.Count, 1).End(3).Row
Veri = s1.Range("A5:K" & son).Value

ReDim liste(1 To UBound(Veri), 1 To 11)

For X = LBound(Veri) To UBound(Veri)

Aranan = Veri(X, 1)
say = say + 1
liste(say, 1) = Veri(X, 1) '
liste(say, 2) = Veri(X, 2)
liste(say, 3) = Veri(X, 3)
liste(say, 4) = Veri(X, 4)
liste(say, 5) = Veri(X, 5)
Next

If say > 0 Then
s2.Range("A2").Resize(say, 11) = liste ' Not buranin son bos hucreye tanimlanmasi lazim sanirim ama yapamadim
s2.Range("D2").Resize(say, 2).Style = "Comma"
End If

Set s1 = Nothing
Set s2 = Nothing
Set Dizi = Nothing


End Sub
 
Merhaba,

If say > 0 Then
s2.Range("A2").Resize(say, 11) = liste ' Not buranin son bos hucreye tanimlanmasi lazim sanirim ama yapamadim
s2.Range("D2").Resize(say, 2).Style = "Comma"
End If

yukarıdaki bölümü silip aşağıdaki kod bloğunu ilgili bölüme yapıştırıp deneyiniz.

son = s2.Cells(Rows.Count, "A").End(3).Row + 1

If say > 0 Then
s2.Range("A" & son).Resize(say, 11) = liste ' Not buranin son bos hucreye tanimlanmasi lazim sanirim ama yapamadim
s2.Range("D" & son).Resize(say, 2).Style = "Comma"
End If

.
 
Bu şekilde deneyiniz.

Kod:
If say > 0 Then
    sat = s2.Cells(Rows.Count, 1).End(3).Row + 1
    s2.Range("A" & sat).Resize(say, 11) = liste ' Not buranin son bos hucreye tanimlanmasi lazim sanirim ama yapamadim
    s2.Range("D" & sat).Resize(say, 2).Style = "Comma"
End If
 
Alternatif;

s2.Cells(s2.Rows.Count, 1).End(3)(2, 1).Resize(say, 11) = liste
 
Eyvallah Ustatlar elinize saglik cok tesekkur ederim
 
Ama ustatlar hicbiriside calismiyor, yani bilgi getirmiyor
 
Geri
Üst