はじめに:Excelで「遊び」を本気でやろう
当ブログ「Excelで暇つぶし」へようこそ!
今回は実務の効率化……ではなく、純粋にExcelの奥深さを楽しむための「最高の暇つぶし」をご提案します。
テーマは、「デジタル時計の再現」です。

電光掲示板やデジタル時計でおなじみの、あのカクカクした数字。
(7セグメントディスプレイと言います)

あれをExcelのセルと関数、そして「条件付き書式」だけを使って、ワークシート上に浮かび上がらせてみましょう。
「そんなことして何になるの?」と思うかもしれませんが、このギミックを完成させる頃には、あなたの関数リテラシーは確実に一段階レベルアップしています。
さあ、空っぽのシートを用意して、一緒に作っていきましょう!
本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
ステップ1:設計図(セグメント)を作る
まずは、時計を表示するメインエリアを B2:P6 の範囲とします。
そして、数字を形作る7つのパーツ(セグメント)を、aからgまでのアルファベットで定義します。
画面の右のほう(S1:W7あたり)に、以下のような「設計図」を作ってみましょう。
={,,"a",,;,,,,;"f",,"g",,"b";,,,,;"e",,,,"c";,,,,;,,"d",,}
文字だと分かりにくいので、以下のセルにアルファベットを入力し、背景色をグレーなどに塗りつぶしてみてください。
- a = U1セル
- b = W3セル
- c = W5セル
- d = U7セル
- e = S5セル
- f = S3セル
- g = U3セル

これが、1つの数字を作るための「基本パーツ」になります。
ステップ2:セルの幅と高さを「時計っぽく」調整する
このままだと長方形の集まりで不格好なので、デジタル時計っぽく見えるようにセルのサイズを調整します。
※Web版Excelでは数値を入力しての一括調整ができないため、列番号や行番号の境界線をドラッグして、見た目感覚で調整しましょう。
列幅の調整
- 細くする列(縦の棒): B, D, F, H, J, L, N, P, T, V列
- 広くする列(横の棒): C, G, K, O, U列
- 時計の「コロン」部分: I列は適度な幅に調整し、I3セルとI5セルに「●」を入力しておきます。(「・」だと見えにくいため)

行の高さの調整
- 低くする行(横の棒): 2, 4, 6行目
- 高くする行(縦の棒): 3, 5行目

どうですか?グッと時計のディスプレイに近づいてきましたね!
ステップ3:数字とパーツの「対応表」を作る
次に、「0」のときはどのパーツを光らせるか、「1」のときはどれか…というルールをExcelに教え込みます。
Q9:R18の範囲に、以下の対応表を作ってください。
| 0 | abcdef |
| 1 | bc |
| 2 | abdeg |
| 3 | abcdg |
| 4 | bcfg |
| 5 | acdfg |
| 6 | acdefg |
| 7 | abc |
| 8 | abcdefg |
| 9 | abcdfg |
例えば「1」を表示したいときは、右側の縦棒である b と c だけが点灯すればいい、という意味です。

「7」の形は好みが分かれますが、一旦はこの形で進めます。

ステップ4:時刻を1桁ずつ「分解」する
関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。
いよいよ時刻を扱います。
Y8セルに「TIME」と見出しを付け、Y9セルに任意の時刻(今回は例として 17:28)を入力してください。

デジタル時計には4つの数字(2桁の「時」、2桁の「分」)が表示されます。
この 17:28 という時刻から、1、7、2、8 という数字をそれぞれ取り出して、Y10:Y13の範囲に表示させましょう。
【なぜ10で割るのか?】
例えば「17」という数字を「1」と「7」に分けるには、数学的に「10で割った商と余り」を求めます。
10で割った商(17÷10=1 余り7)が10の位、余りが1の位になります。
すなわち、商を求める QUOTIENT 関数と、余りを求める MOD 関数を使えば、時刻を1桁ずつ見事に分解できるのです!
Y10(時の10の位):
=IF(HOUR(Y9)<10, "", QUOTIENT(HOUR(Y9), 10))
※10時より前の場合は、先頭の「0」を表示しないようにIF関数で空白(””)にしています。
Y11(時の1の位):
=MOD(HOUR(Y9), 10)
Y12(分の10の位):
=QUOTIENT(MINUTE(Y9), 10)
Y13(分の1の位):
=MOD(MINUTE(Y9), 10)
これで、時刻をバラバラに分解することができました!

ステップ5:表示ロジック(数式)の構築
ここが今回の最大のキモです。
表示エリア(B2:P6)の中で、色を塗る可能性があるセルは、4桁×7セグメント=合計28個あります。

この28個のセルそれぞれに、「あなたは今、光るべきですか?」を判定する数式を入れていきます。
判定ロジックの解説
例えば、「17:28」の2桁目(Y11セル)は「7」です。
対応表を見ると、「7」のときに光るべきパーツは abc ですね。

つまり、この桁の a、b、c に該当するセルはTRUE(光る)、それ以外はFALSE(光らない)となれば良いわけです。
この判定を行うのが、以下の数式です。(例として a の場合)
=ISNUMBER(SEARCH("a", XLOOKUP($Y11, $Q$9:$Q$18, $R$9:$R$18)))
【数式の分解解説】
XLOOKUP($Y11, 対応表...):今の数字「7」を対応表から探し、光るべきパーツの文字列「abc」を取ってきます。

SEARCH("a", "abc"):取ってきた文字列の中に、自分自身(ここでは”a”)が含まれているかを探します。含まれていれば「1(見つかった位置)」が返り、含まれていなければエラーになります。

ISNUMBER(...):SEARCHの結果が数値(見つかった)ならTRUE、エラー(見つからなかった)ならFALSEを返します。

完璧なロジックですね!
28個の数式を一気に準備する
とはいえ、これを28箇所も手打ちするのは間違いの元です。
しかし、Excelの関数を使えば、入力すべき「セル番地」すらも自動で生成できます。
まず、X15:X42の範囲に、各セルの役割(a〜g)を入力します。
{"a";"a";"a";"a";"b";"b";"b";"b";"c";"c";"c";"c";"d";"d";"d";"d";"e";"e";"e";"e";"f";"f";"f";"f";"g";"g";"g";"g"}
(縦にaが4つ、bが4つ…とコピペで埋めてください)

この程度なら、数式を組まず、手入力のほうが速いです。
次に、対応するセル番地(C2、G2など)をY列に表示させます。
以下のセルに、それぞれの数式を入力してください。
- Y15セル →
=ADDRESS(2,SEQUENCE(4,,3,4),4)(aのグループ) - Y19セル →
=ADDRESS(3,SEQUENCE(4,,4,4),4)(bのグループ) - Y23セル →
=ADDRESS(5,SEQUENCE(4,,4,4),4)(cのグループ) - Y27セル →
=ADDRESS(6,SEQUENCE(4,,3,4),4)(dのグループ) - Y31セル →
=ADDRESS(5,SEQUENCE(4,,2,4),4)(eのグループ) - Y35セル →
=ADDRESS(3,SEQUENCE(4,,2,4),4)(fのグループ) - Y39セル →
=ADDRESS(4,SEQUENCE(4,,3,4),4)(gのグループ)
すると、Y15:Y42の範囲にスピルして、以下のような配列が表示されます。
{"C2";"G2";"K2";"O2";"D3";"H3";"L3";"P3";"D5";"H5";"L5";"P5";"C6";"G6";"K6";"O6";"B5";"F5";"J5";"N5";"B3";"F3";"J3";"N3";"C4";"G4";"K4";"O4"}

【数式の解説】
例として、
=ADDRESS(2,SEQUENCE(4,,3,4),4)
が何をしているのか見てみましょう。
SEQUENCE(4,,3,4) は、「3」から始まり「4」ずつ増える「4」つの数字を作ります。
つまり、{3; 7; 11; 15}という列番号の配列ができます。

そして、ADDRESS(行, 列, 4) は、指定した行と列のセル番地を文字で返します。
第3引数の「4」は相対参照($マークなし)にするための指定です。
これにより、2行目の3, 7, 11, 15列目、すなわち {"C2"; "G2"; "K2"; "O2"} が一瞬で生成されるわけです!

続いて、AD15:AD42の範囲に、先ほどの判定数式を入力していきます。
(時刻の桁$Y10〜$Y13の参照が4つ周期で切り替わっていることに注意してください)
=ISNUMBER(SEARCH(X15,XLOOKUP($Y10,$Q$9:$Q$18,$R$9:$R$18)))
=ISNUMBER(SEARCH(X16,XLOOKUP($Y11,$Q$9:$Q$18,$R$9:$R$18)))
=ISNUMBER(SEARCH(X17,XLOOKUP($Y12,$Q$9:$Q$18,$R$9:$R$18)))
=ISNUMBER(SEARCH(X18,XLOOKUP($Y13,$Q$9:$Q$18,$R$9:$R$18)))
(これを下まで繰り返す)
さらに、隣のAE15:AE42に =FORMULATEXT(AD15:AD42) と入力して、数式自体をテキストとして表示させておきます。

これで、条件付き書式にコピペする準備が整いました!
ステップ6:条件付き書式に魂を吹き込む
さあ、いよいよ大詰めです。
先ほど用意した数式を使って、時計のセルに色を塗っていきます。
28回も設定するなんて一見面倒な修行のようですが、これを乗り越えた先に圧倒的な達成感が待っています!
1.適用対象である一番左の「a」のセル(C2セル)を選択します。
2.ホームタブから「条件付き書式」→「新しいルール」を選択します。

3.「数式がTRUEのセルを書式設定する」を選択します。
4.数式欄に、AE15セルに表示されている =ISNUMBER(SEARCH(X15,...)) をコピペします。

5.「書式」ボタンを押し、「塗りつぶし」タブで好きな色(例えばネオンブルーや赤など)を選んでOKします。

この作業を、Y列に表示させた対応表(C2, G2, K2…)を見ながら、28個のセル全てに対して行います。
すべて設定し終わったら、B2:P6の範囲を見てみましょう。
Y9に入力した時刻が、見事にデジタル表示で浮かび上がっているはずです!

動作テスト
Y9セルの時刻を 9:53 に変えてみてください。
一番左の「0」が消えて、スッキリとした「9:53」が表示されましたか?

無料のWeb版Excelでは常にリアルタイムな時刻を表示し続けることはできませんが、Y9セルに =NOW() と入力しておけば、F9キー(再計算)を押すたびに、その瞬間の時刻にパッと切り替わります!
条件付き書式に関しては以下の記事でも紹介しています。
ステップ7:カスタマイズ(「7」の表示を変えてみる)
このロジックの素晴らしいところは、「対応表を変えるだけで、表示スタイルを自由に変えられる」という点です。
デジタル時計の「7」の表示、一番左上に縦棒(f)がある方が好きだなぁ、と思ったら、Q9:R18の対応表をいじるだけです。
7 abc → 7 abcf (fを追加)
これで、Y9セルに「17:47」と入力してみてください。

すぐに、縦棒付きのかっこいい「7」が表示されたはずです。この拡張性の高さが、Excel関数の醍醐味ですね。
最後に:この「遊び」がもたらす本当の価値
お疲れ様でした!無事にデジタル時計は完成したでしょうか?
塗りつぶしの色を変えてサイバーパンク風にしたり、セルを増やして「秒」まで表示できるように拡張してみたりと、色々遊んでみてください。
さて、「こんな時計を作って、実務で何の役に立つの?」と思うかもしれません。
確かに、明日の業務でデジタル時計を作ることはないでしょう。
しかし、今回使ったテクニックは、以下のような実務のあらゆる場面で活きてきます。
- 論理的思考力の向上: 「やりたいこと(時刻表示)」を「小さなパーツ(セグメント)」に分解し、それを再構築する思考プロセスは、システム設計や業務フロー構築の基礎そのものです。
- 関数の組み合わせ技(ネスト):
ISNUMBER,SEARCH,XLOOKUPを組み合わせた判定ロジックは、「複数の条件が絡み合う複雑なデータ照合」でそのまま使えます。 - UI(ユーザーインターフェース)の意識: セル幅を調整し、見え方を制御する技術は、ユーザーにとって見やすく、入力しやすいダッシュボードやフォーム作りに直結します。
「遊び」の中で身につけた技術こそが、いざという時の応用力になります。
これからも、Excelという最強の暇つぶしツールで、遊び尽くしましょう!


