エクセルにタイマーを設定する方法【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スキルを身に付ける

 

VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。

 

 

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。

 

マクロの開発を外注に依頼する

マクロの開発を外注に依頼する導入方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。

 

本記事で紹介している『エクセルにタイマー機能を追加するVBA』も下記のサイトでダウンロード可能。

 

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

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

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

 

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

 

 

 

『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、

VBA初心者でもマクロを導入できる、費用が安い、

というメリットがあります。

 

しかし

VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい処理を実現するコードを書くだけ

です。

 

【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。

業務内容に合ったタイマー機能を導入する方法

 

業務内容に合わせたカウントダウンタイマーVBAを設定するには、

自分でVBAを設定する方法VBA開発依頼をする方法

の2つがあります。

 

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

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

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

 

Left Caption

ガッツポーズの人

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

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

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

 

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

 

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

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

と伝えるだけ。

 

 

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

 

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

 

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

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

 

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

 

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