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

 

エクセル内にタイマーを設定したい!!

 

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

 

この記事では、

VBAを使ってカウントダウンタイマーを設定する方法、使われている関数

についてご紹介しています。

 

カウントダウンタイマーを設定すると以下のようなタイマーを表示することができます。

 

カウントダウンタイマーは以下のような場面で導入されます。

  • 職場で複数の人が扱うエクセルファイルで、独占しないよう制限時間後にエクセルを閉じる
  • 乗車状況確認マクロで、「降車」を検知して制限時間内に操作がない場合警告音を鳴動させる
  • 作業効率をアップさせるため制限時間を設ける

 

Left Caption

ひらめく人

他にもいろんな業務に応用できそうです。

 

 

カウントダウンタイマーVBAを具体的にイメージしてもらうために2つのサンプル事例を使ってVBAの解説をしていきます。

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

サンプル事例② 制限時間を自由に変更できるカウントダウンタイマー

 

カウントダウンタイマーVBAを自由に扱えるようになると、

いろんなエクセル業務への応用が可能になるので是非参考にしてみてください。

 

広告

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

 

サンプル事例①「エクセルを開くとタイマーが作動し、タイムアップするとエクセルが自動で閉じる」の概要はこちら

 

 

  1. エクセルを開くと同時にカウントダウンタイマーが起動
  2. 「A4セル」「C4セル」「E4セル」に入力される数値で制限時間を決定
  3. ユーザーフォームのテキストボックスに制限時間を表示する
  4. タイムアップでエクセルを自動的に閉じる

この流れでVBAが動作しています。

 

サンプルVBA

Module1に入力する1つ目のVBAがこちら

Sub Timer()
    Dim L As Date, cnt As Double
    L = DateAdd("h", Range("A4"), Time)
    L = DateAdd("n", Range("C4"), L)
    L = DateAdd("s", Range("E4"), L)
    rng = 0
    UserForm1.Show vbModeless
    Do
    cnt = DateDiff("s", Time, L) + rng
    UserForm1.TextBox1 = Format(TimeSerial(0, 0, cnt), "hh:nn:ss")
    If UserForm1.TextBox1 = "00:00:00" Then Exit Do
    DoEvents
    Loop
    Call CloseMe
End Sub

3行目から5行目は、現在時刻に「A4セル」「C4セル」「E4セル」に入力された時間を加えた時間を変数Lに格納

7行目は、制限時間を表示するユーザーフォームを表示する

8行目から13行目は、変数Lから現在時刻を引いて残りの時刻を有するのテキストボックスに表示させ、0になるまで繰り返す

14行目は、繰り返し処理完了後、「CloseMe」VBAを呼び出す

 

Module1に入力する2つ目のVBAがこちら

Sub CloseMe()
ActiveWorkbook.Save
ThisWorkbook.Saved = True
If Workbooks.Count <= 1 Then
Application.Quit
Else
ThisWorkbook.Close False
End If
End Sub

「上書き保存して閉じる」という内容です。

 

UserForm1に入力するVBAがこちら

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

「ストップボタン押下でカウントダウンの表示が停止されコメントが表示する」という内容です。

 

導入方法

1.VBA編集画面を開く

 

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

 

3.オブジェクトの作成

 

4.VBAの設定

 

入力するVBAは上記の「UserForm1に入力するVBA」をコピペしてお使いください。

 

5.様式の設定

 

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

 

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

 

 

6.標準モジュールを作成

 

7.標準モジュールにVBAを記入

 

入力するサンプルVBAには上記で紹介している、「Module1に入力する1つ目のVBA」と「Module1に入力する2つ目のVBA」をコピペしてお使いください。

 

7.Sheet1にVBAを記入

 

「Sheet1を開くとUserForm1を表示する」という内容です。

 

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

 

「エクセルファイルを開くとカウントダウンタイマーVBAが起動する」という内容です。

 

以上で「エクセルを開くとタイマーが作動し、タイムアップするとエクセルが自動で閉じる」VBAの導入は完了です。

 

Module1に入力する2つ目のVBAの内容を変えることで

「制限時間後エクセルを閉じる」から「制限時間後〇〇する」に変更

することができます。

 

Left Caption

ガッツポーズの人

業務内容に合ったVBAにアレンジしてみてください。

 

サンプル事例② 制限時間を自由に変更できるカウントダウンタイマー

 

サンプル事例②「制限時間を自由に変更できるカウントダウンタイマー」の概要はこちら

 

  1. 「タイマー表示」ボタン押下でカウントダウンタイマーを表示
  2. 時間を取得するテキストボックスに入力される数値で制限時間を決定
  3. テキストボックスに制限時間を表示する
  4. タイムアップでコメントを表示する

この流れでVBAが動作しています。

 

サンプルVBA

UserForm2のコマンドボタン1に入力するVBAがこちら

Private Sub CommandButton1_Click()
    Dim L As Date, cnt As Double
    L = DateAdd("h", UserForm2.TextBox1, Time)
    L = DateAdd("n", UserForm2.TextBox2, L)
    L = DateAdd("s", UserForm2.TextBox3, L)
    Rng = 0
    UserForm2.Show vbModeless
    Do
    cnt = DateDiff("s", Time, L) + Rng
    UserForm2.TextBox4 = Format(TimeSerial(0, 0, cnt), "hh:nn:ss")
    If UserForm2.TextBox4 = "00:00:00" Then Exit Do
    DoEvents
    Loop
    MsgBox "時間切れ"
End Sub

3行目から5行目は、現在時刻に「テキストボックス1」「テキストボックス2」「テキストボックス3」に入力された時間を加えた時間を変数Lに格納

7行目は、制限時間を表示するユーザーフォームを表示する

8行目から13行目は、変数Lから現在時刻を引いて残りの時刻を有するのテキストボックスに表示させ、0になるまで繰り返す

14行目は、繰り返し処理完了後、メッセージを表示する

 

UserForm2のコマンドボタン2に入力するVBAがこちら

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

 

「コマンドボタン(ストップ)を押下するとメッセージが表示されタイマーが一時停止する」という内容です。

 

 

導入方法

1.VBA起動

 

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

 

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

 

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

 

入力するサンプルVBAには上記で紹介している、「UserForm2のコマンドボタン1に入力するVBA」と「UserForm2のコマンドボタン2に入力するVBA」をコピペしてお使いください。

 

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

 

「UserForm2を表示する」という内容です。

この「click」マクロをボタンに登録することでカウントダウンタイマーを表示させることができます。

 

6.ボタンの作成

 

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

 

以上で「制限時間を自由に変更できるカウントダウンタイマー」VBAの導入は完了です。

 

ボタンをクリックすることでユーザーフォームを表示させる方法は、

ユーザーフォームは便利だけど、常時表示されると邪魔になる!

というときに隠しておけるのでとても便利です。

 

Left Caption

上を目指す人

実践で使用頻度の高いVBAなので自由に扱えるようにしておきましょう。

 

 

タイマー設定に必要な関数

 

カウントダウンタイマーを設定するには、「時間に関する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:」という表示に変換するために設定されています。

 

基本構造

 

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開発依頼をする方法

の2つがあります。

 

自分でカウントダウンタイマーVBAを設定する方法

自分でVBAを設定する手順がこちら

  1. どのような処理をしたいのか具体的なイメージを持つ
  2. VBAを書いてみる
  3. ネットや参考書を使って問題点を解決していく

 

Left Caption

ガッツポーズの人

私はこの方法でいくつもの効率化マクロを開発

今回紹介した「カウントタイマーVBAの作成」は以下の流れで作業を進めました。

  1. 制限時間後に〇〇する処理をエクセル業務に導入したい
  2. 1秒ずつ減っていくタイマーをどうやって表示すればいいのだろう。。
  3. テキストボックスとFormat関数で表現できるかも

 

このような流れで一つ一つ疑問を解決して業務内容に合わせたVBAに仕上げていきました。

 

作業をしてみて感じたことが、

「時間」を操作する関数って複雑でイメージしずらい。

現在時刻に設定したい時間を足して、どんどん引いていくなんてややこしい

です。

 

Left Caption

ガッツポーズの人

めちゃくちゃ苦労しました。。。が、出来上がったときの達成感がハンパない!!

 

関連記事「エクセルにタイマー機能を追加するVBA」では

この記事で紹介した2つのサンプルVBAが設定されたエクセルファイルをダウンロード

することができます。

 

カウントダウンタイマーVBAを切り取ってお使いのエクセルに追加する!

カウントダウンタイマーVBAをアレンジして使ってみる!

などいろんな利用方法があります。

 

自分でVBAを設定したい!と考えている方は是非参考にしてみてください。

 

 

VBA開発依頼をする方法

当ブログが行っているVBA開発代行サービスの依頼方法は、

現状このようなエクセル作業をしていて自動化したい!

と伝えるだけ。

 

 

「こんなエクセル作業にタイマー機能を追加して自動的に〇〇したい!」

 

ザックリとした依頼内容でOKです。

 

エクセル業務の効率がアップするようなVBAの提案、開発をさせていただきます。

>>>マメBlogのVBA開発依頼の詳細はこちら

 

関連記事「年間50件達成!!マクロ開発実績について」ではマメBlogが行ってきたVBA開発の実績が詳しく紹介されています。

 

どんなVBA開発を行っているのか、費用はどれくらいかかるのか、などVBA開発依頼サービスに興味のある方は是非チェックしてみてください。