そのままマクロ部分に貼り付けて、エクセルの自作関数として使うもよし、何か自分で新しく作る際の参考にしてもらってもOK!!
現時点のFunction
・指定日付の年だけを置き換える
・自作和暦変換
・月の第n、x曜日の日取得
指定日付の年を置き換える
【Function名称】
指定日付の年置き換え
【Function使い方】
=edtYear([変換したい年月日],[指定したい年])
【概要】
入力された年月日の年を強制的に指定した年に置き換えます。
1月のこの時期に昨年分のデータを打つときにいちいち年を入れ替えるのが大変なので、これをつかって入力の効率化を図ったりします💻
例えば、Worksheet_SelectionChange でTargetが強制的に切り替えたいセルの場合に、このFunctionを使って、年だけ置き換えるようにしておきます。
1月のこの時期に昨年分のデータを打つときにいちいち年を入れ替えるのが大変なので、これをつかって入力の効率化を図ったりします💻
-----------------------------------------
-年だけ切り替え
-機能 :指定された日付(datI) に指定した年(intY)に置き換えます。
- 何を入れても固定年にしたい時に使います。
'-----------------------------------------
Function edtYear(datI As Date, intY As Integer) As Date
intM = Month(datI)
intD = Day(datI)
edtYear = DateSerial(intY, intM, intD)
End Function
例えば、Worksheet_SelectionChange でTargetが強制的に切り替えたいセルの場合に、このFunctionを使って、年だけ置き換えるようにしておきます。
自作和暦取得
【Function名称】
和暦取得
【Function使い方】
=和暦取得([和暦に変えたい年月日])
【概要】
新元号「令和」がExcelのアップデートがまだ出来てない場合に取得できないので、自前(手動)で和暦取得ができるようにファンクションを作りました。
すべての変換で使用できるように、明治、大正、昭和、平成、令和と日付を判定し和暦部分を返却するロジックになっています。
これで、VBAの中でも使えるし、Excelシート上でも使えます。
使い方は・・・
A1に日付が入力されているとして・・・
A1セル以外のセルに「=和暦取得(A1)」と入力する。
すると、その日付に応じた和暦が取得できます。
注意点としては、エクセルの拡張子が”.xlsm”にする必要があることと
場合によっては、「マクロを有効にする」ボタンを押す必要があることですかね。
'-----------------------------------------
'関数名 :和暦取得
'機能 :入力された西暦日付から和暦日付を返却する
'入力項目:西暦日付
'-----------------------------------------
Function 和暦取得(西暦日付 As Date) As String
Select Case True
Case 西暦日付 >= DateValue("2019/05/01")
和暦取得 = "令和" & Year(西暦日付) - 2018
Case 西暦日付 >= DateValue("1989/01/08")
和暦取得 = "平成" & Year(西暦日付) - 1988
Case 西暦日付 >= DateValue("1926/12/25")
和暦取得 = "昭和" & Year(西暦日付) - 1925
Case 西暦日付 >= DateValue("1912/07/30")
和暦取得 = "大正" & Year(西暦日付) - 1911
Case Else
和暦取得 = "明治" & Year(西暦日付) - 1867
End Select
和暦取得 = 和暦取得 & "年" & Month(西暦日付) & "月" & Day(西暦日付) & "日"
End Function
これで、VBAの中でも使えるし、Excelシート上でも使えます。
使い方は・・・
A1に日付が入力されているとして・・・
A1セル以外のセルに「=和暦取得(A1)」と入力する。
すると、その日付に応じた和暦が取得できます。
注意点としては、エクセルの拡張子が”.xlsm”にする必要があることと
場合によっては、「マクロを有効にする」ボタンを押す必要があることですかね。
月の第n、x曜日の日取得
【Function名称】
月の第n、x曜日の日取得
【Function使い方】
=第nx曜日の日取得([対象日],[何週目かの指定],[曜日指定])
【概要】
月の第n、x曜日の日取得のfunctionです。'-----------------------------------------
'関数名 :月の第n、x曜日の日取得
'機能 :指定された曜日と月の何番目かを指定して日付を取得する。
'入力項目:dt…基準となる日付。その月の日付を対象とする。
' :n…第n週を指定する
' :x…曜日を指定する
' :1(vbSunday)日曜日
' :2(vbMonday)月曜日
' :3(vbTuesday)火曜日
' :4(vbWednesday)水曜日
' :5(vbThursday)木曜日
' :6(vbFriday)金曜日
' :7(vbSaturday)土曜日
'-----------------------------------------
Function 第nx曜日の日取得(dt As Date, n As Integer, x As Integer) As String
Dim wk1d As Date '---対象年月の1日計算用WK
'---入力チェック
If x < 1 Or x > 7 Then
MsgBox ("[x]の指定に誤りがあります。x=[" & x & "]")
End
End If
'---対象年月の1日を取得
wk1d = DateSerial(Year(dt), Month(dt), 1)
'---その後のパラメータで指定された曜日になるまで日を後ろにシフト
Do Until Weekday(wk1d, vbSunday) = x
'---日を後にシフト
wk1d = DateAdd("d", 1, wk1d)
Loop
'---パラメータで指定された週分後ろにシフト
第nx曜日の日取得 = DateAdd("d", 7 * (n - 1), wk1d)
End Function
この関数があると、ハッピーマンデーの休みを探しやすくなります!!
また、定休日等の日付を取得するのも楽ちんになりますね!!
0 件のコメント:
コメントを投稿