Bir Sayfadaki Verileri Diğer Sayfada Raporlama

  • Konuyu başlatan Konuyu başlatan hakki83
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Kısa Açıklama

Bir Sayfadaki Verileri Diğer Sayfada Raporlama isimli başlıkta, ilgili işlemlere dair detaylar yer almaktadır.
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhabalar

Örnekteki dosyada HATIRLATMALAR sayfasında B2:K500 alanında yazılı isimler vardır. Bu isimleri RAPOR1 sayfasına örnekteki gibi dökecek kodları rica ederim.

Not: Kodlar standart olarak nasıl rapor döküyorsa, o şekilde rapor dökebilir. Yani kast ettiğim şu; eğer kodlar raporu karışık döküyorsa, sıralama yapmıyorsa, karışık dökebilir. Kodlara ayrıca bir sıralama satırları eklemeye gerek yoktur.
Bu hususu şundan dolayı özellikle belirtiyorum:
Gözümde canlandırdığım butonlarla yapılacak bir sıralama şekli var,
Düşünmüş olduğum sütunları sıralama kodunu, bir sonraki mesajımda, ayrıca arz edeceğim.

Hatta hoşuma giden bir biçimlendirme şekli daha var, onu da daha sonra rica edeceğim.
Teşekkürler
 
Ekli dosyalar
Moderatörün son düzenlenenleri:
@hakki83
Belirttiğiniz diğer sıralama, biçimlendirme işlemleri için,
bu konu sayfasındaki sonucun uygulandığı örnek belge üzerinden yeni konu/konular açarak sorarsanız
diğer forumdaşlar açısından daha yararlı olur.

Aşağıdaki kod;
-- 2'nci satırdan başlayarak (birinci öncelik satır sırası),
-- B:K sütunlarında boş olmayan hücre varsa (ikinci öncelik solda olma),
sırayla listeler.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(20 satır)
 
Ömer Baran hocam önce teşekkür ederim emeğinize sağlık. Gayet güzel. Asıl dosyama uyarlamadım ama mutlaka sorunsuz olacaktır. Zaten bir sorun çıkarsa hemen size arz ederiz sorunlarımızı.

Birkaç küçük isteğim olacak sizden değerli hocam.
Gördüğüm kadarıyla tarih sütunu yani ortadaki sütun, sıralanmış bir şekilde dökülmüş rapor.

Tarih sütununu sıralayan satır hangisiyse, onu silip, kodları tekrar ayrıca paylaşır mısınız hocam.
Bunu istememin iki sebebi var;
Birincisi, sıralamasız döküldüğü zaman nasıl bir sonuç verecek, neye benzeyecek, onu görmek istiyorum;
İkincisi de, bu konudan sonra yeni açacağım konu, butonla sıralama konusu olacak. Yani sütunları ben sıralamak istiyorum sayın hocam.

Bir de mümkünse
A1 hücresine ADI SOYADI
B1 hücresine GELDİĞİ TARİHLER
C1 hücresine de GELDİĞİ SAATLER
şeklinde başlıkları otomatik getirebilir miyiz düğmeye basınca.
Teşekkürler.
 
Ömer Baran hocam üsttekilere ilave olarak iki sorum daha olacak, şu an denemeler yapıyorum

Birinci sorum
Benim orjinal dosya da tarihler
07.10.2021 Perşembe şeklinde yazılı.
yani gün de var. Bundan dolayı kodlarda herhangi bir değişiklik yapmak gerekiyor mu? Yani dd/mm/yyyy nin yanına gggg yazmak gerekiyor mu?

İkinci sorum da, örnek dosya olduğu için (çok geniş dosya olmasın diye) K sütununa kadar hazırladım. Oysa gerçek dosya AF sütununa kadar gidiyor.
K’yı AF yapacağım
2 To 11’i
2 To 32 yapacağım
Başka bir düzeltme yapmam gerekiyor mu?
ve B2: AF3200 aralığı olduğu için, (kodlarda 500 sayısını göremediğimden) bir satır aralığı girmemiz gerekiyor mu?
 
Cep telefonundan yazıyorum.

Kodda sıralamaya yönelik bir satır yok.

-- Neden 500 sayısı yok?
Son veri satır numarası kodda
son = h.Cells(Rows.Count, 1).End(3).Row
şeklinde tespit ediliyor. Kontrol sütunu da A sütunu.
-- Neden tarihe göre sıralı?
Aslında tarihe göre değil,
İlk FOR ... satırı 2 den sonuncu satıra diye kuruldu.
Sıralamayı satıra göre ters çevirmek için
For hsat = ilk To son
satırını
For hsat = son To 2 Step -1
diye değiştirmek gerekir.

-- Neden soldaki veriye ait veri, aynı satırda sağdakinden önce?
For hsut = 2 To 11 satırından dolayı.
Sağdan sola çalıştırmak için bu satır
For hsut = 11 To 2 Step -1
diye değiştirmek gerekir.
-- Başlıklar nasıl yazılır?
r.Range("A2:C" & Rows.Count).ClearContents
satırı yerine şu iki satırı yazın.
r.[A:C].ClearContents
baslik = Array("ADI SOYADI", "GELDİĞİ TARİHLER", "GELDİĞİ SAATLER")
r.[A1].Resize(1, 3) = baslik

.
 
Sayın hocam bu konuyla ilgili çok küçük bir sorum kaldı.
Benim tarihler
08.10.2021 Cuma şeklinde yazılı.
Yani gün ismi de var

Kodlarda NumberFormat aynen kalsın mı, yoksa dd/mm/yyyy nin yanına dddd gibi bir ilave olması gerekiyor mu?
 
Bence sormanıza gerek yok idi bunu. ;)
Her iki türlü deneyip. sonucu gözlemleyin derim.
Veriler aslında kaynak sayfadaki haliyle listeleniyor
(tarih sütunundaki listeleme sonucu hücrelerinden biri seçiliyken formül çubuğuna bir göz atın)
biçimlendirme tercihinize göre istediğinizi yaparsınız. Sonucu nasıl görmek (değer değil biçim) istediğinize bağlı.

Ayrıca bir önceki cevabımı telefondan yazmıştım ve o sırada KENARLIK olayı da yoktu.
Kenarlıkları da sıfırlamak akımından koddaki r.[A:C].ClearContents satırını r.[A:C].Clear olarak değiştirin.

.
 
Bu da alternatif olsun.
Buradaki yöntemde ise satır ve sütun için ayrı ayrı For...Next döngüsü yerine
B:K sütunları için tek döngüyle (doluysa listeye dahil et gibi) sonuç alır.
Tabi buradaki işlem hücre hücre kontrol şeklinde.

Önceki alternatifte satır için döngü kuruluyor, sıradaki satırda B:K arasındaki dolu hücre sayısı 0'dan büyükse
o satır için B:K sütunundaki hücrelere dolu/boş kontrolü yapılıyor idi. Yani satırdaki dolu hücre sayısı 0 ise sütun döngüsüne girilmiyor.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(24 satır)
 
Ömer Baran hocam merhabalar

Tahmini olarak yazdım ama bilmiyorum doğru mudur


Sheets("RAPOR1").Rows("1:1").RowHeight = 50
Sheets("RAPOR1").Rows("2:1048576").AutoFit

Birinci satır 50 olsun
Diğerleri otomatik daralsın

böyle mi yazılır hocam yoksa daha doğru bir yazım şekli var mıdır?
 
Döngü içerisinde listeye dahil edilecek bir veri bulunduğunda
RAPOR sayfasına veri yazılacak satır numarası şöyle tespit ediliyordu.
rs = r.Cells(Rows.Count, 1).End(3).Row + 1
Kod satırındaki r. ibarelerinin anlamı ise, kodun en başında RAPOR sayfasının bu isimle (r) anılacağı belirtilmişti.

Döngüden çıkıldığında rs değişkeninin son aldığı değer (son veri yazılan satır numarası) beli olduğuna göre;
sayfada 1.048.575 satırın satır yüksekliğini değiştirmek/ayarlamak yerine son veri satırına kadarki satırların yüksekliğinin ayarlanması yeterli.
Dediğim gibi 1.048.575 satırın yüksekliğini de değiştirebilirsiniz/ayarlayabilirsiniz elbette ama bence doğrusu son veri satırına kadarki satırların yüksekliğini ayarlamak. Hatta madem satır yüksekliklerine müdahale edilecek; kodların baş tarafına ( r.[A:C].Clear satırının altına ) r.Rows.Autofit diye bir satır eklemek de yerinde olur.
Böylece alan temizlendikten sonra satır yükseklikleri standart değere getirierek (autofit) sayfa boşkenki haline getirilmiş olur,
işlem bitişinde de veri alanına denk gelen satırların yüksekliği ayarlanmış olur.

Aslına bakarsanız; bu tür listeleme makrosu oluşturulduğunda bir adet de TEMIZLE isimli makro oluşturup,
mevcut kodun r...Clear satırı bu temizleme makrosunun içine alınıp, listeleme makrosunda, ...Clear satırının yerine de Call TEMIZLE diye satır
eklenerek temizleme makrosu tetiklenebilir. Bunun sonucu olarak, sayfaya iki adet düğme eklenip, biriyle TEMIZLE makrosu, diğeriyle LİSTELEME makrosu ilişkilendirilmesi daha şık durur. Hem LİSTELEME düğmesine tıklandığında alan temizlenerek listeleme yapılmış olur, istenirse de TEMIZLE düğmesine tıklanarak sayfa temiz hale getirilebilir.

Bu tür işler keyfe/tercihe kalmış mevzulardır, gönlünüz nasıl istiyorsa öyle.

.
 
Çok güzel bilgiler sayın hocam
O zaman şöyle diyebilir miyiz?

Bütün dosyalarda sayfalarda son satırı bulma kodu

Sayfa1.Cells(Rows.Count, 1).End(3).Row + 1

(Tahminen yazdım)
 
"Alttan üste doğru ilk boş satır" demek doğru bir tanımlama olur.

Aslında sondaki +1 boş satırı bulmak için, yoksa bu kod satırı belirtilen sütunda son satıra (A1048576 hücresi) gidip,
CTRL+YUKARI OK tuşuna basarak (elle bu işlemi yaparsanız daha net anlaşılır) gelinecek ilk dolu hücreyi buluyor,
ardından +1 ile de alttan üste doğru ilk boş hücrenin satır numarasını tespit ediyor.
Parantez içindeki (3) yerine 1, 2 ve 4 de yazılabilirdi. Tabi her birinin işlevi farklı.
İlgili hücreden YUKARI/AŞAĞI/SAĞA/SOLA seçeneklerini gösteren sayılar bunlar.
İsterseniz A sütunu dışında bir sütunda rastgele bir hücredeyken CTRL + YÖN TUŞLARINDAN BİRİ
işlemini elle yapın ve sonucu görün.

.
 
....Cells (....) yazımında, parantez içindeki ilk değer SATIR numarası, 2'ncisi ise SÜTUN numarasıdır.
Bu nedenle örneğin 5'inci satırda, sağdan sola doğru ilk boş sütunun sütun numarası nedir sorusunun karşılığı şöyle.

besinci_satirda_sagdan_sola_ilkbos_hucrenin_sutun_numarasi = Cells(5, Columns.Count).End(1).Column + 1

Kod satırındaki Cells(5, Columns.Count), Excel versiyonuna göre IV5 veya XFD5 hücresidir.
Parantez içerisindeki 1 sayısı ise sağdan sola doğru gidişi sağlayan SOL OK tuşu.
Tüm yön tuşları için HÜCRE._ADRESİ.End() kısmındaki parantez içine,
1, 2, 3 veya 4 yerine xlUp, xlDown, xlToLeft, xlToRight da yazabilirsiniz (belki de daha anlaşılır olur, tercih meselesi)

.
 
Hocam çok teşeklürler
Fakat biraz kafam karıştı da :)

Mesela yarın bir gün herhangi bir dosyada 1. Satır ve 1. Sütun hariç autofit özelliğini yapmak istersem,

Birinci satırı hariç son dolu satıra kadar
Ve
Birinci sütun hariç son dolu sütuna kadar
Şöyle mi yazılır:
Eğer doğruysa notlarıma ekleyeceğim

Sayfa1.Cells(Rows.Count, 1).End(3).Row + 1
Sayfa1.Cells(Columns.Count, 1).End(3).Column + 1


Bu ikisi doğru mudur hocam
 
Sayfa1.Cells(Rows.Count, 1).End(3).Row + 1 bununla A sütununda (sütun no 1) alttan üste doğru ilk boş hücrenin satır numarası bulunur.

Şu yanlış: Sayfa1.Cells(Columns.Count, 1).End(3).Column + 1
Sayfa1.Cells(1, Columns.Count).End(xlToLeft).Column + 1
şeklinde yazarsanız,
1'inci satırda sağdan sola doğru ilk boş hücrenin sütun numarası bulunur.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Geri
Üst