【マクロVBA】Hour関数で対象・現在時刻の時を取得・抽出する方法と、抽出できない原因と対処法

日時操作

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

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

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

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




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

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

 

⬛︎関数の仕組み

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

⬛︎Hour関数の使用方法

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

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

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

B3に日時データの「12:45:32」という時刻データが入っています。
こちらの時刻の時をD3に出力してみましょう。

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

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

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

Sub 時刻の時を出力()

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

End Sub

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

B3の「12:45:32」から時を取得すると「12」となり
その結果を「D3」に出力することができました

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

ではB3の日時から時を抜き出し、メッセージボックスで表示させてみましょう。
今回のB3の時刻を「21:19:45」にしてみましょう。

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

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

Sub 時刻の時の出力()

Dim N As Long

N = Hour(Cells(3, 2))

MsgBox “対象の時刻は” & N & “時です”

End Sub

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

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

・現在の時を取得する

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

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

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

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

Sub 現在の時刻の時の出力()

Dim N As Long

N = Hour(Now)

MsgBox “現在の時刻は” & N & “時です”

End Sub

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

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

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

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

Cells(3, 2) = Hour(Now)

End Sub

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

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

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

・時刻の時のデータを取得できない

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

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

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

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

Dim Hour

Hour = Hour(Now)

MsgBox “現在の時刻の時は” & N & “時です”

End Sub

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

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

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

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

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

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

⬛︎公式の説明


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

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

⬛︎まとめ

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

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

 

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

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

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

コメント