• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Verilerin tarihe göre ilgili tabloya işlenmesi

  • Konbuyu başlatan Konbuyu başlatan Erdal
  • Başlangıç tarihi Başlangıç tarihi

Erdal

Altın Üye
Katılım
23 Ekim 2006
Mesajlar
1,057
Excel Vers. ve Dili
Ev: 2021 - Türkçe 32 Bit
İşyeri: 2016 - Türkçe 64 Bit
Merhabalar
Sayfalardan oluşan bir excel çalışma kitabım var. Her ay, en son oluşturduğum sayfayı kopyalayıp çoğaltıyor ve oluşturduğum bu yeni sayfaya her ay yeni verileri işliyorum. Sayfalarda da yıllara ve aylara göre birkaç tablom var ve bu tablolara verileri giriyorum. Normalde, tabloyu oluşturan hücreler içinde formüller var. Benim yapmak istediğim ise şu; E11 hücresindeki tarihe göre; AE9, AE10, AE11, AE12 ve AE13 hücrelerindeki değerlerin tablodaki ilgili hücreye yazılması (Tablodaki formülü göz ardı ederek). Ve bu işlemi herhangi bir butona basmadan, çalışma kitabını açtığımızda veya o sayfayı kopyalayıp yeni sayfa oluşturduğumuzda otomatik olarak yapması. Daha anlaşılır olması için örnek dosya ekliyorum. Saygı ve selam ile…
 

Ekli dosyalar

Yardımlarınızı bekliyorum arkadaşlar.
 
Dosyanız bana biraz karışık geldi. Yeniden düzenleyerek örnek dosya ekledim.
Tarihi ve diğer verileri değiştirerek deneyin.
Dosya adını temsil ediyorsa A1 değiştirmeyin.
 
Son düzenleme:
Dosyanız bana biraz karışık geldi. Yeniden düzenleyerek örnek dosya ekledim.
Tarihi ve diğer verileri değiştirerek deneyin.
Dosya adını temsil ediyorsa A1 değiştirmeyin.
ilginiz ve cevabınız için teşekkür ederim. Dosyanın karmaşıklığı için kusura bakmayın. Daha iyi anlaşılması için dosyayı yeniden düzenledim. Saygı ve selam ile ...
 

Ekli dosyalar

İlk önce AE sütunundaki verileri girin, E11 hücresine tarih girin, veriler yerlerine kopyalanacaktır.
ThisWorkBook kod modülü
Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$E$11" Then
 adres = Cells.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
   adres1 = Range(adres & ":" & Range(adres).Offset(12, 3).Address).Address
  adres2 = Range(adres1).Find(Format(Range("E11"), "mmmm")).Offset(0, 2).Address
  Range("AE9:AE13").Copy
  Range(adres2).PasteSpecial Paste:=xlPasteValues, Transpose:=True
End If
End Sub
 
İlk önce AE sütunundaki verileri girin, E11 hücresine tarih girin, veriler yerlerine kopyalanacaktır.
ThisWorkBook kod modülü
Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$E$11" Then
adres = Cells.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
   adres1 = Range(adres & ":" & Range(adres).Offset(12, 3).Address).Address
  adres2 = Range(adres1).Find(Format(Range("E11"), "mmmm")).Offset(0, 2).Address
  Range("AE9:AE13").Copy
  Range(adres2).PasteSpecial Paste:=xlPasteValues, Transpose:=True
End If
End Sub
Ali Bey merhabalar
Yolladığınız dosyayı çalıştırdığımda daha doğrusu deneme amaçlı kendim veri girdiğimde kodlar hata veriyor. (İlk önce AE sütununa veri girdim, sonra E11 hücresine tarih girdim). Hata şu;

Run-time error ‘91’: Object variable or with block variable not set

hatası veriyor. Debug dediğimde;

adres2 = Range(adres1).Find(Format(Range("E11"), "mmmm")).Offset(0, 2).Address

satırında hata veriyor.

Birde farkedermi bilmiyorum, orjinal dosyada E11 hücresindeki tarih otomatik geliyor (Ayın son gününü bulan bir formül var.) Ben sadece AE sütunundaki verileri giriyorum.
 
Hatayı benim eklediğim dosyada mı veriyor.
 
Tekrar denedim, dediğiniz hatayı vermez.
adres= yılın bulunduğu hücrenin 2 altındaki hücre adresini buluyor.
adres1 = ilgili yılın tablo aralığının adresi buluyor.
adres2 = Bu tablo aralığında veri yapıştırılacak ilk hücrenin adresini bulması gerekiyor.
ilk iki adreste hataya düşmüyorsa belirttiğiniz satırda da hataya düşmemesi gerekir.
Dosyayı tekrar ekliyorum.
 
Ofis21 kullanıyorsunuz acaba versiyon farklılığından doğan bir sorun mu olduğunu test etmek için aşağıdaki kodu dener misiniz.
E11 hücresindeki tarihin Türkçe Ay adını vermesi gerek. Ocak Şubat gibi
Kod:
Sub ay()
MsgBox Format(Range("E11"), "mmmm")
End Sub
 
Ofis21 kullanıyorsunuz acaba versiyon farklılığından doğan bir sorun mu olduğunu test etmek için aşağıdaki kodu dener misiniz.
E11 hücresindeki tarihin Türkçe Ay adını vermesi gerek. Ocak Şubat gibi
Kod:
Sub ay()
MsgBox Format(Range("E11"), "mmmm")
End Sub
Ay adını veren kodunuz çalışıyor. İkinci eklediğiniz dosya ise 2024,2025, 2026 ve 2027'ye ait tarih girersem çalışıyor. Diğerlerinde hata veriyor.
 
E11 hücresine tarih girince Enter yapacaksınız
İlginiz için teşekkür ederim Ali Bey.
=EĞERHATA(DOLAYLI($A$8-1&"!Cx7");0)
formülünü tablodaki tüm hücrelere
=EĞER(VE(METNEÇEVİR($E$11;"aaaa")=CV7;YIL($E$11)=$CV$3);AE9;EĞERHATA(DOLAYLI($A$8-1&"!Cx7");0))
şeklinde tek tek uyarlayarak sorunu çözdüm. Biraz zahmetli oldu ama yapacak bir şey yok. İlginiz için tekrar teşekkür ederim.
 
Haklısınız, Yılı tüm sayfada aratınca şaşırtıyor.
Kod:
adres = Cells.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
Kodlardaki yukardaki satırı aşağıdaki kod ile değiştirin
Kod:
adres = Range("cv3").CurrentRegion.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
 
Haklısınız, Yılı tüm sayfada aratınca şaşırtıyor.
Kod:
adres = Cells.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
Kodlardaki yukardaki satırı aşağıdaki kod ile değiştirin
Kod:
adres = Range("cv3").CurrentRegion.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
Teşekkür ederim Ali Bey kodlarınız çalışıyor. Ama sıkıntı şu; E11 hücresindeki tarih el ile girilmiyor. Formülden otomatik olarak değerini alıyor. Acaba kodları başka türlü nasıl tetikleyebiliriz?
 
Biraz karışık olabilir ama açıklamaya çalışayım. Çalışma sayfasını kopyaladığımda A11 hücresi bir evvelki sayfanın E11 hücresindeki tarihi bir artırıyor. Ve =EĞER(A8=1;D59;DOLAYLI(A8-1&"!E11")+1) formülü ile bir tarih üretiyor. Bu sayfadaki E11 hücresindeki formül ise A11 hücresindeki tarihin son takvim gününü buluyor. E11 hücresindeki formül ise şu;
=EĞER(A8=1;D61;TARİH(YIL(A11);AY(A11)+1;0))
Yani kabaca A11 hücresindeki tarihteki ayın son takvim gününü buluyor. A11= 2.5.2023 ise E11=31.5.2023 oluyor. Umarım anlatabilmişimdir.
 
İki türlü çözüm olabilir.
1. AE sütununa veriler girilmiş ve E11 formül ile tarih gelmişken A11 hücresini seçmek
2. E11 formül ile tarih gelmişken AE sütunun veriler girilirken.
Hangisi uygun ise onu belirtin, kodları ona göre düzenleyim.
 
İki türlü çözüm olabilir.
1. AE sütununa veriler girilmiş ve E11 formül ile tarih gelmişken A11 hücresini seçmek
2. E11 formül ile tarih gelmişken AE sütunun veriler girilirken.
Hangisi uygun ise onu belirtin, kodları ona göre düzenleyim.
AE12 hücresine veri girip Enter tuşuna bastığımızda kodlar tetiklenebilirse çok güzel olur.
 
Aşağıdaki kod, AE sütununda veriler girildikçe, ilgili yıl, ay ve AE sütunundaki veri yerine göre kayıt yapıyor.
Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Application.Intersect(Target, Range("AE9:AE13")) Is Nothing = False Then
 adres = Range("CV3").CurrentRegion.Find(What:=Format(Range("E11"), "yyyy")).Offset(2, 0).Address
   adres1 = Range(adres & ":" & Range(adres).Offset(12, 3).Address).Address
  adres2 = Range(adres1).Find(Format(Range("E11"), "mmmm")).Offset(0, 2).Address
 sut = Target.Row - 9
Range(adres2).Offset.Offset(0, sut).Value = Target.Value
End If
End Sub
 
Geri
Üst