• 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
77
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.


Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Set ym = Sheets("Yıllıkmatrah")
son = ym.Cells(Rows.Count, 2).End(3).Row
ym.Range("D5:O" & son).ClearContents
For y = 2 To 13
If Sheets.Name = ym.Cells(4, y + 2) Then

For x = 5 To son
Cells(x, y + 2) = Application.WorksheetFunction.SumIf(Sheets.Range("B10:B100"), ym.Cells(x, 2), Sheets.Range("F10:F100"))
If y + 2 > 4 Then
ym.Cells(x, y + 2) = ym.Cells(x, y + 2) + ym.Cells(x, y + 1)

End If

Sheets.Cells(x + 5, 7) = Application.WorksheetFunction.SumIf(ym.Range(ym.Cells(5, 2), ym.Cells(son, 2)), Sheets.Cells(x + 5, 2), ym.Range(ym.Cells(5, y + 2), ym.Cells(son, y + 2)))
Next x
End If

For Z = 10 To son + 5
Sheets.Cells(Z, 7) = ""
Sheets.Cells(Z, 7) = Application.WorksheetFunction.SumIf(ym.Range(ym.Cells(5, 2), ym.Cells(son, 2)), Sheets.Cells(Z, 2), ym.Range(ym.Cells(5, y + 2), ym.Cells(son, y + 2)))
Next Z
Next y
Application.ScreenUpdating = True
MsgBox "YILLIK MATRAHLARINIZ AKTARILDI.", vbInformation, "userx - Excelcozum.com"
End Sub

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
Sayın arzuhalci;

Yukarıda vermiş olduğunuz kodu daha önceki koda adapte mi edilecek, yoksa silinip bu kod mu yazılacak

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










 
Geri
Üst