top of page

【Excelアニメーション】雪が降る 技術解説

前書き

 師走。寒くなってきました。

 そろそろ冬の贈り物が降りてくるころです。



概要(「雪が降る」のデモンストレーション)

 

 下記動画のようなExcelを利用したアニメーションを作成したので、今回はこちらの技術的な解説を行います。

「雪が降る」デモンストレーション

 

 雪の結晶が回転したり揺れたりしながら、等間隔で舞い降りてくるようなアニメーションです。


技術解説

 今回のExcelアニメーションの技術要素は次の通りです。1つずつ掻い摘んで解説していきます。

  • 雪の結晶のランダム作成

  • シェイプが動くアニメーション

  • 雪の落下の動き計算

  • 複数のシェイプ(雪の結晶)を同時に動かすアニメーション

  • 同時に音を鳴らす

  • 停止ボタン


雪の結晶のランダム作成

 こちらは動画で説明を作りました。

 

雪の結晶のランダム作成の動画説明

 

 動画に沿って説明すると次の通りです

①:セル範囲に「=IF(RAND()<0.3,1,"")」のような数式を利用して、特定の確率で「1 or 空白」が表示されるような数式を設定する。紹介している数式は「30%の確率で1になる」という感じ。

②:条件付き書式でセルの値が1の場合に「黒塗潰し」となるようにする。

③:セル範囲をリンク付き画像としてコピー。これを雪の結晶の最小単位となる。

④:雪の結晶の最小単位を上下にコピー反転して、2つを結合する。

⑤:結合した図形を60度ずつ5つ複製する。


④,⑤の部分はVBAで処理していますが、実際のコードは下記の通りです。詳しく見たい人は参照してもよいですが、めんどくさい人は飛ばして良いです。



シェイプが動くアニメーション

 

 アニメーションの基本操作は

「図形の移動や変形を実行」→「シート上で変形を反映」→「図形の移動や変形を実行」...

を繰り返すことです。

 実際の「雪が降る」の操作は下記画像の様になっていますが、この繰り返しをDo-Loopで延々と繰り返しています。


「図形の移動や変形を実行」は今回クラスモジュールで定義したメソッドを利用しています。(詳細は説明が大変になるので割愛)

「シート上で変形を反映」は「DoEvents」を実行します。環境にもよりますが処理を安定させるために3回実行しています。もしこのDoEventsを実行しないと、VBA処理が連続で動いてExcelがフリーズしてしまいアニメーションは出来ません。


シェイプが動くアニメーションのコード解説
シェイプが動くアニメーションのコード解説


雪の落下の動き計算

 雪の落下の動きは上下方向の移動、左右方向の移動、回転、X軸まわり回転の4つを変更しています。

 それぞれ初期パラメータをランダムに設定した後で、時間の経過とともに値が変化するようにしています。


・上下方向:等速で速度を設定

・左右方向:cos関数を利用して左右に揺れるように設定

・回転:一定の速度で回転するように設定。.Rotationプロパティを変更

・X軸回り回転:一定の速度で回転だが、ThreeD.RotationXプロパティを変更


雪の落下の動きの計算説明図
雪の落下の動きの計算説明図

 これらのランダム設定をいろいろ調整することで雪が舞い降りるような感じに表現を近づけています。


複数のシェイプ(雪の結晶)を同時に動かすアニメーション


 雪の結晶のシェイプはアニメーションの開始の前に20個だけ先に描画します。これは1つの雪の結晶の描画に時間がかかるので、アニメーションの途中で行わないことでアニメーションをスムーズにすることができます。


 描画された雪の結晶シェイプの専用に定義したクラスモジュール(clsSnow)に紐づけます。

 クラスモジュール1つ1つで別々にアニメーションを行うことで、複数のシェイプを同時にアニメーションが可能となります。

Excelで複数のシェイプを同時に動かす仕組み
複数のシェイプを同時に動かす仕組み

 


同時に音を鳴らす

 

 1つの雪の結晶が落ちてくるタイミングで音が再生されていますが、こちらはWindowsのシステムサウンドを再生しています。

システムサウンドの再生処理の部分
システムサウンドの再生処理の部分

 Windowsのシステムサウンドは「PlaySystemSound」という汎用プロシージャで簡単に呼び出せるように準備しています。システムサウンドはその音声ファイルのフルパスを毎回指定して実行する必要がありますが、「PlaySystemSound」ではシステムサウンド1つ1つにEnumで名前を与えており、引数で簡単に選択して好きな音を再生することができるようにしています。

 今回の処理ではこの引数のEnumを整数乱数として処理してランダムに音を再生しています。

 「PlaySystemSound」の詳細は下記コードを参照してみてください。


停止ボタン


 「雪が降る」ボタンの右側には「停止」ボタンがあります。

 アニメーションを途中で停止させるテクニックですが、こちらは次のような方法で可能となります。

①:Private変数でPriJudgeStopという変数名でトリガーを用意する。(変数名は自由でOK)

②:アニメーションのDo-Loop内でトリガーのPriJudgeStopがTrueになったらExitDoで抜ける処理を入れておく。またアニメーション(Do-Loop)の開始前にトリガーのPriJudgeStopは必ず False(トリガーOFF)にしておく。

③:「S_停止」プロシージャでPriJudgeStop = Trueの処理を行うようにする


 このテクニックがないとEscキーやVBE画面で停止を行わないと、永遠にアニメーションが動いてしまうので、Excelでアニメーションを構築する上では欠かせないテクニックです。

停止ボタンの仕組み
停止ボタンの仕組み

コメント

5つ星のうち0と評価されています。
まだ評価がありません

評価を追加

​タグ一覧

配列処理(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

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page