Soru Şarta Göre Saatleri Düzenleme

Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Merhabalar;
Ekli dosyada C18:C48 hücre aralığında tarihler var. Yapılmak istenen;
a) Bu tarih aralığında Pazar Günlerinin karşısındaki saatleri silecek
b) Cumartesi günlerinin karşısındaki saatlerden Başlangıç Saati 13:00 den önce ise bu saatleri 13:00 yapacak. 13:00 dan sonra başlayanlarda ise Başlangıç saati ile dönüş saati arasında 6 saatten fazla ise başlangıç dönüş saati arasını 6 saate ayarlayacak.
c) Hafta içi saatleri başlangıç saati 17:00 dan önce ise ,başlangıç saatini 17:00 yapacak. Dönüş saati Başlangıç saatinden 3 saatten fazla ise dönüş saatini 3 saate çekecek
Biraz karışık gibi. Umarım böyle bir şey yapılabilir

 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Örneğin: Cumartesi Başlangıç 08:00 Bitiş:19:300 olsun > Başlangıç 13:00 Bitiş 19:00 yapacak (Çünkü 6,5 saat olduğu için Bitişi 6 saate çekecek)
Hafta İçi: Başlangıç 16:00 ,Bitiş: 22:00 > Başlangıç 17:00 yapacak Bitişi ise 20:00 yapacak (Çünkü Fark 5 saat olduğu için Bitişi 3 saate çekecek)
Yani: Hafta içi fazla saat 17:00 dan sonra 3 saati geçemez. Hafhta sonu ise 13: 00 dan sonra 6 saati geçemez
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Sayın hocalarım rica etsem konuya destek olabilir misiniz
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Mesela C20:F20 aralığı için sonuç ne olmalı?
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Korhan hocam
Başl:17:00 Bitiş :18:30 Sonuç:1,5 Saat olmalı
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Sub Mesai_Saatlerini_Duzenle()
    Dim Veri As Range
    
    With Sheets("FAZLA MESAİ GİRİŞİ")
        .Range("F18:F48").ClearContents
        
        For Each Veri In .Range("C18:C48")
            If WorksheetFunction.Weekday(Veri, 2) = 7 Then
                Veri.Offset(, 1).Resize(1, 2).ClearContents
            ElseIf WorksheetFunction.Weekday(Veri, 2) = 6 Then
                If Veri.Offset(, 1) <> "" And Format(Veri.Offset(, 1), "hh:mm:ss") < Format(TimeSerial(13, 0, 0), "hh:mm:ss") Then
                    Veri.Offset(, 1) = "13:00"
                End If
                If Format((Veri.Offset(, 2) - Veri.Offset(, 1)), "hh:mm:ss") > Format(TimeSerial(6, 0, 0), "hh:mm:ss") Then
                    Veri.Offset(, 2) = Veri.Offset(, 2) - ((Veri.Offset(, 2) - Veri.Offset(, 1)) - TimeSerial(6, 0, 0))
                End If
                If Format(Veri.Offset(, 2), "hh:mm:ss") < Format(TimeSerial(13, 0, 0), "hh:mm:ss") Then Veri.Offset(, 1).Resize(1, 2).ClearContents
            Else
                If Veri.Offset(, 1) <> "" And Format(Veri.Offset(, 1), "hh:mm:ss") < Format(TimeSerial(17, 0, 0), "hh:mm:ss") Then
                    Veri.Offset(, 1) = "17:00"
                End If
                If Format((Veri.Offset(, 2) - Veri.Offset(, 1)), "hh:mm:ss") > Format(TimeSerial(3, 0, 0), "hh:mm:ss") Then
                    Veri.Offset(, 2) = Veri.Offset(, 2) - ((Veri.Offset(, 2) - Veri.Offset(, 1)) - TimeSerial(3, 0, 0))
                End If
                If Format(Veri.Offset(, 2), "hh:mm:ss") < Format(TimeSerial(17, 0, 0), "hh:mm:ss") Then Veri.Offset(, 1).Resize(1, 2).ClearContents
            End If
            If Format((Veri.Offset(, 2) - Veri.Offset(, 1)), "hh:mm:ss") < Format(TimeSerial(0, 15, 0), "hh:mm:ss") Then Veri.Offset(, 1).Resize(1, 2).ClearContents
            Veri.Offset(, 3) = (Veri.Offset(, 2) - Veri.Offset(, 1)) * 24
        Next
        
        .Range("F18:F48").Formula = "=IFERROR(VLOOKUP(TEXT((E18-D18),""ss:dd:nn""),{""00:14:00"","""";""00:39:00"",0.5;""01:00:00"",1},2,0),(E18-D18)*24)"
        .Range("F18:F48").Value = .Range("F18:F48").Value
        .Range("F18:F48").NumberFormat = "General"
    End With

    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Şu kodda hata verdi
Kod:
If Veri.Offset(, 3) > 3 Then
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Formül kısmınıda güncellemeniz gerekiyor. Üstte ki mesajımı revize ettim. Tekrar okuyup uygulayınız.
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Hocam formül kısmı aslında bizi ilgilendirmiyor.
Başlangıç Saati Hafta İçi 17:00 dan önce ise bu saati 17:00 yapacak. Bitiş saati ise 20:00 dan fazla ise 20:00 yapacak. 20:00 dan az ise bitiş saati aynı kalacak. Bitiş saati 3 saati geçemez.3 saatten az olabilir.
Cumartesi ise başlangıç saati 13:00 dan önce ise bu saati 13:00 yapacak. Bitiş saati 19:00 dan fazla ise bu saati 19:00'a çekecek. Önemli olan 6 saati geçmemesi .6 saatten az olabilir
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dediğim işlemi yapıp denediniz mi?
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Denedim. Şartı sağlamadı
Hafta İçi Başl:18:00 Bitişi saati :22:00 olduğu zaman > Başl:18:00 Bitiş :21:00 olmalıydı. Formülü siz dikkate almayın hocam
Hafta İçi 17:00 dan itibaren bitiş saati 3 saati geçerse bunu 3 saate düşürcek
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kullanılan formülü süre hesapladığı için bende kullandım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Önerdiğim kodu revize ettim. Tekrar deneyiniz.

Formülü dikkate almayacaksak eğer "DÖNÜŞ SAATİ'nin boş olma durumu var mı?" sorusunu sormalıyım.
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Örnekler Hafta İçi İçin
08:00-18:00>17:00-18:00
16:30-20:30>17:00-20:00
08:30-22:15>17:00-20:00
17:50-23:00>17:50-20:50
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Formülü iptal ettim. Kodu tekrar revize ettim. Deneyiniz.
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Hocam sadece ufak bir ekleme yaparsanız olacak. Başlangıç ve bitiş saati arası 0.5 den küçük ise hem başlangıç hemde bitiş saatini silebilir mi?. Çünkü yarım saatten az ise mesai hesaplanmıyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,276
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
0,5 olarak yarım saatimi (30 dakika) ifade ediyorsunuz?
 
Katılım
7 Şubat 2021
Mesajlar
455
Excel Vers. ve Dili
2010, Türkiye
Birde hocam hafta içi bitiş saati 17:00 dan önce ise hem başlangıç hem de bitiş saatini silebilir mi?
 
Üst