このデジタル時計は Excel Vba という Excel 上でプログラミングをして作成されています。
難しいそうに見えますが、二時間くらいで作れました!(デザインに時間がかかりましたが、こだわりさえしなければ30分で作り終えました)。
処理内容はExcelで現在時刻をデジタル数字フォントで永遠に表示してくれるプログラムです。
この記事では、Excel で「デジタル時計を作る」方法について簡単に解説します。
- ダウンロードできる「Excel デジタル時計」の機能について
- 「Excel デジタル時計」の作り方
もしよければ参考にしてみてください。
※ いつものようにつくったのも共有しときますので、よければどうぞ。
ダウンロードできる 「Excel デジタル時計」の機能について
ダウンロードできる「Excel デジタル時計」の機能です。
機能といってもボタンが二つあるだけです。
これらのボタンは下記のように動作します。
- START ボタン・・・時計スタート!(現在時刻を取得します!)
- STOP ボタン・・・時計をストップ!(時刻の更新を停止します!)
時刻は一秒ごとに刻まれます。
初期値(はじめに表示されている時刻)は特に気にしなくてもOKです。
このシートには非表示行があります!
このシートには非表示行があります。
この行(33行~43行)はこのデジタル時計を動かすのに重要な役割を担っているので絶対に消さないください!!
「Excel デジタル時計」の作り方
さてでは「Excel デジタル時計」の作り方について説明します。
この時計は Excel Vba というプログラミングで作成していきます。
- 現在時刻をカウントする Excel Vba プログラムを作成する
- START、STOPボタン用の Excel Vba プログラムを作成する
- 数字をデジタル数字形式に表示させる(条件付き書式を設定する)
では順に説明します。
※ ここからはプログラミングの専門用語がでてきます!!
現在時刻をカウントする Excel Vba プログラムを作成する
現在時刻をカウントする処理は下記の順に作成していきます。
- 現在時刻を取得(hh:mm:ss形式)
- 取得した現在時刻(hh:mm:ss形式)を時間、分、秒で細かく分割
- 時間、分、秒をセルに書き込む
- 現在時刻を取得する処理(上記1~3)を1秒ごとに呼び出す
現在時刻を取得(hh:mm:ss形式)
まず 現在時刻を取得するのに「actWacth」プロシージャを定義します。
このプロシージャでは Format(Time, "hh:mm:ss") を変数 nowValue にセットする処理を実装しています。
1 2 3 4 5 6 7 8 9 |
Public Sub actWatch() nowValue = Format(Time, "hh:mm:ss") hour1 = Mid(nowValue, 1, 1) hour2 = Mid(nowValue, 2, 1) minitue1 = Mid(nowValue, 4, 1) minitue2 = Mid(nowValue, 5, 1) second1 = Mid(nowValue, 7, 1) second2 = Mid(nowValue, 8, 1) End Sub |
取得した現在時刻(hh:mm:ss形式)を時間、分、秒で細かく分割
現在時刻が格納されている nowValue(hh:mm:ss形式)を時間、分、秒で細かく分割します(デジタル数字形式にするため)。
この際 Mid 関数という指定した文字を分割する関数を使用します。
Mid関数は開始文字と終了文字を指定することで文字を分割することが可能です。
たとえば 10:51:47 という値の4文字目から5文字目を抽出しようとすると Mid("10:51:47",4,5)と記述します。
すると Mid("10:51:47",4,5) = 「5」となるわけです。
つまり今回の場合はこのようになります。
(例)nowValue = "10:51:47"の場合
- hour1 = Mid(nowValue, 1, 1)・・・1(2桁目の時間)
- hour2 = Mid(nowValue, 2, 1)・・・0(1桁目の時間)
- minitue1 = Mid(nowValue, 4, 1)・・・5(2桁目の分)
- minitue2 = Mid(nowValue, 5, 1)・・・1(1桁目の分)
- second1 = Mid(nowValue, 7, 1)・・・4(2桁目の秒)
- second2 = Mid(nowValue, 8, 1)・・・7(1桁目の秒)
時間、分、秒をセルに書き込む
これは簡単です。
時間、分、秒の値を持つ変数(hour1,hour2,minitus1,minitu2,second1,second2)を Cells(行、列)に代入します。
※ PRINT_CELL_ROW、PRINT_CELL_COL は数字の定数です。好きな値にすれば好きなセルの位置に出力されます。
1 2 3 4 5 6 7 8 9 |
' セルに時間、分、秒を表示させる Cells(PRINT_CELL_ROW, PRINT_CELL_COL) = hour1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 1) = hour2 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 2) = ":" Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 3) = minitue1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 4) = minitue2 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 5) = ":" Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 6) = second1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 7) = second2 |
現在時刻を取得する処理を1秒ごとに呼び出す
つぎに現在時刻を取得する処理(「actWacth」プロシージャ)を一秒ごとに呼び出すようにします。
その際、Excel Vba の Application.OnTime という機能を用います。
1 |
Application.OnTime Now + timeValue("00:00:01"), "actWacth" |
Application.OnTime は 指定した時刻に好きなプロシージャを呼び出すことができます。
つまり、Application.OnTime Now + timeValue("00:00:01"), "プロシージャ" とすることで
指定したプロシージャ(現在時刻を取得する「actWacth」)を1秒ごとに呼び出します。
あとはこれをずっーと実行するだけ。。。それだけです。
今回はずーっと実行する処理として while 文、for 文のようなループ処理ではなく再帰処理にします。
つまり 「actWacth」プロシージャの中に Application.OnTime Now + timeValue("00:00:01"), "actWacth" と書くだけで
ずーっと「actWacth」プロシージャが実行されるというわけです。
Application.OnTime Now を停止させる方法について
現在時刻を取得する「actWacth」を再帰処理で呼び出すと永遠に呼び出されてしまいます。
ですので、ここでは Excel シート上の特定のセルの値(Range(JUDGE_CELL)で指定する値)が TRUE の場合は動作し、FALSEの場合は停止させるよう条件式を追加します。
※ JUDGE_CELL は数字の定数です!値自体は何でもOKです!
1 2 3 4 |
' 一秒ごとに現在時刻を取得 If Range(JUDGE_CELL) = True Then Application.OnTime Now + timeValue("00:00:01"), "actWacth" End If |
現在時刻をカウントする Excel Vba プログラム(全体)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Const PRINT_CELL_COL As Integer = 43 Const PRINT_CELL_ROW As Integer = 33 Const JUDGE_CELL As String = "AO33" Public Sub actWacth() Dim nowValue As String Dim hour1, hour2, minitue1, minitue2, second1, second2 ' 現在時刻を取得 nowValue = Format(Time, "hh:mm:ss") ' hh:mm:ss 形式を時間、分、秒に細かく分ける hour1 = Mid(nowValue, 1, 1) hour2 = Mid(nowValue, 2, 1) minitue1 = Mid(nowValue, 4, 1) minitue2 = Mid(nowValue, 5, 1) second1 = Mid(nowValue, 7, 1) second2 = Mid(nowValue, 8, 1) ' セルに時間、分、秒を表示させる Cells(PRINT_CELL_ROW, PRINT_CELL_COL) = hour1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 1) = hour2 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 2) = ":" Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 3) = minitue1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 4) = minitue2 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 5) = ":" Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 6) = second1 Cells(PRINT_CELL_ROW, PRINT_CELL_COL + 7) = second2 ' 一秒ごとに現在時刻を取得 If Range(JUDGE_CELL) = True Then Application.OnTime Now + timeValue("00:00:01"), "actWacth" End If End Sub |
START、STOPボタン用の Excel Vba プログラムを作成する
そして次に START、STOPボタンです。
STARTは startWatch プロシージャで実装します。
Application.OnTime Now(指定したプロシージャを指定した時刻に呼び出す関数)を止めるように用意したセルの値(Range(JUDGE_CELL)で指定する値)を TRUE にし、
actWatch (現在時刻を取得する処理)を呼び出せばOKです。
STOPは Range(JUDGE_CELL) に FALSE を代入するだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Const PRINT_CELL_COL As Integer = 43 Const PRINT_CELL_ROW As Integer = 33 Const JUDGE_CELL As String = "AO33" Sub startWatch() Range(JUDGE_CELL) = True Call actWacth End Sub Sub stopWatch() Range(JUDGE_CELL) = False End Sub |
これで現在時刻の表示は完了です!
あとはデジタル数字形式に変換する処理だけです!
数字をデジタル数字形式に表示させる(条件付き書式を設定する)
ここから結構難しい話です。
これはやり方はいろいろあると思いますが、今回は条件付き書式を利用します。
0 ~ 9 の10種類数字があり、そのデジタル数字を思い浮かべてみてください。
そうするとある規則があることに気づきませんか?
たとえばデジタル数字を「上、下、真ん中、左上、左下、右上、右下、」と7つのブロックに区切ります。
すると、ブロック単位で数字ごとにデジタル表記に必要な箇所が決まっているんです。
たとえば、0ならば真ん中以外の6つのブロック、1ならば右上と右下だけの2ブロック、....
こんな感じでブロック単位でみていると数字毎に必要な箇所が固定化されています。
これを表にまとめたのが、右上の表の画像です。
これさえ理解できればあとはこのルールを条件付き書式に反映させればいいだけです。
つまり1の数字ならばセルの右上、右下の部分の色を変えればデジタル数字形式になります!
条件付き書式は設定箇所が多いため今回は設定のやりかただけを説明します。
※ 詳細な条件付き書式の設定はダウンロードした Excel デジタル時計ファイルをご確認ください!
Excel の「ホーム」→「条件付き書式」→「ルールの管理」を押下します。
下記画面が表示されますので、新規ルールをクリックします。
書式ルールの編集画面がでてくるので、一番下の「数式を使用して書式設定するセルを決定」を選択し
「=COUNFIT($AR$37,"*"&AT33&"*")>0」とします(これはあくまで一例です)。
条件付き書式は数式が真の場合にセルの色を変えたりすることができます。
たとえば「3」という数字をデジタル数字形式にする場合「右上、右下、上、下、真ん中」のセルの色を変えればOKということです。
またCOUNTIFは特定の数字が含まれている数をカウントですが、画像右下の表で定義した「値」列に数字が含まれていれば
その「値」列に対応する「位置」列がわかります!あとはそこを条件付き書式で色を変えればOKです!
※ COUNTIF 関数について詳しく知りたい方はこちらもどうぞ!
最後に
いかがでしたでしょうか?
この記事では、Excel で「デジタル時計を作る」方法について簡単に解説しました。
なにもデジタル数字形式にしないならすごく簡単なので、よければぜひつくってみてください!
つくるのがめんどくさいならばぜひダウンロードしてみてください!
この記事が読者の何かのお役に立てれば幸いです。
ではでは。