AccessExcel

【VBA】Day関数の構文と使用例

更新日:2023/12/01

VBAのDay関数は指定した日付の日を、1から31までの整数で返します。
ここでは、Day関数の構文と汎用的な使い方2つとExcelセルおよびAccessのフィールドから日を取得する方法の計4つの使用例を紹介します。

 

Day関数の構文

Day関数の構文は、次のようになっています。

Day( date )
  1. date:
    Date関数等で取得した日付型(Variant/Date)または、日付を表す文字列または数式を指定。
1から31までの整数

 

Day関数の使用例

Day関数の使用例を4つ紹介します。

Date型から取得

Date型の変数から日付を取得するコード例です。

Sub daySample2()
    Dim date1 As Date, date2 As Date
    ' 現在の日付
    date1 = Date
    ' 日付を指定
    date2 = #10/10/2023#
    
    Debug.Print date1 & " の日付は " & Day(date1)
    Debug.Print date2 & " の日付は " & Day(date2)
    
End Sub

実行すると、イミディエイトウィンドウに次のような結果が表示されます。

2023/10/12 の日付は 12
2023/10/10 の日付は 10

日を2桁で取得

取得した日付の日が1桁のとき、先頭に0を付けて2桁で表示します。

Sub daySample3()
    Dim date1 As Date, date2 As Date
    
    date1 = #10/21/2023#
    date2 = #12/3/2023#
    
    Debug.Print date1 & " の日付は " & Right("0" & Day(date1), 2)
    Debug.Print date2 & " の日付は " & Right("0" & Day(date2), 2)
    
End Sub

次のコードで日付の日を2桁に整形しています。

Right("0" & Day(date1), 2)

これは、日の先頭に "0" を連結して、右(後ろ)から2文字を切り出しています。
これにより、取得した日が1桁か2桁かを気にすることなく、2桁に統一できます。

上記コードの結果は、次のようになります。

2023/10/21 の日付は 21
2023/12/03 の日付は 03

Excelセルから取得

次のコードは、日付が入力されたセルからDay関数で日付の日を取得しています。

Sub daySample1()
    Dim cell1 As Range, cell2 As Range
    
    With Sheets("sheet1")
        Set cell1 = Sheets("sheet1").Cells(2, 2)
        Set cell2 = Sheets("sheet1").Cells(3, 2)
    End With
    
    cell1.Offset(0, 2).Value = Day(cell1.Value) & "日"
    cell2.Offset(0, 2).Value = Day(cell2.Value) & "日"
End Sub

次のようなシートに対して上記のコードを実行します。

実行前

結果は次のようになります。

実行結果

Accessで日付フィールドから日を取得

次のような日付型のフィールドを持つテーブルをAccess上で作成しました。

日付データ 2023/12/01 2021/11/05 1999/10/10 1975/08/08

このテーブルからフィールドデータを取得して、日を抜き出します。

Sub daySample4()
    Dim db As Database
    Dim rs As Recordset
    
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("サンプルテーブル", dbOpenTable)
    
    With rs
        Do Until .EOF
            Debug.Print .Fields("日付フィールド") & _
                    "⇒" & _
                    Day(.Fields("日付フィールド")) & _
                    "日"
            .MoveNext
        Loop
    End With
    
    rs.Close: Set rs = Nothing
    Set db = Nothing
End Sub

実行すると、イミディエイトウィンドウに次のように表示されます。

2023/12/0112021/11/0551999/10/10101975/08/088

更新日:2023/12/01

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。