• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

MOD Fonksiyonu VBA

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,299
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.
 
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.
 
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
 
Deneyeegim, lakin mod fonksiyonunun vba kısmına ihtiyacım var.
 
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:
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
 
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
 
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.
 
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

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.
 
Anlamakda zorluk çekiyorum.Çalışma örneğinizi paylaşırsanız daha iyi anlarım.
 
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

Ektedir.
 

Ekli dosyalar

20 dakikada bir yuvarlama isterseniz Formülü deneyin.

=KYUVARLA(F2;"00:20")
 
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
 
Dosya
 

Ekli dosyalar

Geri
Üst