【マクロVBA】Day関数で対象・現在日付の日を取得・抽出する方法と抽出できない原因とエラーの対処法

日時操作

マクロVBAの機能にはDay関数という、日時の日のデータを取得する関数があります。
例えば「2022/8/5」であれば「8」を出力するといった内容です。

今回はそのDay関数についての使用方法と実際の活用事例について紹介します。
さらには現在の日を出力する方法も説明したいと思います

Day関数を使用する上で抽出・取得できないなど、不具合の原因・エラーの対応についてもまとめてますので
是非参考にしてみてください。

それでは見ていきましょう。




⬛︎こんなことができるようになる!

・対象セル・変数内の日付データから日を取得することができる
・現在の日を取得することができる

 

⬛︎関数の仕組み

変数・出力先=Day(対象となるデータ)

⬛︎Day関数の使用方法

ではここから実際にDay関数の使用方法について紹介します。

・対象セルまたは変数の日付データから日を取得する

まずは対象セル・変数から日を取得する方法を見ていきましょう。
見本で下図のようなシートを用意しました。

B3に日時データの「2022/8/1」という日付データが入っています。
こちらをD3に出力
してみましょう。

関数の仕組みは以下の通りです。
変数・出力先=Day(対象となるデータ)

ではこちらの構文に当てはめていきたいと思います。
変数・出力先はD3に出力するので「Cells(3, 4) 」となります。
対象データはB3の日時データを参照するので「B3」ですね。

実際に作成したプログラムはこちらです。

Sub 日の出力()

Cells(3, 4) = Day(Cells(3, 2))

End Sub

では実行してみましょう。
結果はこのようになります。

B3の「2022/8/1」から日を取得すると「1」となり
その結果を「D3」に出力
することができました。

先ほど説明した方法は直接、別のセルに出力する方法でしたが
変数へ格納することも可能です。

ではB3の日時から日を抜き出し、メッセージボックスで表示させてみましょう。
今回のB3の日付を「2023/3/14」にしてみましょう。

変数は何でも良いのですが変数「N」に格納したいと思います。

プログラムはこのようになります。

Sub 日の出力()

Dim N As Long

N = Day(Cells(3, 2))

MsgBox “対象の日は” & N & “日です”

End Sub

実行した結果はこちらです。

取得した日をメッセージボックスで表示することができました。

・現在の日を取得する

先ほどまではセルに入力してあった日付データから日を取得しましたが、
現在の日からも取得することができます

使用するのは「Now」です。
文字通り今という意味を持ちます。

使用方法は簡単で「Day(対象となるデータ)」の対象となるデータを「Now」に変えるだけです。
では見本で現在の日を変数Nに格納してメッセージボックスで出力してみましょう。

プログラムはこのようになります。

Sub 現在の日の出力()

Dim N As Long

N = Day(Now)

MsgBox “現在の日は” & N & “日です”

End Sub

実行した結果はこのようになります。

実行した際の日は26日なので「26」をメッセージで表示させることができました。
もちろん、セルへの出力も可能です。

今回はB3に現在の日を出力してみましょう。
プログラムはこのようになります。

Sub 現在の日をセルに出力()

Cells(3, 2) = Day(Now)

End Sub

実行した結果はこのようになります。

B3に「26」が出力されました。
使用方法はシンプルなのでぜひ活用してみてください。

⬛︎日のデータを取得できないときの対処法とよくあるエラーについて

・日データを取得できない

こちらは変数名にDayを使用していないか確認してみてください。
私自身も変数名は誰でもわかるように英語に直訳した単語を変数として使用してました。
なのでDay関数を知る前までは日データを「Day」という変数に格納していました。

しかしこれでは関数と変数が重複してしまい、機能しなくなります。

実際にプログラムを用意しました。

Sub エラーの出る現在の日の出力()

Dim Day

Day = Day(Now)

MsgBox “現在の日は” & N & “日です”

End Sub

現在の日を「Day」という変数に格納するプログラムですが
実行するとエラーになります。

つまり変数名を「Daydata」など「Day」にならないようにしてみてください。

・適切な結果が出力されない

こちらは変数に日を格納する際に
変数の形式がDateになっている可能性があります。

日時データで「Date」の変数の形式を指定するのは正解ですが
Day関数での出力結果は数値なので「Date」では日時データに変換されてしまいます。

なので「Long」などの整数形式が好ましいです。

⬛︎公式の説明


わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

Day 関数 (Visual Basic for Applications) | Microsoft Docs

⬛︎まとめ

いかがだったでしょうか。
日時データと合わせて管理している場合などに
Day関数で日を出力したり、絞り込みをおこなったり用途は様々です。

是非活用して日を取得してみてください

 

日時データから年月日または時分秒を取得する方法を下記リンクでまとめています。

【マクロVBA】日時データ系総まとめ!年月日時分秒を対象セルや変数、現在値から取得・抽出・出力する ► 独学エクセル塾 (dokugakuexcel.com)

それでは次回の記事でお会いしましょう。

コメント