tabloya makro ile yazdırma

Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
merhabalar...
şöyle bir kodum var.

Dim i As Long

i = Sheets("Sayfa1").Cells(Rows.Count, "C").End(3).Row + 1
If i < 10 Then i = 10

Range("c2").Copy
Sheets("Sayfa1").Range("C" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.CutCopyMode = False

yazmaya başlamasını istediğim hücre tabloya ait olduğu için tablonun altından yazmaya başlıyor.
(d10 dan başlayarak yazmasını istiyorum ama d11-d13 arası tabloya ait olduğu için d14 den yazmaya başlıyor)
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
Merhaba,
Kodlarınıza açıklama ekledim,
Sizin istediğinizi maalesef anlayamadım
C++:
Sub Makro1()

Dim i As Long

' Sayfa1 de ki C sütün nun en son dolu hücresinin +1 ilerisin de ki hücre satır nosunu bul
i = Sheets("Sayfa1").Cells(Rows.Count, "C").End(3).Row + 1

' i değeri minimum 10 olsun
If i < 10 Then i = 10

' Makro hangi sayfada çalışmışsa o sayfanın C2 hücresini kopyala
Range("C2").Copy

' Kopyalalan C2 hücresi değerini, Sayfa1 sayfasın da ki C sütünunun en son hücresinin bir altına yapıştır (Sadece değer olarak)
Sheets("Sayfa1").Range("C" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' Kopyaladığımız ve hala Hafıza olanı (C2 hücre değerini) unut
Application.CutCopyMode = False

End Sub
 
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
Siz yazınca farkettim hatalı yazmışım. D10 değil c10 olacak. Biraz daha açıklayayım. Bu kodu kullanarak C2 hücresindeki veriyi c10 hücresine kopyalıyorum. C10 dolu ise c11 e, c11 dolu ise c12 ye..... normal şartlarda çalışıyor. Benim sıkıntım c10 dan c13 e kadar tablo var. O yüzden c14 den yazmaya başlıyor. Ben tabloya yazmasını istiyorum. C10 dan başlamalı.
 
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
C10 dan 13 e kadar tablo var. Tabloda veri yok. C10 dan 13 e kadar seç, üst menüden ekleyi tıkla, ekleden tabloyu tıkla, sonra kodu çalıştır. C2 de yazan veriyi c10 a kopyalanması gerekirken c14 e kopyalıyor.
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
Yeni kodlar
C++:
Sub Makro2()
    Dim i As Long
    i = 10 ' C10 hücresinden başla
    
    Do While i <= Rows.Count ' Son satıra kadar git (1.048.576 satır)
        
        ' Eğer C sütunundaki i satırındaki hücre boşsa
        If Sheets("Sayfa1").Cells(i, "C").Value = "" Then

            ' Makro hangi sayfada çalışmışsa o sayfanın C2 hücresini kopyala
            Range("C2").Copy
            
            ' Kopyalalan C2 hücresi değerini, Sayfa1 sayfasın da ki C sütünunun en son hücresinin bir altına yapıştır (Sadece değer olarak)
            Sheets("Sayfa1").Cells(i, "C").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            
            ' Kopyaladığımız ve hala Hafıza olanı (C2 hücre değerini) unut
            Application.CutCopyMode = False

            Exit Do ' Döngüden çık
        End If
        
        i = i + 1 ' Hücre boş değilse i'yi artırarak bir sonraki satıra geç
        
    Loop
End Sub
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
Yeni bir Alternatif Kod (Find yöntemi) ve Problem Özet GPT-4 den geldi

Problem Özet:
  1. Tablolar (structured tables) boş bile olsa tüm hücre aralığını kapsadığı için, End(xlUp) ve benzeri yöntemler hata verebilir.
  2. Find ve Do While gibi yöntemler tablo yapılarına rağmen gerçek boş olmayan hücreleri tespit etmek için daha güvenilir.
Bu çözümleri başarıyla uyguladığınız için tebrikler!

Alternatif Kod : Find Yöntemi

Kod:
Sub Makro3()

Dim i As Long

With Sheets("Sayfa1").Columns("C")
    Set LastCell = .Find(What:="*", LookIn:=xlFormulas, SearchDirection:=xlPrevious)
    If Not LastCell Is Nothing Then
        i = LastCell.Row + 1
    Else
        i = 1 ' Eğer hiç dolu hücre yoksa
    End If
End With

' i değeri minimum 10 olsun
If i < 10 Then i = 10

' Makro hangi sayfada çalışmışsa o sayfanın C2 hücresini kopyala
Range("C2").Copy

' Kopyalalan C2 hücresi değerini, Sayfa1 sayfasın da ki C sütünunun en son hücresinin bir altına yapıştır (Sadece değer olarak)
Sheets("Sayfa1").Range("C" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' Kopyaladığımız ve hala Hafıza olanı (C2 hücre değerini) unut
Application.CutCopyMode = False

End Sub
 
Son düzenleme:
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
Yeni kodlar
C++:
Sub Makro2()
    Dim i As Long
    i = 10 ' C10 hücresinden başla
  
    Do While i <= Rows.Count ' Son satıra kadar git (1.048.576 satır)
      
        ' Eğer C sütunundaki i satırındaki hücre boşsa
        If Sheets("Sayfa1").Cells(i, "C").Value = "" Then

            ' Makro hangi sayfada çalışmışsa o sayfanın C2 hücresini kopyala
            Range("C2").Copy
          
            ' Kopyalalan C2 hücresi değerini, Sayfa1 sayfasın da ki C sütünunun en son hücresinin bir altına yapıştır (Sadece değer olarak)
            Sheets("Sayfa1").Cells(i, "C").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
          
            ' Kopyaladığımız ve hala Hafıza olanı (C2 hücre değerini) unut
            Application.CutCopyMode = False

            Exit Do ' Döngüden çık
        End If
      
        i = i + 1 ' Hücre boş değilse i'yi artırarak bir sonraki satıra geç
      
    Loop
End Sub
merhaba. tekrar rahatsız ediyorum kusura bakmayın. yine yardımınıza ihtiyacım var.
1)sayfa adını nasıl dinamik hale getirebiliriz?
otomatik sayfa kopyalayan ve adını hücredeki isme göre değiştiren bir makrom var. yazdığınız bu kodu da kopyalanan sayfanın içindeki bir butonda kullanıyorum. yeni bir A sayfası oluşturduğumda kod "sayfa1" olarak kalıyor. formda activesheet.name i gördüm ama koda uyarlayamadım. yardım ederseniz sevinirim.
2) birinci kadar önemli değil zamanınızı alacaksa veya size yoracak ise uğraşmanıza değmez.
yazdığımız kod ile yeni girilen veri hep en son satıra ekleniyor. yeniden eskiye sıralamak mümkün müdür?

şimdiden teşekkürler.
 
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
1. Sorumu çözdüm. Sayfa1 yazan yerleri activesheet.name yazarak hallettim. Teşekkürler.
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
yeni girilen veri hep en son satıra ekleniyor.
evet kodun matığı o şekilde, en yeni veri en alta gelecek şekilde.

Sanırım siz yeni veri en üstte olsun diğer veriler bir alta kaysın.
Eğer doğru anladıysam...
Manuel olarak işlemleri sırasıyla yapın
ilk olarak C11 hücresini seçip
Yeni bir Satır ekleyin
C2
i Seçip Kopyalayın
C11 i Seçip Yapıştırın
Kopyala Yapıştır dan Çıkın (ESC)
istediğiniz sıralama bu ise...
Manuel olarak yaptığınız işlemi Makro Kaydet modun da yapınız.
 
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
PC başına geçtiğimde deneyeceğim. Teşekkürler.
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
1. Sorumu çözdüm. Sayfa1 yazan yerleri activesheet.name yazarak hallettim. Teşekkürler.
ActiveSheet.Name doğru mantık

Alternatif çözüm :
Sheets("Sayfa1") yerine hiç bir şey yazmasan da olur

Sheets("Sayfa1").Cells(i, "C").Value = "" yerine
Cells(i, "C").Value = ""
Yazsanızda olur Kod çalışırken ActiveSheet i baz alır
 
Katılım
9 Haziran 2022
Mesajlar
18
Excel Vers. ve Dili
Türkçe 2016
evet kodun matığı o şekilde, en yeni veri en alta gelecek şekilde.

Sanırım siz yeni veri en üstte olsun diğer veriler bir alta kaysın.
Eğer doğru anladıysam...
Manuel olarak işlemleri sırasıyla yapın
ilk olarak C11 hücresini seçip
Yeni bir Satır ekleyin
C2
i Seçip Kopyalayın
C11 i Seçip Yapıştırın
Kopyala Yapıştır dan Çıkın (ESC)
istediğiniz sıralama bu ise...
Manuel olarak yaptığınız işlemi Makro Kaydet modun da yapınız.
Bu da tamam.teşekkürler.
Ben kodları hep butonlarla çalıştırıyorum. Bu kaydetdiğimiz macroları activex denetimleri olmadan çalıştırmanın yolu var mı? Başka tetikleme yolları var mı?
Örneğin bu aşağı kaydırma olayını sadece enter kullanarak yapabilir miyiz? Hücreye veriyi girip enterlediğimde direk alt satıra kaydırsa.
 
Katılım
6 Mart 2024
Mesajlar
79
Excel Vers. ve Dili
Excel 2013 TR & Excel 2016 TR
Hücreye veriyi girip enterlediğimde direk alt satıra kaydırsa.
Sayfa da bir değişiklik (Change) yaptığınız da kodlarınızın tetiklenmesi(çalışması) için

Sayfanızın ismini Sağ Tıklayın - Kod Görüntüle tıkladığınız da açılan pencereye Kodları yazınız

C++:
Private Sub Worksheet_Change(ByVal Target As Range)
   
    ' Eğer Değişen hücre = C2 ise yap
    If Target.Address = Range("C2").Address Then
   
        MsgBox Target.Value ' buraya kendi kodlarınızı yazınız
   
    End If
   
End Sub

Not :
Kodları yazıdığınız pencerenin Sağ Üst tarafta Change yazan yeri tıklayın
Sayfada ne gibi durumlar da tepki vereceğini görebilirsiniz ve kontrol edebilirsiniz.
 
Üst