1-10,11-20,21-末で区間を区切って、区間の差を取得する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
Function GetPeriod(sd, ed) ' 日付かどうか If IsDate(sd) = False Or IsDate(ed) = False Then GetPeriod = "9999" Exit Function End If ' 日付の差が妥当か If CDate(sd) > CDate(ed) Then GetPeriod = "9998" Exit Function End If sn = DateToNumber(sd) en = DateToNumber(ed) + 1 If Year(sd) = Year(ed) Then ' 年度の差がない場合 ElseIf Year(sd) + 1 = Year(ed) Then en = en + 36 ' 年度の差が1年の場合+36 Else ' 年度の差が2年以上はエラー GetPeriod = "9997" Exit Function End If GetPeriod = en - sn End Function Function DateToNumber(target) result = Month(target) * 3 - 2 Select Case Day(target) Case 1 To 10 result = result + 0 Case 11 To 20 result = result + 1 Case Else ' 21~ result = result + 2 End Select DateToNumber = result End Function Sub TestGetPeriod() ' 1-10 11-20 21-30 Debug.Print GetPeriod("a", "2023/12/4"), "9999" Debug.Print GetPeriod("2023/12/5", "2023/12/4"), "9998" Debug.Print GetPeriod("2023/12/5", "2023/12/5"), "1" ' 1の区間から2の区間 Debug.Print GetPeriod("2023/12/5", "2023/12/11"), "2" Debug.Print GetPeriod("2023/12/5", "2023/12/19"), "2" Debug.Print GetPeriod("2023/12/5", "2023/12/20"), "2" Debug.Print GetPeriod("2023/12/5", "2023/12/21"), "3" ' 2の区間から3の区間 Debug.Print GetPeriod("2023/1/19", "2023/1/21"), "2" Debug.Print GetPeriod("2023/1/20", "2023/1/22"), "2" ' 3の区間から Debug.Print GetPeriod("2023/1/21", "2023/1/22"), "1" Debug.Print GetPeriod("2023/1/31", "2023/2/1"), "2" ' 年度またぎ Debug.Print GetPeriod("2023/9/25", "2024/1/10"), "11" Debug.Print GetPeriod("2023/10/1", " 2024/3/31"), "18" End Sub |