Soru Satırlara Alt Alta Veri Gönderimi (3 Farklı Örnek)

Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Değerli arkadaşlar 3 farklı örnek ile satırlara alt alta veri eklemeyle ilgili örnekte, merak ediyorum acaba en stabil çalışacak olan hızlı olan ve doğru olan kod hangisi olur. Nedeni ile birlikte kısa bir açıklama yapabilirseniz çok memnun olurum.

Private Sub CommandButton21_Click()
For i = 1 To Range("b65000").End(3).Row + 1
If Cells(i, 2) = "" Then
Cells(i, 2) = TextBox21
End If
Next i
End Sub

Private Sub CommandButton22_Click()
Dim secili As Range
Dim satir As String
Set secili = Range("b65000")
satir = secili.End(3).Row + 1
Cells(satir, 2) = TextBox21
End Sub

Private Sub CommandButton23_Click()
satir = Range("b65000").End(3).Row + 1
Cells(satir, 2) = TextBox21
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,767
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
En stabili son koddur.

Excelde doğru bir veri alanı oluşturmak için bazı kurallara dikkat etmek gerekir.

Kayıtlar arasında boş satır olmamasına dikkat etmek gerekir.
Sütunlarda depolanan veri tiplerini ayrıştırmak gerekir. Yani bir sütunda hem sayısal hem de metinsel ifade depolamamak daha mantıklı bir seçim olacaktır.

Verdiğiniz birinci kod döngü ile kayıt yaptığı için gereksiz bir zaman harcayacaktır. Ayrıca tanımlanan aralıkta boş hücre gördüğü her yere TextBox21 deki değeri yazacaktır.

İkinci kodda ise "satir" değişkeni String (metin) olarak tanımlanmış. satir değişkeni sayısal bir değer üreteceği için yanlış tanımlama yapılmış oluyor. Tanımlama yapalım derken iş çok uzatılmış. Bence gerek yok. (Tabi ki bunlar yapıya göre tercih edilebilir.)
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
For değişkeni en son boş satıra atıyor veriyi, çalışmasında bir sıkıntı yok..
Ama Kafamı karıştırdınız String değişkeni sayısal değer nasıl üretebilir.. Metinsel ifadeler için kullanılmıyor mu..
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,767
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
String metin tanımlamaları için kullanılır. Siz satır değerine yani sayısal bir değere ulaşmaya çalışıyorsunuz. Bunu kastetmiştim. Mesajımı yanlış anlaşılmaması adına yeniden düzenledim.
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Çok rica etsem acaba b sütununda ilk boş satırdan itibaren yani b1 den itibaren alt alta veri kaydedecek bir makro örneği sunarmısınız lütfen..
TextBox içinden alsın değerleri
 

Korhan Ayhan

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

C++:
Private Sub CommandButton1_Click()
    If Range("B1") = "" Then
        Range("B1") = TextBox1
    Else
        Cells(Rows.Count, 2).End(3)(2, 1) = TextBox1
    End If
    
    MsgBox "Veri kaydedilmiştir.", vbInformation
End Sub
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Hocam hakkını helal et, son bir ricam var bu konu ile ilgili bir daha sizi rahatsız etmeyeceğim,
Cells(Rows.Count, 2).End(3)(2, 1) = TextBox1
bu kodu bana açıklarmısın lütfen..

Rows.Count B sutununda ne görev üstleniyor
End(3) ün sonunda ki (2,1) nedir..
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayın Korhan Ayhan'ın hoşgörüsüne sığınarak açıklamaya çalışayım:

Cells(Rows.Count, 2) ifadesi B sütunundaki en alt hücreyi gösterir. Cells parantezi içindeki ilk değer satır, ikinci değer de sütun sayısını gösteriyor. B sütunu 2. sütun olduğundan burda 2 kullanılmış (2 yerine "B" de yazılabilirdi). Rows.count da dosyada mevcut tüm satırların sayısını ifade ediyor.

Devamında gelen end(3) ifadesi belirtilen hücrede iken yukarı doğru ilk dolu hücrenin adresini bulmak için kullanılıyor. Bu ifade fiziken şu işlemin karşılığıdır: B sütunundaki en alt hücreye git, oradayken CTRL tuşuna basılı tut ve aynı zamanda Yukarı Ok tuşuna bas.

End parantezi içine 1-2-3 ya da 4 yazılabilir. 1 sola, 2 sağa, 3 yukarıya ve 4 aşağıya demektir.

Son parantez içindeki 2 ve 1 ise kaç satır aşağı ve kaç sütun sağa gideceğini gösteriyor. Ancak offset kullanılmadığı için başlangıç hücremiz 1 kabul ediliyor anladığım kadarıyla. (2,1) ifadesi bulunduğun hücrenin bir alt hücresi anlamına geliyor. Eğer offset kullanılsaydı parantez içi (1,0) şeklinde olmalıydı anladığım kadarıyla. Yani offset kullanılmadığında bulunulan hücrenin adresi (1,1); offset kullanıldığında bulunulan hücrenin adresi (0,0) kabul ediliyor ve ne kadar yer değiştireceği bu adres referans alınarak belirleniyor.
 

Korhan Ayhan

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

Cells(Rows.Count, 2).End(3)(2, 1) ifadesindeki koyu renkli bölüm aslında CELLS özelliğinin kısa biçimde yazım şeklidir. Yani aynı ifadeyi aşağıdaki gibi de yazabilirdik.

Kod:
Cells(Rows.Count, 2).End(3).Cells(2, 1)
Bu komut satırının açılımı şu şekildedir.

Cells(Satır_Değeri, Sütun).End(Yukarı Doğru)(Bulduğun_Hücrerinin_Bir_Alt_Satırı, Bulunduğun_Sütun)

Sondaki parantez içindeki değerleri değiştirdikten sonra aşağıdaki kodu F8 tuşu ile adım adım çalıştırıp nasıl tepki verdiğini görebilirsiniz. Kodu adımlarken excel sayfanızda görünür şekilde olsun. O zaman kodun verdiği tepkiyi rahatlıkla görebilirsiniz.

Kod:
Sub Test()
    Cells(Rows.Count, 2).End(3).Cells(2, 1).Select
    Cells(Rows.Count, 2).End(3).Cells(3, 2).Select
    Cells(Rows.Count, 2).End(3).Cells(3, 5).Select
End Sub

Bugüne kadar excelin farklı versiyonları çıktı. Excel 2003 versiyonda 65.536 satır varken yeni versiyonlarda bu değer 1.048.576 satıra ulaştı.

Aşağıdaki komutu Excel 2003 versiyonda denerseniz size 65.536 değerini döndürecektir. Yeni versiyonlarda ise 1.048.576 değerini döndürecektir.

Kod:
MsgBox Rows.Count
Peki bu değer bize ne gibi işlemlerde lazım oluyor;

Kullanılan düzenli excel veri tablolarında son satırı bulmak istediğimizde ve yine aynı tablolarda dinamik alan tanımlaması yaparken ihtiyaç duyuyoruz.
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Çok teşekkürler
 
Üst