top of page
Search

【Excelアニメーション】 クリスマスツリー

  • Writer: yuji fukami
    yuji fukami
  • 6 days ago
  • 8 min read

これは「VBA Advent Calendar 2025」の11日目です


概要

 今回は、Excel VBA を使って制作した クリスマスアニメーション作品をご紹介します。

 

 セルの上で雪が舞い、「Merry Christmas」の文字色のグラデーションがゆっくりと変化し、クリスマスツリーの照明が回転しながら柔らかく瞬く──という感じの、“動きのある作品”に仕上がりました。

まずは動画をご覧ください👇



PR

本記事はDiscordコミュニティ「Excel-Fun.xls*」の2025年アドベントカレンダー用の記事で作成したものです。

Excel-Fun.xls* 2025アドベントカレンダー
Excel-Fun.xls* 2025アドベントカレンダー

Excel好き、VBA好きが集まる楽しくも参考になるコミュニティですので是非ご参加ください✨

↓「Excel-Fun.xls*参加リンク」

Excel-Fun.xls*参加リンク
Excel-Fun.xls*参加リンク

技術解説(クリスマスツリー)


このブログでは、以下の技術ポイントを中心に解説します。

  1. Excelアニメーションの基礎

  2. グラデーション文字(Merry Christmas)の色変化アニメーション

  3. 雪が降るエフェクトの仕組み(既存コードの流用)

  4. クリスマスツリー照明の配置

  5. 照明の“ぼかしエフェクト”による瞬き表現

 Excel を「静的な表計算ソフト」ではなく“キャンバス”としてアニメーションを描くための考え方をまとめています。


1.Excelアニメーションの基礎


 まず、下記のような円のシェイプが回転移動するアニメーションをもとに、Excelアニメーションの基礎を説明します。


 動画ではスタートボタンとなる、「アニメーション実行」と「停止」ボタンが設置されて、「アニメーション実行」ボタンを押すと円シェイプが回転移動を開始し、「停止」ボタンで停止します。


 実際のコードの解説は下記の通りです。

Excelアニメーションの基礎コード
Excelアニメーションの基礎コード

上記図にもあるように、アニメーション処理は大きく 3 つのステップに分かれています。


① シェイプの参照と初期設定

まず、動かしたい円シェイプ(今回の例では名前「円」)を取得し、

回転の中心位置・半径・回転速度などのパラメータを設定します。


ここで設定した値が、後の座標計算で使用され、

「どの位置を中心に、どれくらいの大きさで動くか」が決まります。


② 停止トリガーを OFF にしてアニメーション開始

アニメーションを制御するために、

PriJudgeStop という 停止用フラグ(Boolean) を用意しています。

  • アニメーション開始時:False

  • 停止ボタンが押されたら:True


という仕組みで、アニメーションの On/Off を管理します。


開始時にこのフラグを必ず False にしておくことで、

Do-Loop のループ処理が正しく走り続けるようになります。


③ Do-Loop によるアニメーション処理

メインとなる処理は Do-Loop の繰り返し です。

この 1 回のループが「1 フレーム(1 コマ)」に相当します。


ループの中では下記の処理が順番に実行されています。



次にDo-Loopの中身のアニメーションの処理について詳しく説明します。

Excelアニメーションの基礎コードのDo-Loopの中身
Excelアニメーションの基礎コードのDo-Loopの中身

図の赤枠部分の処理は、Do 〜 Loop の中で

  1. シェイプの移動・変形

  2. 画面への反映(DoEvents)

  3. 停止処理の判定

という 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 は一切使っていません。

Merry Christmasの文字色の設定
Merry Christmasの文字色の設定

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 つの関数に分けて行っています。どちらも中身の構造はほとんど同じで、


  1. R・G・B それぞれについて、最小値〜最大値の範囲を決める

  2. 三角関数(Cos)を使って、その範囲の中を 周期的に行ったり来たり させる

  3. 最後に 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アニメーション「雪が降る」 をベースにしています。

 詳細は下記リンクを参考にしてください

Excelアニメーション「雪が降る」

4. クリスマスツリーの照明配置

ツリーの照明は、小さな円シェイプを多数配置して作っています。

考え方としては、

  1. 三次元空間に“円錐”を仮想的に作る

  2. その円錐の表面上に照明を等間隔で配置する

  3. それを Excel シート上の 二次元座標に投影する

という手順です。

Excel 上は平面ですが、3D 座標を計算したうえで「X 軸(左右)」「Y 軸(高さ)」に変換することで、立体感のある照明ツリーを表現しています。


 こちらの計算には三次元ベクトルや回転行列を使っていますが、非常に長くなるので今回は割愛いたします。



5. ぼかしエフェクトで照明の“瞬き”を再現

照明の柔らかな光らしさは、シェイプに設定できる ぼかし効果(Soft Edge) の

「ぼかしサイズ」をアニメーション中に少しずつ変化させることで表現しています。


照明の瞬きの表現方法
照明の瞬きの表現方法

Excel の図形書式では、各シェイプごとに[図形の書式設定 → ぼかし → サイズ]という項目が用意されています。通常は固定値を設定するだけの機能ですが、今回はこの ぼかしサイズの値そのものを VBA から動的に変更 しています。


アニメーション処理では、各コマごとに

  1. 現在のフレーム番号に応じて “ぼかし量” を計算する

  2. 計算した値をシェイプの SoftEdge.Radius に代入する


という流れで、ぼかしの強弱をゆっくり揺らしています。

使っているのは単純な三角関数(周期関数)で、これにより

  • 明るく見える瞬間

  • ふわっと光が弱まる瞬間

  • また明るくなる瞬間


という、自然な“呼吸感”のある光の変化が生まれます。

ぼかし量を直接アニメーションさせることで、静止した円形シェイプでも LED の点滅や幻想的な照明の瞬き のような表現を実現できます。


まとめ

今回のアニメーション作品では、

  • 三角関数による周期表現

  • グラデーション色の時間変化

  • 3D → 2D の投影計算

  • シェイプのぼかし効果のアニメーション化


といった Excel でも実現できる多彩な表現を組み合わせています。

Excel VBA は業務自動化だけでなく、このような インタラクティブ作品・演出制作にも応用可能です。

今後も VBA を使った遊び心のある作品や、技術的な仕組みを紹介していきますので、ぜひお楽しみに。

 
 
 

​タグ一覧

配列処理(44)

階層化フォーム(33)

ファイル操作(23)

シート・セル操作(11)

コード自動生成(10)

ユーザーフォーム(8)

図形操作(7)

GAS(5)

アニメーション(5)

技術解説(4)

副業(4)

考え方(4)

条件付き書式(4)

イミディエイトウィンドウ(3)

Enum(3)

Googleスプレッドシート(3)

ココナラ(3)

クリップボード(3)

介護(3)

イベントプロシージャ(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Excel(2)

Excel小ネタ(2)

数学(2)

Outlook(2)

文字列操作(2)

小説(2)

HTML(2)

JavaScript(2)

日報(2)

カレンダー(2)

パズル(2)

ステータスバー(1)

開発効率化(1)

コード解析(1)

静的変数(1)

OneDrive(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

六角形(1)

Excel遊び(1)

ボウリング(1)

時計(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

イベント(1)

溶接ロボット(1)

VBA(1)

脱Excel(1)

Discord(1)

ECサイト(1)

CSV(1)

楽天(1)

保育士(1)

シフト表(1)

CDP(1)

楽天市場(1)

経理(1)

javascript(1)

医療(1)

文書作成(1)

LookerStudio(1)

シフト(1)

セキュリティ(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

罫線(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

開発事例(1)

Softex-Celware

Invoice registration number: T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware. Powered by Wix.com.

bottom of page