Listbox dan Excele Veri aktarımı

Turgay1983XX

Altın Üye
Katılım
22 Kasım 2022
Mesajlar
29
Excel Vers. ve Dili
ofice 2016 32 bit
Altın Üyelik Bitiş Tarihi
16-08-2029
merhaba
sitede araştırdım bir kaç örnek var ama hiç biri istediğim gibi değildi, yada ben bulamadım. Benim istediğim Lİstboxta bulunan verilerin istediğim sutundaki veriyi sayfanın istediğim sütünuna gelsin istiyorum aşağıdaki kod son dolu sütündan değil hep sayfanın 2.sütünündan başlıyor yardımlarınızı bekliyorum

Sub CariAktar()
Dim i As Byte


For i = 1 To List_BankaFisDetay.ListCount
yenisatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row - 1


Sheets("BankaCari").Cells(i + 1, "A").Value = List_BankaFisDetay.Column(0, i - 1)
Sheets("BankaCari").Cells(i + 1, "B").Value = List_BankaFisDetay.Column(1, i - 1)
Sheets("BankaCari").Cells(i + 1, "C").Value = List_BankaFisDetay.Column(2, i - 1)


Next

End Sub
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
445
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Merhaba dener misiniz?

Anladığım kadarıyla, ListBox'ta bulunan verileri BankaCari sayfasının belirli bir sütununa aktarırken, verilerin her zaman sayfanın 2. sütunundan (sütun B) başlamasını istemiyorsunuz. Bunun yerine, verilerin belirtilen bir sütundan başlamasını istiyorsunuz. Bu durumda, mevcut kodu biraz değiştirelim.

Aşağıdaki gibi, i + 1 yerine, verilerin hangi sütundan başlamasını istediğinize bağlı olarak kodu ayarlayabilirsiniz. Örneğin, verilerin 2. sütundan (sütun B) değil de 3. sütundan (sütun C) başlamasını istiyorsanız, Cells(i + 1, "B") kısmını Cells(i + 1, "C") ile değiştirebilirsiniz.

Düzeltilmiş Kod:
Kod:
Sub CariAktar()
    Dim i As Byte
    Dim yeniSutun As Integer
    yeniSutun = 2 ' Verilerin hangi sütundan başlayacağını belirtin (2: B sütunu, 3: C sütunu, vb.)
    
    For i = 1 To List_BankaFisDetay.ListCount
        ' Son dolu satırı bul
        yeniSatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Bir sonraki satıra yazdırmak için
        
        ' Veriyi istenilen sütunlara aktar
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
    Next
End Sub
Değişiklikler:
  1. yeniSutun değişkenini ekledim. Bu, verilerin hangi sütundan başlamasını belirleyecek. Örneğin, yeniSutun = 2 olarak ayarlarsanız, veriler B sütunundan başlayacak.
  2. yeniSatir hesaplamasını değiştirdim, çünkü her defasında veriyi son satıra eklemek yerine, ilk boş satıra eklenmesini sağlamak amacıyla Rows.Count ile son satırdan bir sonraki satır bulunacak şekilde değiştirdim.
  3. Cells(i + 1, "A") ve benzer satırları Cells(yeniSatir, yeniSutun) formatında güncelledim, böylece başlangıç sütunu esnek hale geldi.
Bu şekilde, istediğiniz sütundan başlayarak veri aktarımını sağlayabilirsiniz. Sadece yeniSutun değerini değiştirerek farklı sütunlardan başlayabilirsiniz.
 

Turgay1983XX

Altın Üye
Katılım
22 Kasım 2022
Mesajlar
29
Excel Vers. ve Dili
ofice 2016 32 bit
Altın Üyelik Bitiş Tarihi
16-08-2029
hocam elinize sağlık çok güzel olmuş. yalınız listbox daki ilk satırı başlık olduğunu için onu aktarmaması gerek onu nasıl engellerim
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
445
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
ListBox'taki ilk satırın başlık olduğunu ve aktarılmaması gerektiğini belirtmişsiniz. Bu durumu engellemek için, döngüde ilk satırı atlayabiliriz. Bunun için döngüyü başlatırken i = 2 olarak ayarlayarak, ilk satır (başlık) dışındaki verileri aktarabilirsiniz.

Aşağıdaki güncellenmiş kodda, i = 2 ile döngüye başlıyoruz, böylece başlık satırı atlanır:

Güncellenmiş Kod:
Kod:
Sub CariAktar()
    Dim i As Byte
    Dim yeniSutun As Integer
    yeniSutun = 2 ' Verilerin hangi sütundan başlayacağını belirtin (2: B sütunu, 3: C sütunu, vb.)
    
    For i = 2 To List_BankaFisDetay.ListCount ' i = 2 ile başlatıyoruz, böylece ilk satır atlanır
        ' Son dolu satırı bul
        yeniSatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Bir sonraki satıra yazdırmak için
        
        ' Veriyi istenilen sütunlara aktar
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
        Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
    Next
End Sub
Değişiklikler:
  • Döngüyü For i = 2 To List_BankaFisDetay.ListCount olarak ayarladım, yani i değeri 2'den başlayarak ListBox'taki ikinci satırdan itibaren veri aktarımına başlar. Bu, başlık satırını atlamanızı sağlar.
Bu şekilde, başlık satırını atlamış olursunuz ve sadece veriler aktarılır.
 

Turgay1983XX

Altın Üye
Katılım
22 Kasım 2022
Mesajlar
29
Excel Vers. ve Dili
ofice 2016 32 bit
Altın Üyelik Bitiş Tarihi
16-08-2029
tamam hocam oldu. Peki hocam biraz karışık olacak çözümü var mı bilmiyorum ama aşağıdaki şekilde oluyor yanlız listboxtaki 9.sütündaki veri cari ise sayfa 1 masraf ise sayfa 2 ye aktarılmasını salayabilirmiyiz liste aşağıdaki gibi

Dim i As Byte
Dim yeniSutun As Integer
yeniSutun = 1 ' Verilerin hangi sütundan başlayacağını belirtin (2: B sütunu, 3: C sütunu, vb.)

For i = 1 To List_BankaFisDetay.ListCount
' Son dolu satırı bul
yenisatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Bir sonraki satıra yazdırmak için

' Veriyi istenilen sütunlara aktar
Sheets("BankaCari").Cells(yenisatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 3).Value = List_BankaFisDetay.Column(4, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 4).Value = List_BankaFisDetay.Column(10, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 5).Value = List_BankaFisDetay.Column(11, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 6).Value = List_BankaFisDetay.Column(5, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 7).Value = List_BankaFisDetay.Column(6, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 15).Value = List_BankaFisDetay.Column(15, i - 1)
Sheets("BankaCari").Cells(yenisatir, yeniSutun + 16).Value = List_BankaFisDetay.Column(16, i - 1)

Next

254486
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
445
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Dener misiniz?
ListBox'taki 9. sütundaki değeri kontrol ederek, eğer bu değer "Cari" ise veriyi BankaCari sayfasına, "Masraf" ise Masraf sayfasına aktarmak mümkündür. Bunun için, If...Then...Else yapısını kullanarak 9. sütundaki değeri kontrol edebiliriz. Kodunuzda gerekli düzenlemeleri aşağıda yaptım.

Güncellenmiş Kod:
Kod:
Sub CariAktar()
    Dim i As Byte
    Dim yeniSatir As Long
    Dim yeniSutun As Integer
    yeniSutun = 1 ' Verilerin hangi sütundan başlayacağını belirtin (2: B sütunu, 3: C sütunu, vb.)

    For i = 2 To List_BankaFisDetay.ListCount ' Başlık satırını atlamak için i = 2 ile başlıyoruz
        ' 9. sütundaki değeri kontrol et
        If List_BankaFisDetay.Column(8, i - 1) = "Cari" Then
            ' Eğer "Cari" ise "BankaCari" sayfasına aktar
            yeniSatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row + 1
            
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 3).Value = List_BankaFisDetay.Column(4, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 4).Value = List_BankaFisDetay.Column(10, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 5).Value = List_BankaFisDetay.Column(11, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 6).Value = List_BankaFisDetay.Column(5, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 7).Value = List_BankaFisDetay.Column(6, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 15).Value = List_BankaFisDetay.Column(15, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 16).Value = List_BankaFisDetay.Column(16, i - 1)
        
        ElseIf List_BankaFisDetay.Column(8, i - 1) = "Masraf" Then
            ' Eğer "Masraf" ise "Masraf" sayfasına aktar
            yeniSatir = Sheets("Masraf").Cells(Rows.Count, 1).End(xlUp).Row + 1
            
            Sheets("Masraf").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 3).Value = List_BankaFisDetay.Column(4, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 4).Value = List_BankaFisDetay.Column(10, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 5).Value = List_BankaFisDetay.Column(11, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 6).Value = List_BankaFisDetay.Column(5, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 7).Value = List_BankaFisDetay.Column(6, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 15).Value = List_BankaFisDetay.Column(15, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 16).Value = List_BankaFisDetay.Column(16, i - 1)
        End If
    Next
End Sub
Açıklamalar:
  1. Başlangıç Satırı Ayarı: For i = 2 To List_BankaFisDetay.ListCount ile döngü 2. satırdan başlayarak ilk satırdaki başlık kısmını atlar.
  2. 9. Sütunun Kontrolü: If List_BankaFisDetay.Column(8, i - 1) = "Cari" ile ListBox'taki 9. sütun değeri kontrol ediliyor (sütun indeksleri 0'dan başlar, bu yüzden 9. sütun 8 olarak yazılır).
  3. "Cari" ve "Masraf" için Ayırma: If...Then...ElseIf yapısı ile 9. sütundaki değere göre uygun sayfaya veri aktarımı yapılır.
 

Turgay1983XX

Altın Üye
Katılım
22 Kasım 2022
Mesajlar
29
Excel Vers. ve Dili
ofice 2016 32 bit
Altın Üyelik Bitiş Tarihi
16-08-2029
üstad aşağıdaki hataları aldım

254489
254490
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
445
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Overflow hatası genellikle bir değişkenin beklenenden daha büyük bir değere sahip olması durumunda ortaya çıkar. Kodunuzda i değişkeni Byte türünde tanımlanmış ve ListBox'taki satır sayısı çok fazlaysa Byte sınırını aşabilir. Byte veri türü 0 ile 255 arasındaki değerleri kabul eder. Eğer satır sayısı bundan fazla ise Overflow hatası alırsınız.

Bu durumda Byte yerine daha büyük bir veri türü kullanmak sorunu çözecektir. Örneğin, Integer veya Long türlerini kullanabilirsiniz. Ayrıca yeniSatir değişkenini de Long olarak tanımlamak daha güvenli olacaktır.

Güncellenmiş Kod
Kod:
Sub CariAktar()
    Dim i As Long ' Byte yerine Long kullanıyoruz
    Dim yeniSatir As Long
    Dim yeniSutun As Integer
    yeniSutun = 1 ' Verilerin hangi sütundan başlayacağını belirtin (2: B sütunu, 3: C sütunu, vb.)

    For i = 2 To List_BankaFisDetay.ListCount ' Başlık satırını atlamak için i = 2 ile başlıyoruz
        ' 9. sütundaki değeri kontrol et
        If List_BankaFisDetay.Column(8, i - 1) = "Cari" Then
            ' Eğer "Cari" ise "BankaCari" sayfasına aktar
            yeniSatir = Sheets("BankaCari").Cells(Rows.Count, 1).End(xlUp).Row + 1
            
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 3).Value = List_BankaFisDetay.Column(4, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 4).Value = List_BankaFisDetay.Column(10, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 5).Value = List_BankaFisDetay.Column(11, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 6).Value = List_BankaFisDetay.Column(5, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 7).Value = List_BankaFisDetay.Column(6, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 15).Value = List_BankaFisDetay.Column(15, i - 1)
            Sheets("BankaCari").Cells(yeniSatir, yeniSutun + 16).Value = List_BankaFisDetay.Column(16, i - 1)
        
        ElseIf List_BankaFisDetay.Column(8, i - 1) = "Masraf" Then
            ' Eğer "Masraf" ise "Masraf" sayfasına aktar
            yeniSatir = Sheets("Masraf").Cells(Rows.Count, 1).End(xlUp).Row + 1
            
            Sheets("Masraf").Cells(yeniSatir, yeniSutun).Value = List_BankaFisDetay.Column(0, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 1).Value = List_BankaFisDetay.Column(1, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 2).Value = List_BankaFisDetay.Column(2, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 3).Value = List_BankaFisDetay.Column(4, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 4).Value = List_BankaFisDetay.Column(10, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 5).Value = List_BankaFisDetay.Column(11, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 6).Value = List_BankaFisDetay.Column(5, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 7).Value = List_BankaFisDetay.Column(6, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 15).Value = List_BankaFisDetay.Column(15, i - 1)
            Sheets("Masraf").Cells(yeniSatir, yeniSutun + 16).Value = List_BankaFisDetay.Column(16, i - 1)
        End If
    Next
End Sub
Yapılan Değişiklikler:
  1. i değişkeni Byte yerine Long olarak tanımlandı.
  2. yeniSatir değişkeni de Long olarak tanımlandı.
Bu değişiklikler, ListBox verileriniz çok fazla olduğunda veya Excel'in satır sınırına yaklaştığınızda oluşabilecek Overflow hatalarını engeller. Kod bu haliyle çalışacaktır.
 

Turgay1983XX

Altın Üye
Katılım
22 Kasım 2022
Mesajlar
29
Excel Vers. ve Dili
ofice 2016 32 bit
Altın Üyelik Bitiş Tarihi
16-08-2029
Hocam çok teşekkür ederim mükemmel oldu.
elinize sağlık
not: Cari yazan yeri Cari Hesap yazınca atmıyor ama bilginiz olsun
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
445
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Rica ederim. Bir beğeninizi alırım artık :)
Kodun içerisine Cari olarak tanımladığımız için değişiklik olunca algılamaz. Kodu değiştirmek lazım. İsterseniz deneyip bakın.
 
Üst