エクセルでタイマーを設定する方法【VBAでカウントダウンタイマーの作り方を徹底解説】

Left Caption

疑問がある人

エクセルでタイマーを設定する方法を知りたい

こんな要望にお答えします。

タイマー機能を使ったサンプル事例を使って、タイマーVBAの作り方や導入方法を詳しく解説していきます。

今回紹介するサンプル事例は以下の2つです。

 

  • エクセルを開くとタイマーが作動し、タイムアップするとエクセルが自動で閉じる
  • ボタンをクリックするとタイマーが作動し、タイムアップでメッセージが表示される

タイマーを設定するには、ユーザーフォームといくつかの関数を利用する必要があります。上記のサンプル事例2つを理解するとタイマー機能を使っていろんな処理ができるようになっているはずです。

エクセル業務にタイマー機能の導入を検討している方は是非参考にしてみてください。

 

タイマー(カウントダウンタイマー)の作り方

カウントダウンタイマーはユーザーフォームといくつかの関数で作ることができます。

作り方を解説していきます。

ユーザーフォームの設定

1.VBA起動

2.ユーザーフォーム作成

3.オブジェクトの作成

4.VBAの設定

 

ユーザーフォームの作成は上記の4つの手順になります。ユーザーフォームの中で「コマンドボタン」を使うのか「テキストボックス」を使うのかはさらに細かい設定が必要になります。下記のサンプル事例ではタイマーに必要なユーザーフォームの設定を詳しく解説していますので参考にしてみてください。

 

カウントダウンタイマーに必要な関数

カウントダウンタイマーを設定するには、「時間に関するVBA」と「数値を表示させる関数」が使われています。

 

  • TimeSerial関数
  • DateAdd関数
  • DateDiff関数
  • Format関数

時間に関する3つの関数と数値を表示させる関数を組み合わせることでカウントダウンタイマーを設定することができます。

 

TimeSerial関数

引数で指定した(時 , 分 , 秒 )値を返すもの

基本構造

 

TimeSerial( 時 , 分 , 秒 )

 

0~23の数値を指定
0~59の数値を指定
0~59の数値を指定

戻り値は日付型(Date)の宣言になります。

 

Left Caption

ひらめく人

今回のVBAではカウントダウンタイマーの時間表示にTimeSerial関数を利用しています。

 

TimeSerial関数のサンプル

使用例 結果
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

TimeSerial関数を使ってセルに時刻を入力してみると、入力値によって書式設定が変わることがわかりました。

 

上記サンプルの1つ目と2つ目の書式設定は「h:mm:ss AM/PM

上記サンプルの3つ目の書式設定は「yyyy/m/d h:mm

 

Left Caption

ひらめく人

TimeSerial関数を使って数値を入力するときは書式設定の状態に注意してください。

 

Dateadd関数

Dateadd関数は日付を計算するときに使用される関数です。例えば、「今から1時間後の日付をA1セルに表示させる」「今からA1セルに記入された時間を加えた日付を表示させる」という使い方ができます。

基本構造

 

Dateadd( 単位 , 数量 , 基準時間 )

 

DateDiff関数

DateDiff関数は日付を計算するときに使用される関数です。例えば、「今から1時間前の日付をA1セルに表示させる」「今からA1セルに記入された時間を引いた日付を表示させる」という使い方ができます。

基本構造

 

DateDiff( 単位 , 数量 , 基準時間 )

Left Caption

ひらめく人

Dateadd関数とDateDiff関数の使い方はほとんど一緒です。時間を加えるか、引くかの違いだけです。

Format関数

Format関数は指定した値を指定する書式で表示させる関数です。カウントダウンタイマーVBAでは時間関数を取得した値を「00:00:00:」という表示に変換するためにFoemat関数が利用させています。

基本構造

 

Format( 指定した値 , “指定した書式" )

指定した書式一覧

指定した書式 意味 結果
yyyy 年数(西暦) 2020
m 6
d 日付 1
h 時間 0~23
n 0~59
s 0~59
hh 時間 00~23(2桁表示)
nn 00~59(2桁表示)
ss 00~59(2桁表示)
Left Caption

ひらめく人

Format関数は指定した値の表示を変換してくれるとても便利な関数なので自由に扱えるようにしておきましょう。

 

サンプル事例① エクセルを開くとタイマーが作動し、タイムアップするとエクセルが閉じる

VBAが設定されたエクセルファイルを開くとカウントダウンタイマーが起動、あらかじめ設定している時間がタイムアップすると「上書き保存」→「エクセルを閉じる」という処理を行うVBAです。

複数の人が扱うエクセルに設定することで、「読み取り専用」で編集できなくなる!という問題を解消することができます。

 VBAの導入方法

1.様式を作成する

 

  • A4セル・・・「時」
  • C4セル・・・「分」
  • E4セル・・・「秒」

 

入力する数字を変更すると、エクセルを閉じるまでの制限時間が変更されます。

 

2.VBAを起動

 

3.標準無ジュールを作成

 

4.標準無ジュールにVBAを記入

5.サンプルVBA

サンプルVBA①

1 Sub Timer()
2 Dim L As Date, cnt As Double
3 L = DateAdd(“h", Range(“A4"), Time)
4 L = DateAdd(“n", Range(“C4"), L)
5 L = DateAdd(“s", Range(“E4"), L)
6 rng = 0
7 UserForm1.Show vbModeless
8 Do
9 cnt = DateDiff(“s", Time, L) + rng
10 UserForm1.TextBox1 = Format(TimeSerial(0, 0, cnt), “hh:nn:ss")
11 If UserForm1.TextBox1 = “00:00:00" Then Exit Do
12 DoEvents
13 Loop
14 Call CloseMe
15 End Sub

サンプルVBA②

1 Sub CloseMe()
2 ActiveWorkbook.Save
3 ThisWorkbook.Saved = True
4 If Workbooks.Count <= 1 Then
5 Application.Quit
6 Else
7 ThisWorkbook.Close False
8 End If
9 End Sub

 

 

6.sheet1にVBAを記入

7.サンプルVBA

サンプルVBA③

1 Private Sub WorkSheet_Activate()
2 UserForm1.Show vbModeless
3 End Sub

 

8.ユーザーフォームの作成

 

9.ユーザーフォームにVBAを記入

 

10.サンプルVBA

サンプルVBA④

1 Private Sub CommandButton1_Click()
2 Dim rng_t As Date
3 rng_t = Time
4 MsgBox (“タイマーがストップされました" & vbCrLf & “再開するには「OK」を押してください")
5 rng = rng + DateDiff(“s", rng_t, Time)
6 End Sub

 

 

11.ユーザーフォームの表示設定

 

 

12.ワークブックにVBAを記入

 

7.サンプルVBA

サンプルVAB⑤

1 Private Sub Workbook_Open()
2 Call Timer
3 End Sub

 

12.VBAの実行

以上でVBAの導入が完了します。

ユーザーフォームの設定など難しい手順もありますが、上記で紹介している順番に操作すれば設定できるはずです。是非挑戦してみてください。

下記のサイトでは、エクセルを自動で閉じるVBAが設定されたエクセルファイルをダウンロードしてお使いいただけます。すぐに「制限時間でブックが閉じるエクセルファイル」を使いたい!という方は是非参考にしてみてください。

 

<<制限時間でブックを閉じるVBAが設定されたエクセルファイルのダウンロードはこちら

 

 

サンプル事例② ボタンをクリックするとタイマーが作動し、メッセージが表示される

VBAが設定されたボタンを押すとカウントダウンタイマーが起動するので時間を設定、タイムアップすると「時間切れ」というメッセージが表示されるというVBAです。

時間を気にしながら作業をしたい!と言う方におすすめです。

 

VBAの導入方法

1.VBA起動

 

2.ユーザーフォームの作成

 

3.ユーザーフォーム(オブジェクトの設定)

4.ユーザーフォームのオブジェクトに設定するVBA

 

5.サンプルVBA

コマンドボタン1に設定するVBA

1 Private Sub CommandButton1_Click()
2 Dim L As Date, cnt As Double
3 L = DateAdd(“h", UserForm2.TextBox1, Time)
4 L = DateAdd(“n", UserForm2.TextBox2, L)
5 L = DateAdd(“s", UserForm2.TextBox3, L)
6 rng = 0
7 UserForm2.Show vbModeless
8 Do
9 cnt = DateDiff(“s", Time, L) + rng
10 UserForm2.TextBox4 = Format(TimeSerial(0, 0, cnt), “hh:nn:ss")
11 If UserForm2.TextBox4 = “00:00:00" Then Exit Do
12 DoEvents
13 Loop
14 MsgBox “時間切れ"
15 End Sub

 

コマンドボタン2に設定するVBA

1 Private Sub CommandButton2_Click()
2 Dim rng_t As Date
3 rng_t = Time
4 MsgBox (“タイマーがストップされました" & vbCrLf & “再開するには「OK」を押してください")
5 rng = rng + DateDiff(“s", rng_t, Time)
6 End Sub

 

6.標準モジュールに設定するVBA

 

7.サンプルVBA

1 Sub click()
2 UserForm2.Show vbModeless
3 End Sub

 

8.ボタンの作成

 

9.ボタンにマクロを登録

 

10.VBAの実行

ボタンを押すと「ユーザーフォーム」が表示されるVBAを導入しています。このVBAは、「ユーザーフォームは便利だけど、常時表示されると邪魔になる!」というときに隠しておけるのでとても便利です。実践で使用頻度の高いVBAなので自由に扱えるようにしておきましょう。

 

下記のサイトでは、ボタンを押すとカウントダウンタイマーが起動VBAが設定されたエクセルファイルをダウンロードしてお使いいただけます。タイムアップするとブックを閉じたりバックアップ保存したりといろんな使い方をすることができます。気になる方は是非参考にしてみてください。

 

<<ボタンを押すとカウントダウンタイマーが起動するVBAのダウンロードはこちら

 

タイマーを使うことで仕事の効率をアップさせることができる

エクセルにタイマー機能を設定することで時間を気にしながら仕事をするようになり、自然と仕事の効率をアップさせることができます。

私の職場では、誰かがエクセルを開きっぱなしで「読み取り専用」になってしまう問題を解消するためにサンプル事例①のVBAを導入しています。このVBAを導入してから仕事の効率をアップさせることができたと実感しています。

下記の記事では、エクセルを自動で閉じるVBAについて詳しく解説しています。

 

 

タイマーや時間を操作するVBAを使えば、「決められた日付と時間に指定する処理をするVBAを行う」ことができるので毎日行う決められた作業を自動化することができます。いろんなエクセル業務に応用することができるVBAなので是非使い方をマスターしましょう。