Excelの散布図が動く!数式とMMULT関数で作る「アナログ時計」

Excelの散布図が動く!数式とMMULT関数で作る「アナログ時計」 数学・アルゴリズム実験室

はじめに:Excelの散布図で時計を動かそう

はじめに、当ブログ「Excelで暇つぶし」へようこそ!
まずは、真っ新な空白のシートを用意してください。

今回は、以前に解説した「散布図とMMULT関数を使った図形の回転」の完全なる応用編です。

なんと、Excelのグラフ機能(散布図)だけを使って、動く「アナログ時計」を完全再現してしまいます!

Excelの説明画像

これから行う作業の全体像をざっくりと説明します。

  1. まず、現在の時刻をシリアル値として取得します。
  2. 次に、時計の外枠や、短針長針秒針の形を座標データとしてデザインします。
  3. そして、SIN関数やCOS関数で作った「回転行列」を使って針を回します。
  4. 最後に、それを散布図の上に重ねて描画する、という流れです。

数式と数学の力だけで時計が動き出す瞬間は、純粋に知的好奇心を満たす、とても楽しいものです。

さあ、最高の暇つぶしを始めましょう!

本記事では、無料のWeb版Excelを使用して検証を行っています。
Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!


ステップ1:時刻の取得と「NOW関数の罠」

まずは、時計の針を動かすための「現在の時刻」を取得します。
動的にチェックできるように、常に現在時刻を拾う仕組みを作ります。

N2セルに見出しとして「time」と入力してください。
続いて、O2セルに以下の数式を入力します。

関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。

=NOW()-TODAY()

Excelの説明画像

無料のWeb版Excelでは、セルの書式設定メニューからhh:mm:ssという秒までの表示形式を新規に選ぶことができません。

あらかじめローカルのデスクトップ版Excelでユーザー定義書式を設定したブックをOneDrive等に保存してWeb版で開けば、その書式はそのまま使えます。

しかし、今回は新規ブックから作る想定なので、O3セルに以下の数式を入れて、視覚的に秒までわかるようにしておきましょう。

=TEXT(O2, "hh:mm:ss")

Excelの説明画像

なぜ「=NOW()」ではダメなのか?

ここで鋭い方は、

「現在時刻なら、わざわざ引き算しなくても =NOW() だけでいいのでは?」

と思うはずです。

しかし、これには極めて重要な理由があります。

Excelのシリアル値は、1900年1月1日を1としてカウントする整数部分(日付)と、小数点以下の部分(時刻)で構成されています。

もし NOW() をそのまま使うと、数万という巨大な数値になってしまいます。

この後、この数値をSINCOSといった三角関数に渡して角度を計算します。

具体的には、Excelの三角関数は引数(ラジアン)の絶対値が 2^27 (約134,217,728)以上になると計算を放棄し、#NUM!エラーを返す仕様になっています。

数万日分のシリアル値に大きな倍率(秒針の回転など)を掛けると、この浮動小数点演算の精度限界をあっさり突破してしまうのです。

Excelの説明画像

つまり、今日の日付部分(TODAY())を引き算することで、純粋な「時間部分(00.999...)」だけを抽出し、エラーを未然に防いでいるというわけです。


ステップ2:時計の外枠(正12角形)を描く

次に、時計の文字盤となる外枠(アウトライン)をデザインします。
円を描いても良いのですが、時刻の目印としてわかりやすいように「正12角形」を描画します。

B2セルに見出しとして「outline」と入力します。
そして、B3セルとC3セルに以下の数式を入力してください。

B3セル:=2*COS(SEQUENCE(13, , PI()/12, PI()/6))

C3セル:=2*SIN(SEQUENCE(13, , PI()/12, PI()/6))

Excelの説明画像

正12角形を描く数式の仕組み

この数式は、半径2の円周上に12個の点を打つためのものです。

SEQUENCE関数を使って、角度を PI()/6(30度)ずつ増やしながら13個の座標を生成しています。
(始点と終点を繋ぐために13個の点が必要です)

詳しくは、Excelグラフは「お絵かきツール」だ!散布図で正多角形や螺旋を描く方法
にて解説しています。

ポイントは、初期値を PI()/12(15度)にずらしている点です。

これにより、12時と6時の位置に頂点が来るのではなく、辺が平らになるように調整しています。
時計の枠としての見栄えを良くするための、ちょっとした工夫ですね。

Excelの説明画像

この段階でグラフを表示させてみましょう。

B3:C15の範囲を選択し、挿入タブから「グラフの挿入」→「散布図(直線)」を選択します。
線の色や太さは、時計の枠らしくお好みの設定に変更してみてください。

Excelの説明画像

なお、今回は文字盤の「12」「1」「2」といった時刻の数値までは扱いません。
ぜひ、ご自身でデザインに挑戦してみてください。

Excelの説明画像

ステップ3:短針のデザインと「回転行列」の心臓部

いよいよ、時計の針をデザインして回していきます。
まずは「短針(hour)」からです。

E2セルに見出しとして「hour」と入力し、E3セルに以下の配列を入力します。

={0,0.7; -0.08,0.7; 0,1; 0.08,0.7; 0,0.7; 0,-0.2}

Excelの説明画像

散布図で作るポリゴンアート

これは、短針の形を決めるためのXY座標のリストです。

単なる直線ではなく、先が尖った「矢印」のような多角形(ポリゴン)になるように座標を打っています。

0を中心に左右(X軸)に少しだけ膨らませ、上(Y軸)に伸ばし、最後は少しだけ下にも飛び出すようにしています。

散布図はこれらの点を順番に直線で結ぶため、美しい時計の針の形が浮かび上がります。

Excelの説明画像

記事の心臓部:短針の回転角度

続いて、この針を現在時刻に合わせて回転させるための「回転行列」を作ります。
以下の数式を入力してください。

E10セル:=COS($O$2*PI()*4)
E11セル:=SIN($O$2*PI()*4)
F10セル:=-SIN($O$2*PI()*4)
F11セル:=COS($O$2*PI()*4)

Excelの説明画像

ここが、この記事の最大の心臓部です。
なぜ $O$2 * PI() * 4 という角度になるのでしょうか?

Excelのシリアル値は、24時間(1日)で1になります。

短針は12時間で時計を1周(360度)しますよね。

ここで「ラジアン(弧度法)」について簡単に数学的な説明をしておきましょう。

私たちが普段使う「度数法(360度で1周)」とは異なり、ラジアンは「円の半径と同じ長さの弧に対する中心角」を1ラジアンとする単位です。

半径が rr の円の円周は 2πr2\pi r なので、1周(360度)は 2*PI() ラジアン(2π2\pi)となります。

つまり、1日(24時間)経過すると時計を2周することになります。

ラジアンで表すと、1周が 2*PI() なので、2周は 4*PI() となります。

すなわち、シリアル値に 4*PI() を掛けることで、現在時刻にピッタリ対応した短針の回転角度(ラジアン)が算出できるのです!

MMULT関数でアフィン変換を実行

角度が出たら、あとは元の座標に行列を掛け合わせるだけです。
E14セルに以下の数式を入力します。

=MMULT(E3:F8, E10:F11)

Excelの説明画像

解説

これは数学における「アフィン変換(回転)」を行っています。

アフィン変換とは、図形に対して回転、拡大・縮小、平行移動といった操作を行う、線形代数やコンピュータグラフィックスの基本となる数学的手法です。

行列の積(MMULT)を計算するということは、内部的にはX座標とY座標に対してそれぞれ連立方程式を解いているのと同じです。

具体的な数式で表すと、以下のようになります。

(XY)=(XY)(cosθsinθsinθcosθ)\begin{pmatrix} X’ & Y’ \end{pmatrix} = \begin{pmatrix} X & Y \end{pmatrix} \begin{pmatrix} \cos\theta & \quad \sin\theta \\ -\sin\theta & \quad \cos\theta \end{pmatrix}

ここで理系読者向けのマニアックな仕様に触れておきましょう。

通常の数学の教科書では、座標を列ベクトルとして扱い、反時計回りの回転行列を左から掛けます。

しかし、今回は座標を「行ベクトル(1行2列)」として入力し、右から行列を掛けています。

さらに、時計は「右回り(時計回り)」に動くため、行列内のマイナス(-)の符号の位置が通常の反時計回りの回転行列とは異なり、右上(-SIN)に配置されているのです。

(XY)=(XY)(cosθsinθsinθcosθ) \begin{pmatrix} X’ & Y’ \end{pmatrix} = \begin{pmatrix} X & Y \end{pmatrix} \begin{pmatrix} \cos\theta & \quad \color{red}{-\sin\theta} \\ \sin\theta & \quad \cos\theta \end{pmatrix}

このあたりの工夫も、関数でグラフアートを作る醍醐味ですね。

グラフ(フィールド)の追加

計算結果が出たら、グラフをダブルクリックしてオプションを開きます。

Excelの説明画像

データ」タブの設定から「+ フィールドの追加」→「+ 新しいフィールドの追加」を選びます。

Excelの説明画像

Xの値に E14:E19、Yの値に F14:F19 を指定して適用します。

Excelの説明画像

これで、現在時刻を指し示す短針がグラフ上に現れました!

Excelの説明画像

ステップ4:長針と秒針の追加(角度の計算ロジック)

短針ができたら、次は長針(分)と秒針です。
基本のロジックは全く同じですが、「回転するスピード(角度の倍率)」が変わります。

長針(minute)の設定

H2セルに「minute」と入力し、H3セルに長針のデザインを入力します。

={0,1.2; -0.05,1.2; 0,1.5; 0.05,1.2; 0,1.2; 0,-0.25}

Excelの説明画像

短針よりも細く、長くなるように座標を調整しています。

Excelの説明画像

次に、回転行列です。H10セルからI11セルに以下を入力します。

H10セル:=COS($O$2*PI()*4*12)
H11セル:=SIN($O$2*PI()*4*12)
I10セル:=-SIN($O$2*PI()*4*12)
I11セル:=COS($O$2*PI()*4*12)

Excelの説明画像

なぜ最後に *12 が追加されているのでしょうか。

長針は、短針のちょうど12倍のスピードで回転するからです。

1日に24周(48*PI()ラジアン)するため、短針の角度に12を掛ければ完璧に長針の角度になります。

H14セルに以下の数式を入力します。

=MMULT(H3:I8, H10:I11)

Excelの説明画像

先ほどと同じ手順でグラフにフィールドを追加しましょう。

Excelの説明画像

秒針(second)の設定

最後に秒針です。K2セルに「second」と入力し、K3セルにデザインを入力します。

={0,-0.3; -0.05,-0.35; 0,-0.4; 0.05,-0.35; 0,-0.3; 0,1.8}

秒針らしく、反対側にも少し長く突き出すようなデザインにしています。

Excelの説明画像

回転行列の角度は、長針のさらに60倍のスピードになります。
K10セルからL11セルに以下を入力します。

K10セル:=COS($O$2*PI()*4*12*60)
K11セル:=SIN($O$2*PI()*4*12*60)
L10セル:=-SIN($O$2*PI()*4*12*60)
L11セル:=COS($O$2*PI()*4*12*60)

K14セルに以下の数式を入力します。

=MMULT(K3:L8, K10:L11)

グラフに秒針のフィールドを追加すれば、ついにアナログ時計の完成です!

Excelの説明画像

無料のWeb版Excelでは、常にリアルタイムでグラフを動かし続けることはできません。

しかし、アナログ時計の表示ロジックを理解することが今回の最優先事項です。

ぜひ、F9キー(再計算)を押して、時計の針が進む様子を確かめてみてください。


最後に:グラフで時計を作ると何が良いのか?

最後に、Excelの散布図でわざわざ時計を作ることにどんな意味があるのかをまとめます。

1. リアル値と数学の完璧な融合
Excel特有の「時間のシリアル値」を、純粋な数学の「角度(ラジアン)」に変換する思考回路が鍛えられます。
この発想力は、複雑なログデータの変換や、時系列データの高度な分析において非常に役立ちます。

2. 配列と行列計算(MMULT)の深い理解
XY座標の配列に対して、アフィン変換の行列を掛け合わせて一気にデータを更新する。
このスマートなデータ処理の技術は、多次元データを扱う際に関数だけで乗り切るための強力な武器になります。

3. ジュアル表現の限界突破
「Excelのグラフはただの棒や折れ線を描くもの」という固定観念が打ち砕かれます。
座標と数式さえあれば、ダッシュボード上に自由なオリジナルUI(メーターやインジケーターなど)をデザインできるという可能性に気づけるはずです。

数式と論理の力で、ただのセルとグラフに「命」を吹き込む。

ぜひ皆さんも、自分だけの美しい時計をデザインしてみてください!

タイトルとURLをコピーしました