指定日+旬数の旬、又は月の初日・末日の算出関数 (strGetJyun)

 

‘指定日+旬数の旬、又は月の初日・末日の算出関数で使用
‘旬・月の処理指定
Public Enum enmGetJyun_P1_SyoriKbn
   ENM_Jyun = 1          ‘旬の処理
   ENM_Tuki = 2          ‘月の処理
End Enum
‘初日・末日の指定
Public Enum enmGetJyun_P2_SyoMatu
   ENM_Syonichi = 1      ‘初日を求める
   ENM_Matujitu = 2      ‘末日を求める
End Enum

‘/*************************************************/
‘/* [ 名 称 ] strGetJyun      : 指定日+旬数の旬、又は月の初日・末日の算出関数
‘/* [ 引 数 ] intSyoriKbn: ENM_Jyun=旬の処理、ENM_Tuki=月の処理              
‘/*           intSyoMatu : ENM_Syonichi=初日計算、ENM_Matujitu=末日計算      
‘/*           strStartYYYYMMDD : 計算を開始する視点指定年月日(YYYY/MM/DD形式)
‘/*           intJyunSu  : 加算する旬数(0が当旬)                            
‘/* [ 戻 値 ] 計算した年月日(YYYY/MM/DD形式)                                 
‘/* [ 概 要 ] 開始年月日より、旬数を加算し、該当する旬を求め、更に           
‘/*           その求めた旬、又は月に対する初日/末日を求める。               
‘/* [ 履 歴 ] 2003/11/01 新規 v01.00 会社名 担当者名                      
‘/*************************************************/
Public Function strGetJyun(intSyoriKbn As enmGetJyun_P1_SyoriKbn, _
                           intSyoMatu As enmGetJyun_P2_SyoMatu, _
                           ByVal strStartYYYYMMDD As String, _
                           ByVal intJyunSu As Integer) As String
On Error GoTo Err_strGetJyun:

‘変数宣言———————————————————————
    Dim intStartYYYY    As Integer  ‘年変数
    Dim intStartMM      As Integer  ‘月変数
    Dim intStartDD      As Integer  ‘日変数
    Dim intLoopCnt      As Integer  ‘ループ変数
    Dim intMatuDD       As Integer  ‘末日変数
    Dim intKeisainDD    As Integer  ‘計算した結果の日変数
‘—————————————————————————–

    ‘開始年月日を年、月、日に分ける
    intStartYYYY = Left$(strStartYYYYMMDD, 4)
    intStartMM = Mid$(strStartYYYYMMDD, 6, 2)
    intStartDD = Right$(strStartYYYYMMDD, 2)

    ‘加算する旬数分だけループする
    For intLoopCnt = 0 To intJyunSu – 1

        ‘開始日を見ながら1旬(10日)加算する

        ‘SELECT 開始日が
        Select Case intStartDD
        Case 1 To 20    ‘Case1~20日の間の場合
            intStartDD = intStartDD + 10    ‘日に10日プラス
        Case Else       ‘Case 21日~以降の場合
            intStartDD = intStartDD + 11    ‘日に11日プラス
        End Select

        ‘If 月数が31日を越えた場合
        If intStartDD > 31 Then
            ‘月にプラス1にする
            intStartMM = intStartMM + 1
            ‘日からマイナス31とする
            intStartDD = intStartDD – 31
            ‘If 月が12を越えた場合
            If intStartMM > 12 Then
                ‘年にプラス1します
                intStartYYYY = intStartYYYY + 1
                ‘月を1月に戻す
                intStartMM = 1
            End If
        End If

    Next intLoopCnt

    ‘日に対する末日を求める





    ‘Select 算出した月が
    Select Case intStartMM
    Case 1, 3, 5, 7, 8, 10, 12  ‘Case 31日の月の時
        intMatuDD = 31          ‘末日は31日とする
    Case 4, 6, 9, 11            ‘Case 30日の月の時
        intMatuDD = 30          ‘末日は30日とする
    Case 2                      ‘Case 2月の時は
        ‘29日で末日を求める
        intMatuDD = 29
        ‘If 2月の日を29日にしたらエラーの場合(閏年の場合)
        If IsDate(intStartYYYY & "/" & _
                  Format$(intStartMM, "00") & "/" & _
                  Format$(intMatuDD, "00")) = False Then
            ‘2月の末日を28日にする
            intMatuDD = 28
        End If
    End Select

    ‘If 旬を算出する場合
    If intSyoriKbn = ENM_Jyun Then

        ‘Select 算出した日が
        Select Case intStartDD

        Case 1 To 10    ‘Case 上旬の時
            ‘If 初日で算出する場合
            If intSyoMatu = ENM_Syonichi Then
                ‘この旬の初日の1をする
                intKeisainDD = 1
            Else
                ‘この旬の末日を10をする
                intKeisainDD = 10
            End If

        Case 11 To 20   ‘Case 中旬の時
            ‘If 初日で算出する場合
            If intSyoMatu = ENM_Syonichi Then
                ‘この旬の初日の11をする
                intKeisainDD = 11
            Else
                ‘この旬の末日を20をする
                intKeisainDD = 20
            End If

        Case Else       ‘Case Else 下旬の時
            ‘If 初日で算出する場合
            If intSyoMatu = ENM_Syonichi Then
                ‘この旬の初日の21をする
                intKeisainDD = 21
            Else
                ‘この旬の末日を月の末日にする
                intKeisainDD = intMatuDD
            End If

        End Select

    ‘          ↓月単位の初日/末日を計算する
    Else

        ‘If 初日で算出する場合
        If intSyoMatu = ENM_Syonichi Then
            ‘この旬の初日の1をする
            intKeisainDD = 1
        Else
            ‘この旬の末日の10をする
            intKeisainDD = intMatuDD
        End If

    End If

    ‘戻り値(日付 YYYYY/MM/DD 形式)を編集する
    strGetJyun = intStartYYYY & "/" & _
                 Format$(intStartMM, "00") & "/" & _
                 Format$(intKeisainDD, "00")

    ‘関数を終了する
    Exit Function

Err_strGetJyun:
    ‘ランタイムエラーが発生したのでエラー処理をする
    Call subErrSyori("strGetJyun", Err.Number, Err.Description)
End Function

 

Visual Basic TIPS集

初期登録日: 2003年11月09日

最終更新日: 2003年11月10日

< Home ヘ戻る >


キーボード

ブラウザ画面の文字サイズを変更するショートカットキー

  1. [ CTRL ] + [ + ]  :  文字を大きく
  2. [ CTRL ] + [ ]  :  文字を小さく

Shortcut Keys

  1. [ CTRL ] + [ + ]  :  Up the font size
  2. [ CTRL ] + [ ]  :  Down the font size

OO4O(Oracle Objects for OLE)でVisual Basic 6 からOracleデータベースへアクセス