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:

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,359
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Böyle anlaşılması zor. Ne yapmak istediğinizi örnek dosya ile anlatın, kodlar hazırlanır.
 
Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
Ekledim ama derdimi nasıl anlatacağımı bilemedim doğrusu. :)
 
Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
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:
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
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
 
Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
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. :)
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
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.
 
Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
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:
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
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:
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Fazladan bir satır vardı #11 mesajı düzelttim.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,359
Excel Vers. ve Dili
Ofis 365 Türkçe
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.
 
Katılım
8 Temmuz 2014
Mesajlar
120
Excel Vers. ve Dili
Office 2016 Türkçe
Hepinize yardımlarınız için teşekkür ediyorum. Bu bilgiler ışığında çalışmamı tamamlayabileceğim. :)
 

canburak

Altın Üye
Katılım
30 Kasım 2011
Mesajlar
205
Excel Vers. ve Dili
Ofis 2016 Tr 64 Bit , Turkce
Altın Üyelik Bitiş Tarihi
12-09-2025
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
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
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

.
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,105
Excel Vers. ve Dili
office2010
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
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,193
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif;

s2.Cells(s2.Rows.Count, 1).End(3)(2, 1).Resize(say, 11) = liste
 

canburak

Altın Üye
Katılım
30 Kasım 2011
Mesajlar
205
Excel Vers. ve Dili
Ofis 2016 Tr 64 Bit , Turkce
Altın Üyelik Bitiş Tarihi
12-09-2025
Eyvallah Ustatlar elinize saglik cok tesekkur ederim
 

canburak

Altın Üye
Katılım
30 Kasım 2011
Mesajlar
205
Excel Vers. ve Dili
Ofis 2016 Tr 64 Bit , Turkce
Altın Üyelik Bitiş Tarihi
12-09-2025
Ama ustatlar hicbiriside calismiyor, yani bilgi getirmiyor
 
Üst