• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Soru Bodroda aylar itibarıyla yıllık matrah toplamı getirmede sorun

mars2

Gold Üye
Katılım
22 Nis 2022
Mesajlar
80
Aldığı beğeni
15
Excel V
Office 2016 TR
Gold Bitiş
25 Mayıs 2026
Konu Sahibi
Windows 10 Mozilla Firefox 150
İyi Akşamlar;
Daha önceden userx tarafından yıllık matrahları aylardaki sayfalara aktarılmkata ancak, bodro 40 - 50 kişilik olmasına rağmen yıllık matrahın buşlunduğu G sutunda bodro dışındaki bulunan 190 ncı satıra kadar 0 (sıfır) değeri atamaktadır. Sorunun kaynağı ile çözümü için desteğinizi.


HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

1777927035800.png
 
Windows 10 Opera 130
Sorunun sebebi şu satır: For Z = 10 To son + 5

Burada son, Yıllıkmatrah sayfasındaki son satıra göre alınıyor. Yıllıkmatrah’ta 185 kişi/satır varsa, aylık sayfalarda 10’dan 190’a kadar G sütununa formül sonucu yazılıyor. Bordroda kişi olmasa bile SUMIF sonucu bulunamadığı için 0 yazıyor.

Şu şekilde düzeltin: aylık sayfada B sütunundaki gerçek son bordro satırını bulun ve sadece o kadar satıra yazdırın.

HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Deneyiniz
 
Konu Sahibi
Windows 10 Mozilla Firefox 150
Sayın arzuhalci;

İlginize teşekkürler. Ancak, her ay farklı kişi veya sayıda olabileceğinden bu sorunla karşılaşmamak için yıllık matrahın toplamını alma hakkında farklı düşünceniz veya yol var mıdır.
 
Windows 10 Opera 130
Daha sağlam yol: aylık sayfalara tekrar tekrar yazmak yerine, yıllık matrahı sadece Yıllıkmatrah sayfasında kişi bazında toplayıp, aylık sayfalarda gerekirse DÜŞEYARA/XLOOKUP veya SUMIF ile göstermek.

En sağlıklı mantık şu olur:
Her ayın bordrosundan sadece dolu personel satırlarını oku.
Personeli TC/Personel No gibi benzersiz bir alanla eşleştir.
Yıllıkmatrah sayfasında her personel için ay ay ve kümülatif toplam oluştur.
Aylık sayfaya G sütunu yazılacaksa sadece o ayda bordroda olan kişilere yaz.

Benim tercih edeceğim sade VBA yaklaşımı şu:
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Ama daha iyi tasarım şudur:
Aylık sayfalarda G sütununu VBA ile doldurmayın. G10’a şu mantıkta formül yazın ve aşağı doğru sadece bordro satırı kadar çoğaltın:
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
Ocak için D : D, Şubat için E:E, Mart için F:F gibi devam eder.

En temiz çözüm ise aylık sayfaları standart tabloya çevirmek:
AyTC/Personel NoAd SoyadMatrah

Sonra yıllık toplamı PivotTable veya Power Query ile almak. Böylece kişi sayısı her ay değişse bile 40 kişi de olsa 200 kişi de olsa sorun çıkmaz.

Kısaca: Mevcut VBA düzeltilebilir; fakat uzun vadede en sağlam yöntem aylık verileri tek listeye toplayıp yıllık matrahı oradan üretmektir.
 
Konu Sahibi
Windows 10 Mozilla Firefox 150
İyi Akşamlar;
Konu hakkında önerileriniz ve yardımlarınız beklenmektedir.
 
Windows 10 Opera 130
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

böyle denermisiniz
 
Windows 10 Opera 130
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Yani artık bütün G10:G190 alanına dizi halinde değer basmak yerine, sadece bordroda gerçekten personel olan satırın G hücresine değer yazılır. Hr iki kodu deneyin bakalım
 
Konu Sahibi
Windows 10 Mozilla Firefox 150
Sayın arzuhalci;

Yardımlarınız için teşekkürler. kodunuz denedim çalıştı. ancak, syf.Range("G10:G" & sonAy).ClearContents satırında hata verdi
 
Windows 10 Opera 130
Eğer sonAy değerinin doğru hesaplandığını görmek isterseniz, kodu şu şekilde değiştirebilirsiniz

HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Bu kod, sonAy değerini bir mesaj kutusunda gösterecek ve değerin geçerli olup olmadığını kontrol etmenizi sağlayacaktır.

Özet:

sonAy değerini doğru şekilde hesaplayın ve geçerli olup olmadığını kontrol edin.
Geçerli değilse, kullanıcıya hata mesajı gösterin ve işlemi durdurun.
Kodunuzun çalışabilmesi için sonAy'ın geçerli bir satır numarası olması gerekmektedir.

HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Bu kodda sonAy değerinin geçerli olup olmadığı kontrol edilmiştir. Eğer sonAy değeri 10'dan küçükse işlem yapılmaz
 
Konu Sahibi
Windows 10 Mozilla Firefox 150
İyi Akşamlar,

Konu hakkında bana ayırdığız zaman için teşekkürler. Ancak, yukarıda verdiğiniz en son kodu uygulamaya çaılıştımda yine syf.Range("G10:G" & sonAy).ClearContents satırında hatası vermektedir.

ayrıca, If syf.Name = ym.Cells(4, y + 2).Value Then satırına imleçi getirdiğimde ocak ayı gözükmektedir.

Makroları uygulamaya çalıştığımda, benden kaynaklı olabileceği düşündüğümden örmek dosya yükledim. Örnek dosyayı inceleyerek hatanın nereden kaynaklandığı ve sorunun çözümü için yardımlarınız esirgemeyeceğiniz umuduyla,
 

Ekli dosyalar

Windows 10 Opera 130
deneyiniz
 

Ekli dosyalar

Geri
Üst