avare1907
Altın Üye
- Katılım
- 27 Ekim 2016
- Mesajlar
- 88
- Excel Vers. ve Dili
- excel 2010 türkçe
- Altın Üyelik Bitiş Tarihi
- 20-08-2026
Değerli hocalarım,
Aşağıda atölyede gün içerisinde verimliliği takip etmek için hazırlamış olduğum bir çalışma var kendi başıma bir noktaya kadar getirmeye çalıştım ancak bir noktadan sonra bazı konularda mantık hatası yapıyor beklentimi ve çıkan hataları tek tek açıklayacağım destek olmak adına değerli vaktiniziz ayırırsanız birçok kesim için çok esnek bir çalışma tamamlanmış olacaktır şimdiden teşekkür ediyorum,
öncelikle çalışma saatlerimizi yazayım çay ve yemek molalarının dışındaki süreler çevrimiçi sürelerdir,
07:30 işbaşı
10:00-10:15 arası çay molası
13:00-13:30 arası yemek molası
16:00-16:30 çay molası
17:00 paydos
07:30-17:30 arası 10 saat 10*60=600-15-30-15 =540 Dakika günlük çevrim içi net süremiz var
B ve D sütunu düşeyara formülü ile anted sayfamızdan otomatik geliyor günlük kapasitemiz parça bazlıdır değişkenlik gösterebilir x parça 2000 iken y parça 1800 olabilir
C sütununda parçanın o gün için kaç adet üretildiğini manuel olarak yazıyoruz
E sütununda günün tarihini
F sütununda o günün başlama saatini yazıyoruz
G Sütunu =EĞER(VE(E2<>"";F2<>"";C2<>"";D2<>""); PlanlananBitisAyri(E2;F2;C2;D2); "") bu formül ve arka planda çalışan kod ile G sütununa parçanın bitmesi gereken tarih ve saati aynı hücrede çıkartıyor %100 verim ile çalışılmış bir günde orayı aynı günün sonunda 05/11/2025 17:30 çıkartması gerekirken 16:30 çıkartıyor
H ile I sütunlarına ise gerçekleşen tarih ve saati manuel olarak yazıyorum
J sütunu sistemin planlanan ve bitiş saat aralığındaki süreyi buluyor 1. senaryodaki 540 dakika doğru ancak planlanan bitiş saati yanlış mola saatlerini düşmekte hata yapıyor aynı mantık K sütununda Gerçekleşen süre verisindede aşıdaki formüller ile çalışıyor
J hücresi =EĞER(VE(E2<>"";F2<>"";G2<>""); (G2 - (E2 + F2)) * 24 * 60; "")
k hücresi =EĞER(VE(E2<>"";F2<>"";H2<>"";I2<>""); ((H2 + I2) - (E2 + F2)) * 24 * 60; "")
N sütunundaki verililik değeri planlanan süre ile gerçekleşen süre arasındaki yaptığı kıyasla belirleniyor
----------------------------------------------------------------------------------------------buraya kadar 1. bölüm
2. senaryoda fazla mesai yada duruş var ise bu süreleri planlanan sürelerin içine entegre etmek
eğer bir parça günlük kapasitesi 2000 adet iken 2400 üretilmiş ise planlanan tarih saat hücresi bunu otomatik olarak bir sonraki günün tarihine ve fazla miktarı karşılayacak saati atar oraya yani %100 verimde 05/11/2025 07:30 - 05/11/2025 17:30 iken eğer fazla üretim var ise 06/11/2025 09:30 yapar, yada 2000 üretim olması gerekirken 1200 adet çıkmış o aşamada ise 05/11/2025 07:30 - 05/11/2025 14:00 olacakmış gibi planlar ne zamanki duruş yada fazla mesai L ile M sütunlarına fazla mesai yada duruş dakikası girildiğinde işler değişiyor
olması gereken eğer fazla mesai dakika hücresindeki dakika miktarı kadar süreyi işin başlangıç günü olan gün sonuna eklemesi yani 17:30 üzerine ekleyecek 19:30 yapacak eğer bu süre karşılamıyorsa bir sonraki günün 07:30'dan sonrasına aktaracak
duruş kısmında ise tam tersi yönde ilerleyecek planlanan süreyi duruş miktarı kadar + yönde ileri götürmesi gereklidir
burada önemli olan noktalar çalışma saatlerine dikkat etmesi gerekiyor yani bir ürün 14:00'da başlamış 17:30'da bitmiş ise yalnızca çevriçi olan süreye hangi mola denk geliyor 16:00'daki çay molası yani kullanılan süreden yalnızca 15 dakika çay molasını düşmesi gerekiyor çalışan kodu aşağıya ekliyor ve yanıtlarınızı sabırsızlıkla bekliyor olacağımı belirtmek isterim...saygılarımla
Function PlanlananBitisAyri(BaslangicTarih As Date, BaslangicSaat As Date, UretilenAdet As Double, GunlukKapasite As Double) As Date
Const GunlukNetSure As Double = 540 ' net çalışma süresi (dakika)
Const GunlukBaslangicSaat As String = "07:30"
Const GunlukBitisSaat As String = "17:30"
If GunlukKapasite = 0 Or UretilenAdet = 0 Then
PlanlananBitisAyri = 0
Exit Function
End If
Dim ParcaDakika As Double
ParcaDakika = GunlukNetSure / GunlukKapasite ' 1 adet üretim süresi (dakika)
Dim GerekliDakika As Double
GerekliDakika = UretilenAdet * ParcaDakika
Dim BitisZaman As Date
BitisZaman = BaslangicTarih + TimeValue(BaslangicSaat)
Do While GerekliDakika > 0
Dim GunBasla As Date
Dim GunBitis As Date
GunBasla = Int(BitisZaman) + TimeValue(GunlukBaslangicSaat)
GunBitis = Int(BitisZaman) + TimeValue(GunlukBitisSaat)
If BitisZaman < GunBasla Then
BitisZaman = GunBasla
ElseIf BitisZaman >= GunBitis Then
BitisZaman = Int(BitisZaman + 1) + TimeValue(GunlukBaslangicSaat)
Else
Dim KalanGunDakika As Double
KalanGunDakika = (GunBitis - BitisZaman) * 24 * 60
' Molaları kontrol et ve çıkar
Dim MolaToplam As Double
MolaToplam = 0
If BitisZaman < Int(BitisZaman) + TimeValue("10:00") And GunBitis > Int(BitisZaman) + TimeValue("10:15") Then MolaToplam = MolaToplam + 15
If BitisZaman < Int(BitisZaman) + TimeValue("13:00") And GunBitis > Int(BitisZaman) + TimeValue("13:30") Then MolaToplam = MolaToplam + 30
If BitisZaman < Int(BitisZaman) + TimeValue("16:00") And GunBitis > Int(BitisZaman) + TimeValue("16:15") Then MolaToplam = MolaToplam + 15
KalanGunDakika = KalanGunDakika - MolaToplam
If GerekliDakika <= KalanGunDakika Then
BitisZaman = BitisZaman + TimeSerial(0, GerekliDakika, 0)
GerekliDakika = 0
Else
GerekliDakika = GerekliDakika - KalanGunDakika
BitisZaman = Int(BitisZaman + 1) + TimeValue(GunlukBaslangicSaat)
End If
End If
Loop
PlanlananBitisAyri = BitisZaman
End Function

Aşağıda atölyede gün içerisinde verimliliği takip etmek için hazırlamış olduğum bir çalışma var kendi başıma bir noktaya kadar getirmeye çalıştım ancak bir noktadan sonra bazı konularda mantık hatası yapıyor beklentimi ve çıkan hataları tek tek açıklayacağım destek olmak adına değerli vaktiniziz ayırırsanız birçok kesim için çok esnek bir çalışma tamamlanmış olacaktır şimdiden teşekkür ediyorum,
öncelikle çalışma saatlerimizi yazayım çay ve yemek molalarının dışındaki süreler çevrimiçi sürelerdir,
07:30 işbaşı
10:00-10:15 arası çay molası
13:00-13:30 arası yemek molası
16:00-16:30 çay molası
17:00 paydos
07:30-17:30 arası 10 saat 10*60=600-15-30-15 =540 Dakika günlük çevrim içi net süremiz var
B ve D sütunu düşeyara formülü ile anted sayfamızdan otomatik geliyor günlük kapasitemiz parça bazlıdır değişkenlik gösterebilir x parça 2000 iken y parça 1800 olabilir
C sütununda parçanın o gün için kaç adet üretildiğini manuel olarak yazıyoruz
E sütununda günün tarihini
F sütununda o günün başlama saatini yazıyoruz
G Sütunu =EĞER(VE(E2<>"";F2<>"";C2<>"";D2<>""); PlanlananBitisAyri(E2;F2;C2;D2); "") bu formül ve arka planda çalışan kod ile G sütununa parçanın bitmesi gereken tarih ve saati aynı hücrede çıkartıyor %100 verim ile çalışılmış bir günde orayı aynı günün sonunda 05/11/2025 17:30 çıkartması gerekirken 16:30 çıkartıyor
H ile I sütunlarına ise gerçekleşen tarih ve saati manuel olarak yazıyorum
J sütunu sistemin planlanan ve bitiş saat aralığındaki süreyi buluyor 1. senaryodaki 540 dakika doğru ancak planlanan bitiş saati yanlış mola saatlerini düşmekte hata yapıyor aynı mantık K sütununda Gerçekleşen süre verisindede aşıdaki formüller ile çalışıyor
J hücresi =EĞER(VE(E2<>"";F2<>"";G2<>""); (G2 - (E2 + F2)) * 24 * 60; "")
k hücresi =EĞER(VE(E2<>"";F2<>"";H2<>"";I2<>""); ((H2 + I2) - (E2 + F2)) * 24 * 60; "")
N sütunundaki verililik değeri planlanan süre ile gerçekleşen süre arasındaki yaptığı kıyasla belirleniyor
----------------------------------------------------------------------------------------------buraya kadar 1. bölüm
2. senaryoda fazla mesai yada duruş var ise bu süreleri planlanan sürelerin içine entegre etmek
eğer bir parça günlük kapasitesi 2000 adet iken 2400 üretilmiş ise planlanan tarih saat hücresi bunu otomatik olarak bir sonraki günün tarihine ve fazla miktarı karşılayacak saati atar oraya yani %100 verimde 05/11/2025 07:30 - 05/11/2025 17:30 iken eğer fazla üretim var ise 06/11/2025 09:30 yapar, yada 2000 üretim olması gerekirken 1200 adet çıkmış o aşamada ise 05/11/2025 07:30 - 05/11/2025 14:00 olacakmış gibi planlar ne zamanki duruş yada fazla mesai L ile M sütunlarına fazla mesai yada duruş dakikası girildiğinde işler değişiyor
olması gereken eğer fazla mesai dakika hücresindeki dakika miktarı kadar süreyi işin başlangıç günü olan gün sonuna eklemesi yani 17:30 üzerine ekleyecek 19:30 yapacak eğer bu süre karşılamıyorsa bir sonraki günün 07:30'dan sonrasına aktaracak
duruş kısmında ise tam tersi yönde ilerleyecek planlanan süreyi duruş miktarı kadar + yönde ileri götürmesi gereklidir
burada önemli olan noktalar çalışma saatlerine dikkat etmesi gerekiyor yani bir ürün 14:00'da başlamış 17:30'da bitmiş ise yalnızca çevriçi olan süreye hangi mola denk geliyor 16:00'daki çay molası yani kullanılan süreden yalnızca 15 dakika çay molasını düşmesi gerekiyor çalışan kodu aşağıya ekliyor ve yanıtlarınızı sabırsızlıkla bekliyor olacağımı belirtmek isterim...saygılarımla

Function PlanlananBitisAyri(BaslangicTarih As Date, BaslangicSaat As Date, UretilenAdet As Double, GunlukKapasite As Double) As Date
Const GunlukNetSure As Double = 540 ' net çalışma süresi (dakika)
Const GunlukBaslangicSaat As String = "07:30"
Const GunlukBitisSaat As String = "17:30"
If GunlukKapasite = 0 Or UretilenAdet = 0 Then
PlanlananBitisAyri = 0
Exit Function
End If
Dim ParcaDakika As Double
ParcaDakika = GunlukNetSure / GunlukKapasite ' 1 adet üretim süresi (dakika)
Dim GerekliDakika As Double
GerekliDakika = UretilenAdet * ParcaDakika
Dim BitisZaman As Date
BitisZaman = BaslangicTarih + TimeValue(BaslangicSaat)
Do While GerekliDakika > 0
Dim GunBasla As Date
Dim GunBitis As Date
GunBasla = Int(BitisZaman) + TimeValue(GunlukBaslangicSaat)
GunBitis = Int(BitisZaman) + TimeValue(GunlukBitisSaat)
If BitisZaman < GunBasla Then
BitisZaman = GunBasla
ElseIf BitisZaman >= GunBitis Then
BitisZaman = Int(BitisZaman + 1) + TimeValue(GunlukBaslangicSaat)
Else
Dim KalanGunDakika As Double
KalanGunDakika = (GunBitis - BitisZaman) * 24 * 60
' Molaları kontrol et ve çıkar
Dim MolaToplam As Double
MolaToplam = 0
If BitisZaman < Int(BitisZaman) + TimeValue("10:00") And GunBitis > Int(BitisZaman) + TimeValue("10:15") Then MolaToplam = MolaToplam + 15
If BitisZaman < Int(BitisZaman) + TimeValue("13:00") And GunBitis > Int(BitisZaman) + TimeValue("13:30") Then MolaToplam = MolaToplam + 30
If BitisZaman < Int(BitisZaman) + TimeValue("16:00") And GunBitis > Int(BitisZaman) + TimeValue("16:15") Then MolaToplam = MolaToplam + 15
KalanGunDakika = KalanGunDakika - MolaToplam
If GerekliDakika <= KalanGunDakika Then
BitisZaman = BitisZaman + TimeSerial(0, GerekliDakika, 0)
GerekliDakika = 0
Else
GerekliDakika = GerekliDakika - KalanGunDakika
BitisZaman = Int(BitisZaman + 1) + TimeValue(GunlukBaslangicSaat)
End If
End If
Loop
PlanlananBitisAyri = BitisZaman
End Function

