Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с датами (http://forum.oszone.net/showthread.php?t=197842)

Наташок 27-01-2011 22:20 1598736

Работа с датами
 
Работа с датами в VBA
Определить кто из родителей старше. Вывести разницу согласно году,месяцу,дню.Например,папа-18.03.1970,мама-21,02,1971. Результат: папа старше на 1 год, у мамы на 1 месяц раньше день рождения, по дню у папы день рождения раньше.

KnRSU 31-01-2011 16:08 1601271

Кто старше (пример):
Код:

Const Father = "18.03.1970"
Const Mother = "21.02.1971"

Private Function fnWhoOlder(Father as String, Mother as String) as Byte
  If CDate(Father) = CDate(Mother) Then
      fnWhoOlder = 0
  ElseIf CDate(Father) > CDate(Mother) Then
      fnWhoOlder = -1
  Else
      fnWhoOlder = 1
  End If
End Function

Select Case fnWhoOlder(Father, Mother)
  Case -1
      Debug.Print "Папа старше мамы"
  Case 0
      Debug.Print "Папа и мама - родились в один день"
  Case 1
      Debug.Print "Папа младше мамы"
End Select

надеюсь что понятно в какую сторону копать дальше, сейчас времени нет, завтра выложу полный рабочий листинг по всей задаче, а не в виде намёка на поиск пути решения

KnRSU 01-02-2011 08:41 1601819

Нужная функция, для правильного представления числа в текстовом виде
Код:

Public Function fnNum2Word(ByVal inp As Long, ByVal fir As String, ByVal sec As String, ByVal many As String) As String
Dim tmp As String
    tmp = Format$(inp, "000")
    If Len(tmp) > 2 Then tmp = Mid(tmp, Len(tmp) - 1, 2)
    Select Case Val(Mid(tmp, 1, 1) & "")
        Case 1
            Select Case Val(Mid(tmp, 2, 1) & "")
                Case 0 - 9
                    fnNum2Word = many
            End Select
        Case 0, 2 To 9
            Select Case Val(Mid(tmp, 2, 1) & "")
                Case 1
                    fnNum2Word = fir
                Case 2 To 4
                    fnNum2Word = sec
                Case 0, 5 To 9
                    fnNum2Word = many
            End Select
    End Select
End Function

собственно функция выдающая в окно Immediate результат, который требуется по условиям поставленной задачи

Как вызвать окно Immediate
читать дальше »
Появляется/Активируется по нажатии сочетания клавиш Ctrl+G

Код:

Sub CalculateBirthdayDiffs(ByVal fDate As String, ByVal mDate As String)
Dim yearDiff As Long
Dim monthDiff As Long
Dim dayDiff As Long
    If IsDate(fDate) And IsDate(fDate) Then
        If CDate(fDate) = CDate(mDate) Then
            Debug.Print "Папа и мама - родились в один день"
        ElseIf CDate(fDate) < CDate(mDate) Then
            yearDiff = DateDiff("yyyy", fDate, mDate)
            Debug.Print "Папа старше мамы на " & yearDiff & " " & fnNum2Word(yearDiff, "год", "года", "лет")
        Else
            yearDiff = DateDiff("yyyy", fDate, mDate)
            Debug.Print "Папа младше мамы на " & yearDiff & " " & fnNum2Word(yearDiff, "год", "года", "лет")
        End If
        If Month(fDate) > Month(mDate) Then
            monthDiff = Month(fDate) - Month(mDate)
            Debug.Print "у мамы на " & monthDiff & " " & fnNum2Word(monthDiff, "месяц", "месяца", "месяцев") & " раньше день рождения"
        ElseIf Month(fDate) < Month(mDate) Then
            monthDiff = Month(mDate) - Month(fDate)
            Debug.Print "у папы на " & monthDiff & " " & fnNum2Word(monthDiff, "месяц", "месяца", "месяцев") & " раньше день рождения"
        End If
        If Day(fDate) > Day(mDate) Then
            dayDiff = Day(fDate) - Day(mDate)
            Debug.Print "по дню у мамы день рождения раньше на " & dayDiff & " " & fnNum2Word(dayDiff, "день", "дня", "дней")
        ElseIf Day(fDate) < Day(mDate) Then
            dayDiff = Day(mDate) - Day(fDate)
            Debug.Print "по дню у папы день рождения раньше на " & dayDiff & " " & fnNum2Word(dayDiff, "день", "дня", "дней")
        End If
    End If
End Sub



Время: 02:27.

Время: 02:27.
© OSzone.net 2001-