MOD Fonksiyonu VBA

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Merhaba,

-Saat farkını aldırmak için kullandığımız mod fonksiyonunun VBA tarafında karşılığı var mıdır?
-Bulunan saat ve dakika farkından kendi belirleyeceğim dakikayı çıkartabilmem için "hh:mm" araya girerek - yapmak istediğimde hata meydana geliyor.
Örnek : Bulunan süre 01:30 dakika olsun 20 dakikasını çıkaracağım ve 01:10 dakika eldmek istiyorum veya 40 dakika ekleyerek 02:10 dakika olmasını istiyorum

Sorunun amacı sadece saat farkları hesaplanmaktadır. Gün atladığında gece çalışması ile mesai saatinin başladığı saat farkı olduğu için vba 'de karşılığını bulmam gerekmektedir. Tarih girilmemektedir.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,439
Excel Vers. ve Dili
2019 Türkçe
Merhaba.

Excelde ( Bugün -1 = Dünün tarihini döndürür)
Bugün + 1 = Yarının tarihini döndürür.

Yani 1 rakamı 1 günü ifade eder.
1 saati bulmak için 1/ 24 yazılır.

Bir tarihten 1 saat çıkarmak için =Tarih/(1/24)
1 dakika çıkarmak için = Tarih/((1/24)60)

Buna göre düşünerek kod yazın.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,439
Excel Vers. ve Dili
2019 Türkçe
MsgBox DateAdd("n", 12, Now) Şimdinin zamanına 12 dakika ekler.
"n" yerine kullanabileceğiniz diğer değerler:

yyyy Yıl
q çeyrek
m Ay
y Yılın günü
d Gün
w Hafta içi
ww Hafta
h Saat
n Dakika
 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Deneyeegim, lakin mod fonksiyonunun vba kısmına ihtiyacım var.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Mod fonksiyonuna ihtiyac duymadan aşağıdaki şekilde hesaplayabilirsiniz.
A Sütununa başlama zamanını B sütununa bitiş zamanını yazınız.
Kod:
Sub surehesapla()
Dim s1 As Worksheet:Dim i as Integer
Set s1 = Sheets("Sayfa1")
son = s1.Cells(65355, "A").End(3).Row
For i = 2 To son
s1.Range("C" & i) = s1.Range("B" & i) + 1 - s1.Range("A" & i)
s1.Range("C" & i).NumberFormat = "hh:mm:ss"
Next i
End Sub
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,099
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif;

1-
Kod:
Sub Test()
    MsgBox Format(IIf((Range("B1") - Range("A1")) < 0, 1, 0) - Abs((Range("B1") - Range("A1"))), "hh:mm:ss")
End Sub
2-
Kod:
Sub Test()
    MsgBox Format(Evaluate("=MOD(B1-A1,1)"), "hh:mm:ss")
End Sub
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Aşağıdaki kodlarla tam istenilen sonuç elde ediliyor.Diğer kodda gün ilgili bir sorun var.
Kod:
Sub surehesapla()
Dim s1 As Worksheet: Dim i As Integer
Set s1 = Sheets("Sayfa1")
son = s1.Cells(65355, "A").End(3).Row
For i = 2 To son
s1.Range("C" & i).NumberFormat = "hh:mm:ss"
s1.Range("C" & i) = s1.Range("B" & i) + 1 - s1.Range("A" & i) - Int(s1.Range("B" & i) + 1 - s1.Range("A" & i))
Next i
End Sub
 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Verilerim Userform üzerindedir.

Başlangıç Saatim : Textbox1
Bitiş Saatim : Textbox2

Örnek :

Başlangıç Saatim : 23:00
Bitiş Saatim : 00:30

Sonuç : 1 Saat 30 dakika

Tarih verisi girmemekteyiz. Bizim için önemli olan saat verisidir.

Ben, çıkan sonuca göre;

Eğer mesai dakikası 0-20 Dakika olursa dakika sıfırlanır
Eğer mesai dakikası 21-40 Dakika olursa dakikaya +30 dakika eklenir
Eğer mesai dakikası 41-59 Dakika olursa dakikaya +30 dakika eklenir yapacağım.

Lakin yazılı kodlar sheet içerisinde geçerli olmaktadır. Fakat ben saat verisini textboxlardan almaktayım. tüm verilen kodları textbox için
convert ettiğimde type miss mach almaktayım.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Textbox1'e başlangıç saatini,Textbox2'ye Bitiş saatini yazınız. Maus Üserform üzerine geldiğinizde Textbox3 'de geçen süreyi saat olarak hesaplar.
Diğer konulara bakamadım.
 

Ekli dosyalar

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Sayın Çıtır,

Çok teşekkür ederim.

Ben şu kodla zamanı bulabiliyordum

saat = CSng((CDate(Me.TextBox5) - CDate(Me.TextBox6)) * 24) * 60
Zaman = -saat

Fakat, bir gün sonra ki saat oldugunda çuvallıyordum. Sizin kodunuzla herşey yerine oturdu.

Şimdi araya dakika ekleme ve çıkarma işlemi kaldı.

Eğer mesai dakikası 0-20 Dakika olursa dakika sıfırlanır
Eğer mesai dakikası 21-40 Dakika olursa dakikaya +30 dakika eklenir
Eğer mesai dakikası 41-59 Dakika olursa dakikaya +30 dakika eklenir yapacağım.

Burada ki Eğer cümlesini açmam gerekecek sanırım

Örneğin :

1:10 dakika oldu ise (0-20 dakika arası olduğu için) 01:00 saat olarak
01:21 dakika oldu ise (21-40 dakika arası olduğu için ) 01:30 dakika olarak
01:41 dakika oldu ise (41-59 dakika arası olduğu için ) 02:00 dakika olarak kaydedeceğim.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Anlamakda zorluk çekiyorum.Çalışma örneğinizi paylaşırsanız daha iyi anlarım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,099
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki kodları deneyiniz.

Örnek dosya ektedir.

Kod:
Option Explicit

Private Sub CommandButton1_Click()
    Dim Z1, Z2, Z3
    If TextBox1 <> "" And TextBox2 <> "" Then
        Z1 = Replace(CDbl(CDate(TextBox1)), ",", ".")
        Z2 = Replace(CDbl(CDate(TextBox2)), ",", ".")
        Z3 = Replace(Val(Z2) - Val(Z1), ",", ".")
        TextBox3 = Format(Evaluate("=MOD(" & Z3 & ",1)"), "hh:mm")
    End If
End Sub

Private Sub CommandButton2_Click()
    If TextBox3 <> "" Then
        MsgBox Minute(TextBox3)
        Select Case Minute(TextBox3)
            Case 0 To 20
                TextBox3 = Format(Hour(TextBox3) & ":00", "hh:mm")
            Case 21 To 40
                TextBox3 = Format(Hour(TextBox3) & ":30", "hh:mm")
            Case 41 To 59
                TextBox3 = Format(Hour(TextBox3) + 1 & ":00", "hh:mm")
        End Select
    End If
End Sub
 

Ekli dosyalar

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Ektedir.
 

Ekli dosyalar

Suskun

Altın Üye
Altın Üye
Katılım
27 Kasım 2006
Mesajlar
292
Excel Vers. ve Dili
Excel 19
Altın Üyelik Bitiş Tarihi
24.05.2032
20 dakikada bir yuvarlama isterseniz Formülü deneyin.

=KYUVARLA(F2;"00:20")
 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,292
Excel Vers. ve Dili
Microsoft Office 2019 English
Aşağıdaki kodları deneyiniz.

Örnek dosya ektedir.

Kod:
Option Explicit

Private Sub CommandButton1_Click()
    Dim Z1, Z2, Z3
    If TextBox1 <> "" And TextBox2 <> "" Then
        Z1 = Replace(CDbl(CDate(TextBox1)), ",", ".")
        Z2 = Replace(CDbl(CDate(TextBox2)), ",", ".")
        Z3 = Replace(Val(Z2) - Val(Z1), ",", ".")
        TextBox3 = Format(Evaluate("=MOD(" & Z3 & ",1)"), "hh:mm")
    End If
End Sub

Private Sub CommandButton2_Click()
    If TextBox3 <> "" Then
        MsgBox Minute(TextBox3)
        Select Case Minute(TextBox3)
            Case 0 To 20
                TextBox3 = Format(Hour(TextBox3) & ":00", "hh:mm")
            Case 21 To 40
                TextBox3 = Format(Hour(TextBox3) & ":30", "hh:mm")
            Case 41 To 59
                TextBox3 = Format(Hour(TextBox3) + 1 & ":00", "hh:mm")
        End Select
    End If
End Sub


Aşağıdaki kodları deneyiniz.

Örnek dosya ektedir.

Kod:
Option Explicit

Private Sub CommandButton1_Click()
    Dim Z1, Z2, Z3
    If TextBox1 <> "" And TextBox2 <> "" Then
        Z1 = Replace(CDbl(CDate(TextBox1)), ",", ".")
        Z2 = Replace(CDbl(CDate(TextBox2)), ",", ".")
        Z3 = Replace(Val(Z2) - Val(Z1), ",", ".")
        TextBox3 = Format(Evaluate("=MOD(" & Z3 & ",1)"), "hh:mm")
    End If
End Sub

Private Sub CommandButton2_Click()
    If TextBox3 <> "" Then
        MsgBox Minute(TextBox3)
        Select Case Minute(TextBox3)
            Case 0 To 20
                TextBox3 = Format(Hour(TextBox3) & ":00", "hh:mm")
            Case 21 To 40
                TextBox3 = Format(Hour(TextBox3) & ":30", "hh:mm")
            Case 41 To 59
                TextBox3 = Format(Hour(TextBox3) + 1 & ":00", "hh:mm")
        End Select
    End If
End Sub

Korhan Bey ,

çok çok teşekkür ederim
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Dosya
 

Ekli dosyalar

Üst