VBAで時間を操作【 時間に関する代表的な関数をサンプルを使って紹介 】
エクセル業務で時間を操作する処理が必要なことってありますよね
・ある時刻になったらVBAを実行させたい
・一定の時間が経ったらVBAを実行させたい
・時間を計測したい
時間を操作する処理はVBAを使わなければ出来ないことです。時間を操作するVBAによく使われる関数やメソッドを紹介します。
目次
VBA時間関数① Timer関数
午前0時から経過した秒数を取得するもの
戻り値は数値型(Single,Double)の宣言になる
サンプル
1 | Sub tr() |
2 | t = Timer |
3 | m = t / 60 |
4 | h = m /60 |
5 | MsgBox m |
6 | MsgBox h |
7 | End Sub |
変数tには0時から経過した秒数が代入される。
秒数が代入された t を60で割ると分数が求められ、それをさらに60で割ると時間が求められる。
サンプルの実行結果(13時に実行した場合)
1つ目のメッセージボックス
780
⇒0時から780分経過
2つ目のメッセージボックス
13
⇒0時から13時間経過
Timer関数はVBAのプログラム動作時間の計測にも使える関数なので、特性をしっかり覚えておきましょう。
VBA時間関数② TimeSerial関数
引数で指定した(時 , 分 , 秒 )の値を返すもの
基本構造
TimeSerial( 時 , 分 , 秒 )
時 | 0~23の数値を指定 |
分 | 0~59の数値を指定 |
秒 | 0~59の数値を指定 |
戻り値は日付型(Date)の宣言になる
サンプル
使用例 | 結果 |
Cells(1,1) = TimeSerial(0,0,1) | 12:00:01 AM |
Cells(1,1) = TimeSerial(23,59,59) | 11:59:59 PM |
Cells(1,1) = TimeSerial(24,60,60) | 1900/1/1 1:01:00 |
入力されたせるの書式設定を確認してみると、
1つ目と2つ目の使用例は
A1セルのユーザー定義⇒h:mm:ss AM/PM
3つ目の使用例は
A1セルのユーザー定義⇒yyyy/m/d h:mm
になっています。
入力する値によって書式設定が変わるので注意が必要です。
VBA時間関数③ TimeValue
文字列で入力された時間をバリアント(Variant)型、日付(Date)型で返すもの
基本構造
TimeValue(“00:00:00")
または
TimeValue(“00:00:00 PM")
サンプル
使用例 | 結果 |
Cells(1,1) = TimeValue(“4:00:00") | 4:00:00 AM |
Cells(1,1) = TimeValue(“16:00:00") | 4:00:00 PM |
Cells(1,1) = TimeValue(“4:00:00 PM") | 4:00:00 PM |
Cells(1,1) = TimeValue(“6/1 16:00:00") | 4:00:00 PM |
Cells(1,1) = TimeValue(“6/1 16:00:00 AM") | 4:00:00 PM |
最後の16:00:00 AM は間違った時間を設定するとどうなるか試してみたのですが、AMが無視された結果となりました。
入力されたせるの書式設定を確認してみると、
A1セルのユーザー定義⇒h:mm:ss AM/PM
になっています。
VBA時間関数④ DateAdd関数
設定した基準時間に設定した時間を加算してする関数のこと
基本構造
DateAdd( interval , number , date )
interval | 時間を加算する単位(設定値) |
number | 加算する時間の数や数式 |
date | 時間を加算する基準となる時間 |
interval(設定値)の種類
yyyy | 年 |
q | 四半期 |
m | 月 |
y | 年間通算日 |
d | 日 |
w | 週日 |
ww | 週 |
h | 時 |
n | 分 |
s | 秒 |
サンプル
現在2020年6月1日13時00分 | 結果 |
DateAdd( “yyyy" , 2 , Now) | 2022/06/1 13:00:00 |
DateAdd( “yyyy" , 2 , Date) | 2022/6/1 |
DateAdd( “yyyy" , 2 , Time) | 1901/12/30 13:00:00 |
DateAdd( “h" , 2 , Now) | 2020/6/1 15:00:00 |
DateAdd( “h" , 2 , Date) | 2020/6/1 2:00:00 |
DateAdd( “h" , 2 , Time) | 15:00:00 |
DateAdd( “d" , 2 , Now) | 2020/6/3 13:00:00 |
DateAdd( “d" , 2 , Date) | 2020/6/3 |
DateAdd( “d" , 2 , Time) | 1900/01/01 13:00:00 |
いろんな比較してみました。
interval(設定値)に対応するdate(基準となる時間)を記載しなければ変な結果が出てしまうことがわかります。
取得したい時間が、日付なのか、時間なのかしっかりと決めておく必要があります。
VBA時間関数⑤ DateDiff関数
設定した時間と時間の間隔を計算する関数のこと
基本構造
DateDiff( interval , date1 , date2 , [firstdayofweek] , [firstweekofyear] )
interval(設定値)は上記DateAddで紹介しているものと全く同じ値なので省略します。
firstdayofweekの種類(省略可能)
vbSunday | 1 | 日曜日 |
vbMonday | 2 | 月曜日 |
vbTuesday | 3 | 火曜日 |
vbWednesday | 4 | 水曜日 |
vbThursday | 5 | 木曜日 |
vbFriday | 6 | 金曜日 |
vbSaturday | 7 | 土曜日 |
firstweekofyearの種類(省略可能)
vbFirstJan1 | 1 | 1 月 1 日が含まれる週から開始 |
vbFirstFourDays | 2 | 新年の少なくとも 4 日が含まれる最初の週から開始 |
vbFirstFullWeek | 3 | 年の最初の完全な週から開始 |
サンプル
現在2020年6月1日13時00分 | 結果 |
DateDiff( “d" , “2020/6/1" , “2020/6/3") | 2 |
DateDiff( “yyyy" , “2020/6/1" , “2020/6/3") | 0 |
DateDiff( “h" , “2020/6/1" , “2020/6/3") | 48 |
DateDiff( “m" , “2020/6/1" , “2020/9/3") | 3 |
DateDiff( “n" , “2020/6/1 13:00:00" , “2020/6/2 20:00:00") | 1860 |
DateDiff( “n" , “2020/6/2 20:00:00" , “2020/6/1 13:00:00") | -1860 |
基本構造のdate2 – date1を計算し、interval(設定値)の単位で表示してくれる。
VBA時間メソッド① OnTimeメソッド
時間を設定してVBAを実行することができる
基本構造
Application.OnTime EarliestTime , Procedure , LatestTime , Schedule
Applicationのメソッドなので上記のようになります
EarliestTime | プロシージャの実行する時刻 |
Procedure | 実行するプロシージャ名 |
LatestTime | プロシージャを実行できる最終時刻 |
Schedule | 新しいOnTimeプロシージャを設定・・True 直前のプロシージャの設定を解除・・False |
サンプル
Application.OnTime Now + TimeValue(“12:00:00"),"プロシージャ名1 | 12時にプロシージャ名1を実行 |
Application.OnTime Now + TimeSerial( 1 , 2 , 3 ),"プロシージャ名2 | 今から1時間2分3秒後にプロシージャ名2を実行 |
OnTimeメソッドはエクセル業務でよく使われるメソッドなので使い方を覚えておきましょう。
実務でよく使われる時間を操作するVBA
設定した時間が経過するとエクセルが閉じる
プログラムの内容
1.エクセルを開くと同時に制限時間をカウントするVBAを実行
2.時間が経過すると自動で上書保存される
3.VBAが設定されているえくせるのみ閉じる
メリット
エクセルの閉じ忘れ対策になる
エクセルを閉じ忘れて、他の人がそのエクセルを開こうとすると「読み取り専用」になって編集できない!ということがありますよね。この問題を解決するのにうってつけのVBAです。
デメリット
VBAの内容を使う人全員に周知する必要がある
VBAの内容を知らされていないで自動的にエクセルが閉じるとビックリしますよね。大人数の職場だと周知することが難しい。

豆父ちゃん
設定した時刻でプログラムを実行するVBA
プログラムの内容
1.VBAを記載したエクセルを開いておく
2.設定した時刻になるとVBAが自動動作
3.処理のの最後に上書き保存のされる
メリット
毎日行う作業に導入すると作業効率アップ
大勢の人が扱うエクセルで自分のが編集する時間が決まっていることってありますよね。そんなときにうってつけのVBAです。

豆父ちゃん
デメリット
設定した時刻にVBAを設定したエクセルを開いている必要がある。
VBAでは「エクセルを一つも開いていない状態からエクセルを開いてVBAを実行する」という処理はできません。「既に開いているエクセルのVBAで他のエクセルを開く」という処理はできるます。
カウントダウンタイマーが表示されるVBA
プログラムの内容
1.エクセルを起動すると設定した時間のタイマーが動作
2.カウントダウンが0になると上書保存される
3.大勢の人が扱うエクセルならば自動で閉じる処理を追加
使い方
エクセルを起動するとカウントダウンタイマーが表示され、編集時間の制限を設けている。
大勢の人が扱うエクセルをずっと開いておくと、次に編集したい人に迷惑をかけてしまいますよね。
カウントダウンタイマーを表示することで編集時間を明確にすることができ、メリハリのある作業ができるようになりました。

豆父ちゃん
VBA初心者が効率化マクロを導入する方法
VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!
このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。
マクロの開発を外注に依頼する
マクロの開発を外注に依頼する導入方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。
たとえば、
A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、
『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。
実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

ガッツポーズの人
『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、
VBA初心者でもマクロを導入できる、費用が安い、
というメリットがあります。
しかし
VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい処理を実現するコードを書くだけ
です。
【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません