Üretim Planlama için visual basic kod değişimi

Katılım
10 Haziran 2011
Mesajlar
24
Excel Vers. ve Dili
Microsoft Office Professional Plus 2019 Türkçe
Merhaba Arkadaşlar, benim acil yardıma ihtiyacım var.

Birkaç yıl önce bu siteden bir arkadaşın yardımı ile Excel'de bir üretim planı oluşturmuştuk. İş yerinde çalışma saatleri değiştiği için bu kodlar da değişiklik yapmam gerekiyor fakat kod bilgim olmadığı için yapamıyorum.

Sistem şu şekilde çalışıyor.

Şirketimizde işin durumuna göre 3 faklı şekilde çalışabiliyoruz. Bu çalışmalar aşağıdaki şekilde belirtilmiştir.

Vardiya durumuna göre belirtilen hücreye 1 yazdığımda birinci seçeneğe göre, hücreye 2 yazdığımda ikinci seçeneğe göre, 3 yazdığımda üçüncü seçeneğe göre işin süresini hesaplayıp bitiş tarihini ve saatini çıkarıyor.

Aşağıdaki kodlar ve sistem sorunsuz çalışıyor fakat dediğim gibi çalışma saatlerimiz 2. ve 3. seçeneklerde değiştiği için sorun yaşıyorum.

Yardımcı olabilecek bir arkadaş varsa gerçekten çok memnun olurum.


Yeni çalışma saatlerimiz şu şekilde;

1- (24 saat çalışma) Pazartesi sabah 08.00 dan Cumartesi akşamı 20.00 a kadar kesintisiz çalışma (BUNDA HERHANGİ BİR DEĞİŞİKLİK YOK)
2- (Vardiyalı Mesaisiz çalışma) Hafta içi sabah 08.00 dan gece 00.00 'a kadar (16 saat - Cumartesi Pazar tatil) - (ESKİDEN SABAH 08:00 - GECE 00.30 ARASI 16,5 SAAT VE CUMARTESİ 13.00 'A KADARDI. BURADA HAFTA İÇİ YARIM SAAT AZALMA OLACAK VE CUMARTESİ KALDIRILACAK)
3- (Normal çalışma) Hafta içi sabah 08.00 dan akşam 18.00 'a kadar (10 saat - Cumartesi Pazar tatil) - (ESKİDEN 08:00 - 18.00 ARASI VE CUMARTESİ 13.00 A KADARDI. BURADA DA CUMARTESİ GÜNÜ KALDIRILACAK)


Değişecek kodlar da şu şekilde;



Function saat_bul(bas As Date, plan As Double, vard As Byte)
On Error GoTo son
saat = plan * 2

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "20:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then 'cumartesi
If Format(bit, "hh:nn") > "00:30" Then
If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
End If
End If
' i = i - 1
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Weekday(bit, vbMonday) = 1 Then
If Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") <= "08:00" Then
i = i - 1
End If
ElseIf Format(bit, "hh:nn") >= "00:30" And Format(bit, "hh:nn") < "08:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then ' cumartesi
If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
End If
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
son:
End Function
 
Katılım
8 Ağustos 2017
Mesajlar
34
Excel Vers. ve Dili
Office 365 ProPlus İngilizce
Şunu bi denermisin? 3 düzeldi ama 2 yi kontrol etme şansım olmadı. Program normalde yarım saat eksik mi hesaplıyor?

Kod:
Function saat_bul(bas As Date, plan As Double, vard As Byte)
On Error GoTo son
saat = plan * 2

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "20:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then 'cumartesi
'If Format(bit, "hh:nn") > "00:30" Then
'If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
'End If
'End If
' i = i - 1
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Weekday(bit, vbMonday) = 1 Then
If Format(bit, "hh:nn") >= "00:30" And Format(bit, "hh:nn") <= "08:00" Then
i = i - 1
End If
ElseIf Format(bit, "hh:nn") >= "00:30" And Format(bit, "hh:nn") < "08:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then ' cumartesi
'If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
'End If
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
son:
End Function
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
mesajı şimdi gördüm.
Sanırım arkadaş kodu düzenlemiş ama deneyemedim.
Kod:
Function saat_bul(bas As Date, plan As Double, vard As Byte)
On Error GoTo son
saat = plan * 2 'yarım saatte bir kontrol için

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "20:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then 'cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 Then
        If Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") <= "08:00" Then
          i = i - 1
        End If
    ElseIf Format(bit, "hh:nn") >= "01:00" And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then ' cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
son:
End Function
 
Katılım
10 Haziran 2011
Mesajlar
24
Excel Vers. ve Dili
Microsoft Office Professional Plus 2019 Türkçe
Merhaba arkadaşlar, öncelikle ikinize de vakit ayırıp yardımcı olmaya çalıştığınız için çok teşekkür ederim. Kodları denedim ama küçük sorunlar var sanırım.

@esalci; Dediğiniz gibi 3 numara çok güzel çalışıyor ben bir sorun göremedim. 2 numara da şöyle bir sorun var; Cuma gecesinden sonra pazartesi sabahına geçmesi lazım ama önce Pazarı Pazartesiye bağlayan gece 00:00 gösteriyor sonra Pazartesi sabahına geçiyor. Burada küçük bir sorun var sanırım. Zahmet olmaz ise bunu da düzeltebilirseniz çok memnun olurum.

@Mehmet Şahin; Mesajınız için çok teşekkür ederim. Daha önce bu kodları siz yazmıştınız tekrar sizinle görüşmek güzel. Mehmet bey kodu çalıştıramadım hata veriyor, hata ayıklamaya giriyor ama sorunun nerede olduğunu bilmediğim için düzeltemedim.
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Merhaba,
kodları ilk yaptığımız dosyaya ekledim.
İyi çalışmalar.
 

Ekli dosyalar

Katılım
10 Haziran 2011
Mesajlar
24
Excel Vers. ve Dili
Microsoft Office Professional Plus 2019 Türkçe
Merhaba,
kodları ilk yaptığımız dosyaya ekledim.
İyi çalışmalar.
Mehmet bey yardımınız için çok teşekkür ederim fakat dosyayı indiremiyorum Altın üyelik gerekiyor. Yazma şansınız var mı acaba?

@esalci arkadaşımızın gönderdiği kodda 3 numara düzelmiş. 2 numarada hata vardı. 3 numarayı 2 numaraya kopyalayıp şöyle bir değişiklik yaptım. Bu olur mu acaba?


Function saat_bul(bas As Date, plan As Double, vard As Byte)
On Error GoTo son
saat = plan * 2

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "20:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
i = i - 1
ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then ' cumartesi
'If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
'End If
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "23:59" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
If Weekday(bit, vbMonday) = 6 Then ' cumartesi
'If Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "13:00" Then
i = i - 1
'End If
ElseIf Weekday(bit, vbMonday) = 7 Then 'pazar
i = i - 1
ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
i = i - 1
End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
son:
End Function
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Kodlar şudur;
Kod:
Public Function saat_bul(bas As Date, plan As Double, vard As Byte)
saat = plan * 2

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "00:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then 'cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 Then
        If Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") <= "08:00" Then
          i = i - 1
        End If
    ElseIf Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then ' cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")

son:
End Function
 
Son düzenleme:
Katılım
10 Haziran 2011
Mesajlar
24
Excel Vers. ve Dili
Microsoft Office Professional Plus 2019 Türkçe
Kodlar şudur;
Kod:
Public Function saat_bul(bas As Date, plan As Double, vard As Byte)
saat = plan * 2

bit = bas
If vard = 1 Then
GoTo 1
ElseIf vard = 2 Then
GoTo 2
Else
GoTo 3
End If
1:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 And Format(bit, "hh:nn") >= "00:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 And Format(bit, "hh:nn") >= "00:00" Then
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
2:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then 'cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 1 Then
        If Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") <= "08:00" Then
          i = i - 1
        End If
    ElseIf Format(bit, "hh:nn") >= "00:00" And Format(bit, "hh:nn") < "08:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")
GoTo son
3:
For i = 1 To saat
bit = bit + CDate(Format("00:30", "hh:nn"))
    If Weekday(bit, vbMonday) = 6 Then ' cumartesi
    i = i - 1
    ElseIf Weekday(bit, vbMonday) = 7 Then  'pazar
    i = i - 1
    ElseIf Format(bit, "hh:nn") < "08:00" Or Format(bit, "hh:nn") >= "18:00" Then
    i = i - 1
    End If
Next i
saat_bul = Format(bit, "dd/mm/yyyy hh:nn")

son:
End Function

Mehmet bey yardımlarınız için çok teşekkür ederim gerçekten çok işime yaradı. Kodu kontrol ettim hiçbir sorun göremedim.

@esalci sanada çok teşekkür ederim zaman ayırıp yardımcı olduğun için.


Herşeyin için teşekkürler :)
 

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Buradan indirebilirsiniz.
 
Üst