עיגול דקה באקסס

ממוו

משתמש רשום
מישהו יודע איך עושים קוד שמעגל את הדקות ל5 דקות באקסס כלומר שאם כתוב לי 7:33 יעגל ל 7:35 וכו'
אשמח לעזרת הציבור
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
שם הפונקציה היא Round()
 

ממוו

משתמש רשום
שם הפונקציה היא Round()
תודה רבה
אבל לא הצלחתי להתשמש בו
זאת אומרת נניח שכתבתי בתוך הפונצקיה שדה שמכילה נתון 22 הוא מציג לי ג"כ את המספר הזה ולא מעגל אותו. אולי צריך עוד משהו אחרי הפסיק. אשמח אם תלמד אותי
תודה רבה
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
אתה צודק, זה מעט יותר מורכב.
הרצון הוא רק לעגל את הדקות ולכן צריך לפרק את השדה לגורמים, להפעיל את המניפוציה על הדקות, ולהרכיב מחדש את השדה.
לשם ההמחשה:
קוד:
Public Sub Example()
    'הצהרת משתנים
    Dim YourTime As Date
    Dim lngHours As Long, lngMinutes As Long, lngSeconds As Long
    
    ' משתנה המכיל את השעה אותו יש לעגל
    YourTime = Time
    
    ' פירוק השעה לגורמים
    lngHours = Hour(YourTime)
    lngMinutes = Minute(YourTime)
    lngSeconds = Second(YourTime)
    
    ' הפעלת המניפולציה על הדקות (עיגול ל5 הקרוב)
    lngMinutes = Round(lngMinutes / 5) * 5
    
    ' הרכבת השעה מחדש
    YourTime = Int(YourTime) + TimeSerial(lngHours, lngMinutes, lngSeconds)
    
    ' הצגת השעה החדשה למשתמש
    MsgBox YourTime
End Sub
 

ממוו

משתמש רשום
אתה צודק, זה מעט יותר מורכב.
הרצון הוא רק לעגל את הדקות ולכן צריך לפרק את השדה לגורמים, להפעיל את המניפוציה על הדקות, ולהרכיב מחדש את השדה.
לשם ההמחשה:
תודה רבה עזרת לי מאוד
אבל מה שנשאר לי זה לעשות תנאי שבמידה והדקות הם 60 יוסיף שעה כדי שלא תהיה שעה 6:60
ולא הצלחתי להגדיר פונקציה שמוסיפה שעה אחת
עשיתי כך
(Hour([שעה]) +1)
והוא מציג לי את השעה המקורית ללא הוספת שעה
אשמח לעזרתך
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
כל הקוד הזה ניתן לכתוב בשורה אחת, אבל כתבתי בצורה ארוכה בגלל שכך זה יותר ברור.

קוד:
Public Sub Example()
    'הצהרת משתנים
    Dim YourTime As Date
    Dim lngHours As Long, lngMinutes As Long, lngSeconds As Long
    
    ' משתנה המכיל את השעה אותו יש לעגל
    YourTime = Time
    
    ' פירוק השעה לגורמים
    lngHours = Hour(YourTime)
    lngMinutes = Minute(YourTime)
    lngSeconds = Second(YourTime)
    
    ' הפעלת המניפולציה על הדקות (עיגול ל5 הקרוב)
    lngMinutes = Round(lngMinutes / 5) * 5
    
    ' עם העיגול נתן לנו 60 דקות, הגדל השעות ב1 ואיפוס הדקות
    If lngMinutes = 60 Then
        lngMinutes = 0
        lngHours = lngHours + 1
    End If
    
    ' הרכבת השעה מחדש
    YourTime = Int(YourTime) + TimeSerial(lngHours, lngMinutes, lngSeconds)
    
    ' הצגת השעה החדשה למשתמש
    MsgBox YourTime
End Sub
 

ari rm

משתמש פעיל
בס"ד
אפשר פונקציה, להכניס כל שעה שהיא, ולעגל:
קוד:
Public Function Example(YourTime)
    'הצהרת משתנים
    Dim YourTime As Date
    Dim lngHours As Long, lngMinutes As Long, lngSeconds As Long
    
'    ' משתנה המכיל את השעה אותו יש לעגל
'    YourTime = Time
    
    ' פירוק השעה לגורמים
    lngHours = Hour(YourTime)
    lngMinutes = Minute(YourTime)
    lngSeconds = Second(YourTime)
    
    ' הפעלת המניפולציה על הדקות (עיגול ל5 הקרוב)
    lngMinutes = Round(lngMinutes / 5) * 5
    
    ' עם העיגול נתן לנו 60 דקות, הגדל השעות ב1 ואיפוס הדקות
    If lngMinutes = 60 Then
        lngMinutes = 0
        lngHours = lngHours + 1
    End If
    
    ' הרכבת השעה מחדש
    YourTime = Int(YourTime) + TimeSerial(lngHours, lngMinutes, lngSeconds)
    
    ' הצגת השעה החדשה למשתמש
    Example = YourTime
End Function

לעגל תמיד למטה:
להחליף את זה:
קוד:
    lngMinutes = Round(lngMinutes / 5) * 5
בזה:
קוד:
  lngMinutes = Int(lngMinutes / 5) * 5
לעגל תמיד למעלה:
להחליף את הנ"ל בזה:
קוד:
lngMinutes = (Int(lngMinutes / 5)+1) * 5
 

ממוו

משתמש רשום
למעשה אני הצלחתי אחרי כל ההסברים הנ"ל לעשות את העיגול ב"בונה הביטוים" ולא ע"י קוד (אני לא יודע להתעסק עם קודים)
באופן הזה (לשם דוגמא התיחסתי לשדה המכילה שעה בשם "קבלת שבת"
קוד:
IIf(Minute([קבלת שבת])<58,IIf(Round(Minute([קבלת שבת])/5)*5>8,Hour([קבלת שבת]) & ":" & Round(Minute([קבלת שבת])/5)*5,Hour([קבלת שבת]) & ":0" & Round(Minute([קבלת שבת])/5)*5),Hour(DateAdd("h",+1,[קבלת שבת])) & ":00")
 

ari rm

משתמש פעיל
בס"ד
אם אתה מתכוון לזה,
יותר נורמלי זה:

קוד:
=((Round(((([קבלת שבת]*24)*60)/5))*5)/60)/24
עיגול תמיד למטה:
קוד:
=((Int(((([קבלת שבת]*24)*60)/5))*5)/60)/24
עיגול תמיד למעלה:
קוד:
=((Int(((([קבלת שבת]*24)*60)+4)/5)*5)/60)/24
הסבר בקיצור:
הקוד של היום הוא לפי מספרים מ1990 וכל יום הוא עוד מספר ולכן כל ספרה אחת מתחלקת ל24 שעות וכל שעה מתחלקת ל60 דקות
 

ממוו

משתמש רשום
א. תודה רבה רבה
ב. ניסיתי לעשות את זה וזה לא עובד לי בכלל
אני מצרף דוגמא
ג. צריך שתהיה אפשרות גם של עיגול או למעלה או למטה תלוי במספר. כלומר ש 32 מתעגל ל30 ו34 מתעגל ל35
 

קבצים מצורפים

  • דוגמא.zip
    KB 21.8 · צפיות: 19

moishy

משתמש סופר מקצוען
מנוי פרימיום
בשאילתא תוכל להשתמש בזה:
קוד:
RoundedTime: TimeSerial(Hour([קבלת שבת]),(Minute([קבלת שבת])\5)*5,0)
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
ניתן גם להשתמש בפונקציה זו:
קוד:
Public Function RoundTime(varTime As Variant, Optional ByVal lngSeconds As Long = 900&) As Variant
    'Purpose:   Round a date/time value to the nearest number of seconds
    'Arguments: varTime = the date/time value
    '           lngSeconds = number of seconds to round to.
    '               e.g.  60 for nearest minute,
    '                    600 for nearest 10 minutes,
    '                   3600 for nearest hour,
    '                  86400 for nearest day.
    'Return:    Rounded date/time value, or Null if no date/time passed in.
    'Note:      lngSeconds must be between 1 and 86400.
    '           Default rounds is nearest 15 minutes.
    Dim lngSecondsOffset As Long
    
    RoundTime = Null        'Initialize to return Null.
    If Not IsError(varTime) Then
        If IsDate(varTime) Then
            If (lngSeconds < 1&) Or (lngSeconds > 86400) Then
                lngSeconds = 1&
            End If
            lngSecondsOffset = lngSeconds * CLng(DateDiff("s", #12:00:00 AM#, TimeValue(varTime)) / lngSeconds)
            RoundTime = DateAdd("s", lngSecondsOffset, DateValue(varTime))
        End If
    End If
End Function
מתוך האתר http://allenbrowne.com/round.html

ואז בשאילתא:
קוד:
RoundedTime: RoundTime([קבלת שבת],300)
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
לחלופין, ניתן להשתמש עם הפונקציה שהובאה למעלה:
קוד:
Public Function Example(YourTime As Date)
    'הצהרת משתנים
    Dim lngHours As Long, lngMinutes As Long, lngSeconds As Long
   
    ' פירוק השעה לגורמים
    lngHours = Hour(YourTime)
    lngMinutes = Minute(YourTime)
    lngSeconds = Second(YourTime)
   
    ' הפעלת המניפולציה על הדקות (עיגול ל5 הקרוב)
    lngMinutes = Round(lngMinutes / 5) * 5
   
    ' עם העיגול נתן לנו 60 דקות, הגדל השעות ב1 ואיפוס הדקות
    If lngMinutes = 60 Then
        lngMinutes = 0
        lngHours = lngHours + 1
    End If
   
    ' הרכבת השעה מחדש
    YourTime = Int(YourTime) + TimeSerial(lngHours, lngMinutes, lngSeconds)
   
    ' הצגת השעה החדשה למשתמש
    Example = YourTime
End Function

ואז בשאילתא:
קוד:
RoundedTime: Example([קבלת שבת])
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קיט ר'

קנג רְאֵה עָנְיִי וְחַלְּצֵנִי כִּי תוֹרָתְךָ לֹא שָׁכָחְתִּי:קנד רִיבָה רִיבִי וּגְאָלֵנִי לְאִמְרָתְךָ חַיֵּנִי:קנה רָחוֹק מֵרְשָׁעִים יְשׁוּעָה כִּי חֻקֶּיךָ לֹא דָרָשׁוּ:קנו רַחֲמֶיךָ רַבִּים יְהוָה כְּמִשְׁפָּטֶיךָ חַיֵּנִי:קנז רַבִּים רֹדְפַי וְצָרָי מֵעֵדְוֹתֶיךָ לֹא נָטִיתִי:קנח רָאִיתִי בֹגְדִים וָאֶתְקוֹטָטָה אֲשֶׁר אִמְרָתְךָ לֹא שָׁמָרוּ:קנט רְאֵה כִּי פִקּוּדֶיךָ אָהָבְתִּי יְהוָה כְּחַסְדְּךָ חַיֵּנִי:קס רֹאשׁ דְּבָרְךָ אֱמֶת וּלְעוֹלָם כָּל מִשְׁפַּט צִדְקֶךָ:
נקרא  2  פעמים

לוח מודעות

למעלה