Soru Sayfalardan otomatik veri kopyalama

Katılım
19 Temmuz 2021
Mesajlar
19
Excel Vers. ve Dili
2016 türkçe
Merhaba kolay gelsin herkese,

Makro ile gün bazlı raporları tek sayfada toplamak istiyorum. Bir buton yaparak o butona tıklayınca 30 günlük yapılan işleri (A sütunundan E sütununa kadar) alt alta başka bir sayfada listelemesini istiyorum. Bu dediğim şeyi makro kaydet ile yapmaya çalıştım fakat butona her tıkladığımda daha önce yapmış olduğum kopyalama işlemini tanımıyor altına tekrardan kopyalıyor benim istediğim ben butonu güncelledikçe sayfalardaki değişikliği üzerine işlemesi altına yeni bir kopyalama açmaması. yardımlarınızı rica ederim.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Dosyanızda tek sayfa var. 30 günlük sayfalar nerde? Sonuçlar hangi sayfada listelenecek? Değişiklikten kastınız nedir?
 
Katılım
19 Temmuz 2021
Mesajlar
19
Excel Vers. ve Dili
2016 türkçe
Dosyanızda tek sayfa var. 30 günlük sayfalar nerde? Sonuçlar hangi sayfada listelenecek? Değişiklikten kastınız nedir?
Merhaba, dosyaya tek sayfa ekledim taslak olarak normalde rapor daha kapsamlı benim tek bir sayfada görmek istediğim tablo bu, sonuçlar için sonuç sayfasında 30 günlük doldurulmuş raporların excele eklediğim tablo tarih tarih alt alta düşmesini istiyorum. Değişiklikten kastım benim şu an kullandığm makro kaydedicide ben bir hücrenin değerini değiştirdiğimde ve tekrar butona bastığımda 30 günün raporunu alta tekrar kopyalıyor, kopyalanan veri üzerinde değişiklik yapmıyor. Yani kaç kere basarsam butona o kadar kere kopyalama yapıyor ve atıyorum 3 kere butona bastım bir sayfadaki raporu 3 kere yapıştırıyor
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Muhtemelen tam istediğiniz gibi olmayacak, "ben aslında şöyle istiyordum, dosyada şöyle bir durum vardı" diyeceksiniz ama burda belirttiğiniz bilgileri karşılayan ve örnek dosyanıza uygun kodlar aşağıdadır. Bir modüle kopyalayıp deneyin. Dosyanızdaki sayfadan birkaç tane kopyaladıktan sonra çalıştırdığımda Sayfa1'de tüm sayfaları birleştiriyor:

PHP:
Sub toparla()
Set s1 = Sheets("Sayfa1")
eski = s1.Cells(Rows.Count, "A").End(3).Row
If eski > 1 Then s1.Range("A2:E" & eski).Clear
For i = 1 To Sheets.Count
    If Sheets(i).Name <> s1.Name Then
        son = Sheets(i).Cells(Rows.Count, "A").End(3).Row
        If son > 1 Then
            yeni = s1.Cells(Rows.Count, "A").End(3).Row + 1
            Sheets(i).Range("A2:E" & son).Copy s1.Cells(yeni, "A")
        End If
    End If
Next
s1.Activate
enson = s1.Cells(Rows.Count, "A").End(3).Row - 1
MsgBox Sheets.Count - 1 & " sayfadan toplam " & enson & " adet kayıt aktarıldı!", vbInformation
End Sub
 
Katılım
19 Temmuz 2021
Mesajlar
19
Excel Vers. ve Dili
2016 türkçe
Muhtemelen tam istediğiniz gibi olmayacak, "ben aslında şöyle istiyordum, dosyada şöyle bir durum vardı" diyeceksiniz ama burda belirttiğiniz bilgileri karşılayan ve örnek dosyanıza uygun kodlar aşağıdadır. Bir modüle kopyalayıp deneyin. Dosyanızdaki sayfadan birkaç tane kopyaladıktan sonra çalıştırdığımda Sayfa1'de tüm sayfaları birleştiriyor:

PHP:
Sub toparla()
Set s1 = Sheets("Sayfa1")
eski = s1.Cells(Rows.Count, "A").End(3).Row
If eski > 1 Then s1.Range("A2:E" & eski).Clear
For i = 1 To Sheets.Count
    If Sheets(i).Name <> s1.Name Then
        son = Sheets(i).Cells(Rows.Count, "A").End(3).Row
        If son > 1 Then
            yeni = s1.Cells(Rows.Count, "A").End(3).Row + 1
            Sheets(i).Range("A2:E" & son).Copy s1.Cells(yeni, "A")
        End If
    End If
Next
s1.Activate
enson = s1.Cells(Rows.Count, "A").End(3).Row - 1
MsgBox Sheets.Count - 1 & " sayfadan toplam " & enson & " adet kayıt aktarıldı!", vbInformation
End Sub

Kod için teşekkür ederim çalışıyor fakat sadece ben aslında şöyle demek istemiştim demek istemeyerek şeyi rica edebilir miyim Tüm sayfalar yerine sayfa adı 01 den 31 e kadar olanları birleştirmek istiyorum benim istediğim sayfalar sadece bunlar exceldeki tüm sayfalar değil, birde istediğim hücre aralığı A29:I49 ve boş hücreleri kopyalamaması yani formatta bu aralık var ve tamamı dolu olmak zorunda değil sadece dolu olanları almak istiyorum
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Biz bir şey biliyoruz da söylüyoruz ;)

Örnek dosya bunu için önemli işte, dosya yapısının nasıl olduğu ve istenen sonucun nasıl olacağını görmek işlerimizi kolaylaştırıyor, ne sizi ne de bizi yoruyor.


Şimdi bu isteğinize uygun bir örnek dosya paylaşın ki "ben aslında şöyle istemiştim" demek zorunda kalmayın.

Dosyanızda hem o aktarılmayacak sayfalar hem de o boş satırlara örnek olsun.
 
Katılım
19 Temmuz 2021
Mesajlar
19
Excel Vers. ve Dili
2016 türkçe
Çok haklısınız benim excel gerçeğinden çok uzak kaldı. Ben yine ben aslında şöyle demek istemiştim demiyeyim, bende ki formatı iletiyorum size :) 2 sayfadan oluşan bir raporu ekledim(biz onu 30 ya da 31 e kadar uzatacağız) ve sayfaları dediğim gibi o sayfalar en fazla 31 adet olabilir ayın durumuna göre o yüzden sayfa 1 ile 31 arasındakileri olarak belirtmek istiyorum verileri çekerken. Rapordaki verileri 4 ayrı sayfada toparlamak istiyorum, yapmış olduğum butona tıkladığımda personelleri personel sayfasına, günlükişi günlükiş sayfasına, bekleme ve gecikmeleride isimlerine göre açtığım sayfaya otomatik taşımak istiyorum. günlük raporda değiştirdiğim veriyi tekrar butona bastığımda güncellemeside gerekiyor. Boş satırları belirttim aralıklar o şekilde boş ise almamalı, personel sayfasında tabloyu b sütununa atayıp a sütununa günlük raporda yazan tarihi atamak istiyorum. Teşekkürler

GÜNCEL.xlsx - 20 KB
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Örnek dosyanıza göre aşağıdaki kodlar iş görecektir. Ancak makronun düzgün çalışması için tüm sayfaların yapısı aynı olmalıdır. Örneğin 01 sayfasında BEKLEMELER olarak geçen başlık 02 sayfasında BEKLEME olarak yazılmış. Onu da BEKLEMELER yapmalısınız ve diğer sayfalarda da hep aynı başlıklar olmalıdır.

PHP:
Sub raporlar()
Set s1 = Sheets("PERSONEL")
Set s2 = Sheets("GÜNLÜKİŞ")
Set s3 = Sheets("BEKLEMELER")
Set s4 = Sheets("GECİKMELER")
eski1 = s1.Cells(Rows.Count, "A").End(3).Row
eski2 = s2.Cells(Rows.Count, "A").End(3).Row
eski3 = s3.Cells(Rows.Count, "A").End(3).Row
eski4 = s4.Cells(Rows.Count, "A").End(3).Row
If eski1 > 1 Then s1.Range("A2:F" & eski1).Clear
If eski2 > 1 Then s2.Range("A2:I" & eski2).Clear
If eski3 > 1 Then s3.Range("A2:I" & eski3).Clear
If eski4 > 1 Then s4.Range("A2:I" & eski4).Clear
For i = 1 To 31
    sayfa = Format(i, "00")
    For j = 1 To Sheets.Count
        If Sheets(j).Name = sayfa Then
            yeni1 = s1.Cells(Rows.Count, "A").End(3).Row + 1
            yeni2 = s2.Cells(Rows.Count, "A").End(3).Row + 1
            yeni3 = s3.Cells(Rows.Count, "A").End(3).Row + 1
            yeni4 = s4.Cells(Rows.Count, "A").End(3).Row + 1
            gunlukis = WorksheetFunction.Match("GÜNLÜK İŞ", Sheets(j).[A:A], 0)
            bekleme = WorksheetFunction.Match("BEKLEMELER", Sheets(j).[A:A], 0)
            gecikme = WorksheetFunction.Match("GECİKMELER", Sheets(j).[A:A], 0)
            enson = WorksheetFunction.Max(Sheets(j).Cells(Rows.Count, "A").End(3).Row, gecikme + 2)
            Sheets(j).Range("D3:H" & gunlukis - 1).Copy s1.Cells(yeni1, "B")
            son1 = s1.Cells(Rows.Count, "B").End(3).Row
            s1.Range("A" & yeni1 & ":A" & son1) = Sheets(j).[B7]
            s1.Range("A" & yeni1 & ":A" & son1).NumberFormat = "dd.mm.yyyy"
            s1.Range("A" & yeni1 & ":A" & son1).Borders.LineStyle = 1
            Sheets(j).Range("A" & gunlukis + 2 & ":H" & bekleme - 1).Copy s2.Cells(yeni2, "A")
            Sheets(j).Range("A" & bekleme + 2 & ":H" & gecikme - 1).Copy s3.Cells(yeni3, "A")
            Sheets(j).Range("A" & gecikme + 2 & ":H" & enson).Copy s4.Cells(yeni4, "A")
        End If
    Next
Next
s1.Activate
MsgBox "İşlem Tamamlandı!", vbInformation
End Sub
 
Üst