【Excelアニメーション】 クリスマスツリー
- yuji fukami
- il y a 5 jours
- 8 min de lecture
これは「VBA Advent Calendar 2025」の11日目です
概要
今回は、Excel VBA を使って制作した クリスマスアニメーション作品をご紹介します。
セルの上で雪が舞い、「Merry Christmas」の文字色のグラデーションがゆっくりと変化し、クリスマスツリーの照明が回転しながら柔らかく瞬く──という感じの、“動きのある作品”に仕上がりました。
まずは動画をご覧ください👇
PR
本記事はDiscordコミュニティ「Excel-Fun.xls*」の2025年アドベントカレンダー用の記事で作成したものです。
Excel好き、VBA好きが集まる楽しくも参考になるコミュニティですので是非ご参加ください✨
↓「Excel-Fun.xls*参加リンク」

技術解説(クリスマスツリー)
このブログでは、以下の技術ポイントを中心に解説します。
Excelアニメーションの基礎
グラデーション文字(Merry Christmas)の色変化アニメーション
雪が降るエフェクトの仕組み(既存コードの流用)
クリスマスツリー照明の配置
照明の“ぼかしエフェクト”による瞬き表現
Excel を「静的な表計算ソフト」ではなく“キャンバス”としてアニメーションを描くための考え方をまとめています。
1.Excelアニメーションの基礎
まず、下記のような円のシェイプが回転移動するアニメーションをもとに、Excelアニメーションの基礎を説明します。
動画ではスタートボタンとなる、「アニメーション実行」と「停止」ボタンが設置されて、「アニメーション実行」ボタンを押すと円シェイプが回転移動を開始し、「停止」ボタンで停止します。
実際のコードの解説は下記の通りです。

上記図にもあるように、アニメーション処理は大きく 3 つのステップに分かれています。
① シェイプの参照と初期設定
まず、動かしたい円シェイプ(今回の例では名前「円」)を取得し、
回転の中心位置・半径・回転速度などのパラメータを設定します。
ここで設定した値が、後の座標計算で使用され、
「どの位置を中心に、どれくらいの大きさで動くか」が決まります。
② 停止トリガーを OFF にしてアニメーション開始
アニメーションを制御するために、
PriJudgeStop という 停止用フラグ(Boolean) を用意しています。
アニメーション開始時:False
停止ボタンが押されたら:True
という仕組みで、アニメーションの On/Off を管理します。
開始時にこのフラグを必ず False にしておくことで、
Do-Loop のループ処理が正しく走り続けるようになります。
③ Do-Loop によるアニメーション処理
メインとなる処理は Do-Loop の繰り返し です。
この 1 回のループが「1 フレーム(1 コマ)」に相当します。
ループの中では下記の処理が順番に実行されています。
次にDo-Loopの中身のアニメーションの処理について詳しく説明します。

図の赤枠部分の処理は、Do 〜 Loop の中で
シェイプの移動・変形
画面への反映(DoEvents)
停止処理の判定
という 3 段階を、ひたすら繰り返しているだけのシンプルな構造になっています。
① シェイプの移動・変形
まずループの先頭で、円シェイプの位置や形状を変更する処理を行います。
ここでは座標の計算結果をもとに Left や Top などを書き換え、「次の 1 コマ分の動き・変形」を決めています。(座標計算の中身についてはここでは詳しく書きません)
② 画面への反映(DoEvents)
続いて、変更した内容を画面上に反映させるために DoEvents を呼び出します。
アニメーションは「値を変えるだけ」では見えず、変更 → 画面に描画 → また変更… を高速で繰り返すことで初めて“動き”として認識されます。
今回のコードでは、描画の安定性を高めるために DoEvents を 2 回続けて実行しています。もし動きがカクつく場合は、DoEvents の回数を増減させることで、描画タイミングの調整ができる、という位置づけです。
③ 停止処理の判定
最後に、停止ボタンが押されたかどうかを判定します。
停止ボタン側では、クリックされたタイミングでPriJudgeStop = True がセットされます。
Do 〜 Loop 内では毎回このフラグをチェックし、PriJudgeStop = True になっていれば Exit Do でループを抜けて、アニメーション処理を終了する、という流れです。
以上の 3 段階、
「移動・変形 → 画面反映 → 停止判定」
を Do 〜 Loop の中で繰り返すことで、Excel シート上で連続したアニメーションが実現されています。
今回の作品の「クリスマスツリー」では「①シェイプの移動・変形」でもっと複雑なことをやっているだけで、Excelアニメーションの構造は上記のものと変わりません。
2. グラデーション文字の色変化
画面下部に表示した 「Merry Christmas」 の文字には、Excel の「文字の塗りつぶし」で グラデーション(2 色) を設定しています。
まずは右側の書式設定ウィンドウで、
種類:グラデーション
分岐点:2 つ(左側の色・右側の色)
という状態をあらかじめ作っておきます。ここまでは普通の図形書式と同じで、VBA は一切使っていません。

2-1. VBA からグラデーションの 2 色を書き換える
アニメーション中は、この 2 つの色を VBA から毎コマ書き換えています。
コードでは、ロゴのシェイプに対して
TextFrame2 → TextRange → Font → Fill → GradientStops(1),(2).Color.RGB
という、少し奥まったプロパティをたどってグラデーションの「左側の色」「右側の色」 の RGB 値を直接更新しています。
GradientStops(1).Color.RGB … 左側の色
GradientStops(2).Color.RGB … 右側の色
この 2 箇所に、その時点のフレーム番号 K に応じて計算した色を代入することで、ロゴ全体の色味がゆっくりと変化していきます。
2-2. 色の計算は 2 つの関数に分離
実際の色計算は、
Cal_ロゴ色1
Cal_ロゴ色2
という 2 つの関数に分けて行っています。どちらも中身の構造はほとんど同じで、
R・G・B それぞれについて、最小値〜最大値の範囲を決める
三角関数(Cos)を使って、その範囲の中を 周期的に行ったり来たり させる
最後に RGB(R, G, B) として 1 つの色にまとめて返す
という流れです。

1 周期分のフレーム数(ここでは 20 コマ)を指定しているので、20 コマごとに元の色に戻り、ループするような色変化になります。
2-3. 2 色の周期を 1/3 だけずらしている
Cal_ロゴ色1 と Cal_ロゴ色2 の違いは、周期(波)のタイミングを 1/3 だけずらしている 点だけです。
左側の色:周期のスタートが 0
右側の色:周期のスタートを 1/3 ずらす
というイメージで、三角関数の「位相」を少し変えています。
これにより、
左側の色が変わり始めてから、
少し遅れて右側の色も追いかける
というような、ズレを含んだ色の動きが生まれます。2 色が同じタイミングで一緒に変わるよりも、グラデーション全体がゆっくり流れているような印象になり、見た目がぐっと華やかになります。
3. 雪が降るアニメーション
画面全体に舞う雪は、以前作成した Excelアニメーション「雪が降る」 をベースにしています。
詳細は下記リンクを参考にしてください
4. クリスマスツリーの照明配置
ツリーの照明は、小さな円シェイプを多数配置して作っています。
考え方としては、
三次元空間に“円錐”を仮想的に作る
その円錐の表面上に照明を等間隔で配置する
それを Excel シート上の 二次元座標に投影する
という手順です。
Excel 上は平面ですが、3D 座標を計算したうえで「X 軸(左右)」「Y 軸(高さ)」に変換することで、立体感のある照明ツリーを表現しています。
こちらの計算には三次元ベクトルや回転行列を使っていますが、非常に長くなるので今回は割愛いたします。
5. ぼかしエフェクトで照明の“瞬き”を再現
照明の柔らかな光らしさは、シェイプに設定できる ぼかし効果(Soft Edge) の
「ぼかしサイズ」をアニメーション中に少しずつ変化させることで表現しています。

Excel の図形書式では、各シェイプごとに[図形の書式設定 → ぼかし → サイズ]という項目が用意されています。通常は固定値を設定するだけの機能ですが、今回はこの ぼかしサイズの値そのものを VBA から動的に変更 しています。
アニメーション処理では、各コマごとに
現在のフレーム番号に応じて “ぼかし量” を計算する
計算した値をシェイプの SoftEdge.Radius に代入する
という流れで、ぼかしの強弱をゆっくり揺らしています。
使っているのは単純な三角関数(周期関数)で、これにより
明るく見える瞬間
ふわっと光が弱まる瞬間
また明るくなる瞬間
という、自然な“呼吸感”のある光の変化が生まれます。
ぼかし量を直接アニメーションさせることで、静止した円形シェイプでも LED の点滅や幻想的な照明の瞬き のような表現を実現できます。
まとめ
今回のアニメーション作品では、
三角関数による周期表現
グラデーション色の時間変化
3D → 2D の投影計算
シェイプのぼかし効果のアニメーション化
といった Excel でも実現できる多彩な表現を組み合わせています。
Excel VBA は業務自動化だけでなく、このような インタラクティブ作品・演出制作にも応用可能です。
今後も VBA を使った遊び心のある作品や、技術的な仕組みを紹介していきますので、ぜひお楽しみに。

