【Functionメモ】日付関係をまとめる

2020年1月27日月曜日

Excel Functionメモ 日付

t f B! P L

日付に関連するFuncitonをまとめておきます。
そのままマクロ部分に貼り付けて、エクセルの自作関数として使うもよし、何か自分で新しく作る際の参考にしてもらってもOK!!


現時点のFunction
・指定日付の年だけを置き換える
・自作和暦変換
・月の第n、x曜日の日取得


指定日付の年を置き換える

【Function名称】

指定日付の年置き換え

【Function使い方】

=edtYear([変換したい年月日],[指定したい年])

【概要】

入力された年月日の年を強制的に指定した年に置き換えます。
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のアップデートがまだ出来てない場合に取得できないので、自前(手動)で和暦取得ができるようにファンクションを作りました。

すべての変換で使用できるように、明治、大正、昭和、平成、令和と日付を判定し和暦部分を返却するロジックになっています。



'-----------------------------------------
'関数名 :和暦取得
'機能  :入力された西暦日付から和暦日付を返却する
'入力項目:西暦日付
'-----------------------------------------
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

この関数があると、ハッピーマンデーの休みを探しやすくなります!!
また、定休日等の日付を取得するのも楽ちんになりますね!!





何か気になったらGoogle検索で!

このサイトについて


【テンワンナップ】
普段の生活、仕事などでちょっと効率的に、ちょっと便利に、作業等を効率的にできる様な事をまとめていきます。 1Upまではいきませんが、0.1Upで生産性向上といったところですかね。Excel作業も0.1UPして生産性向上を図る為の小技も紹介していきます。

注目の投稿

【Gmailとスプレッドシート】AIのGeminiを使って、条件に合ったメールを一瞬で抽出するスクリプトを作成してもらった過程を紹介(自分では1行もプログラミングせずにGeminiに作ってもらうための具体的なプロンプトの入力内容を紹介。)

はじめに:Gmailとスプレッドシートの連携を簡単に実現したい 日々、メールがどんどん溜まっていき、重要な情報を取り出すのが面倒になったことはありませんか?特に、Gmail内で過去のメールから特定の情報を抽出したり、スプレッドシートに整理したりする作業は時間がかかりますよね。 今...

人気の投稿

このブログを検索

カウンター

連絡フォーム

名前

メール *

メッセージ *

rakuten

QooQ