EXCEL マクロ( VBA )で アニメーション をつくる

EXCELマクロ

EXCEL マクロ( VBA )を使って、EXCEL のセルを自動的に塗りつぶして絵を作ったり、その絵を動かしてみる( アニメーション )実験を報告します。何かに役立つかって?うーん、思いつきません 笑。

方法はいろいろあります。例えば、複数の絵を別シートに記載しておき、パラパラ漫画のようにそのシートを差し替えていくやり方。また、特定のセルに目印(値)を入れておき、ループで各セルの値を調べて、条件に合う色を表示する方法。また特定の色つきセルを上下左右にある法則性を入れてあげて動かす方法など。それぞれ特色があり、面白いものが作れるような気がします。

このサイトでは完成品だけではなく、途中経過や作品の基礎(元)となる基本的な動きや部品、途中経過(習作のようなもの)も公開していく予定です。(ただ、作者の気まぐれと時間次第なので体系的な整理は難しいかも)

いろいろ作ったものを組み合わせていくと、こんな感じの動画ができます。

この後、いろいろ紹介していきます。

基本編

動画の数が多くなってきましたので、基礎編は分けました。ご興味ある方は下記ページをご覧ください。

こんな動きの紹介をしています。短いものばかりですが、ここのサイトの EXCEL アニメーションプログラムの全ての基礎になってますよ。

  • 基本その1(縦線)
  • 基本その2(クロス)
  • 基本その3(ドット アニメーション )
  • 基本その4(上から下にジグザグ移動)
  • 基本その5(右下に向かいつつ、上左のセルを塗る)

ちょっと応用編

こちらも動画の数が多くなってきましたので、「ちょっと応用編」というように分けてみました。ぜひ下記ページをご覧ください。

次のような動画を紹介しています。基礎編に比べると動きやビジュアルが凝ったものになってます。

  • 渦巻
  • 渦巻(色つき)
  • 渦巻(色つき+グラデーション)
  • 似顔絵
  • 題字(セル左→右へ文字を浮き出す)
  • へのへのもへじ
  • 同心円(花火)
  • 花火(打ちあがるところ)

ちょっと作品風

「ちょっと応用編」まででいろんな動き、可能性が見えましたので、ここでは動きに簡単なシナリオを付けてみました。このシナリオ作りは大事ですね。初めから完成したシナリオを作るのは難しいので、作りながらいろいろいじって変えてみています。こういったところも吹き出し下に補足していきますのでご興味ある方はお読みください。

影絵(じわじわ炙り出し)

基本その5(右下に向かいつつ、上左のセルを塗る)を応用したものです。よく見ていただくと、右下にカーソルが向かっていく中、その上と左のセルが着色されていく様子がわかると思います。

絵だけだと寂しいので、下に字も入れたけどちょっと粗くなっちゃったよ。馬の絵はフリー素材のものを使いました。

裏話

馬の絵をセルで表すのに時間がかかってしまいました。絵を貼った後、透明度を上げるとマス(セル)に色付けしやすのですが、全部手作業で行ったらクタクタに。。大晦日の日に思い立って始めたのですが、何やってんだよ、と少々後悔。。

門松(ドミノ倒し絵風)

上の「影絵」をさらに応用して、通過時に11色の色が浮き出るようにしてみました。

これも手作りで、下絵作りに時間がかかっちゃいました。今度は絵をセルに変換できるようなツールを探そうっ、と

裏話

色を変えるところは、同系色で薄い色と濃い色を組み合わせるのがコツです。EXCELの置換(Ctrl+h)機能を使えば色の置換も簡単にできます。絵の元はフリー素材です。ありがとうございます。

花火(打ち上げから大輪)

「ちょっと応用編」に載せた2つを組み合わせると、、ヒュ~、っと打ちあがった後、花が咲くような感じにできます。

2つのマクロをcallで続けてます。2つめの呼び出し前にちょっと間を空けるといい感じになります。

カウントダウン(3、2、1)

数字表示と見せかけタイマーを使って、カウントダウンを表すようにしました。

いつくかのマクロを組み合わせてました。円を回すところは少々凝っています。ふぅ

数式(グラフ)を動かす

こちらは簡単な数式(関数)グラフの動きを表したのです。xを‐100から+100にカウントUPしたときのyの動きを表します。

全部で5個の数式(関数)を続いて描いてます。わかりますかね?

正解を知りたい方は開いてね

正解は表示順に、
①y=-x
②y = (x ^ 2) / 40
③y=10*(sin (x*10)) (x*10はラジアンに変換)
④ ①と③の合成
⑤ ②と③の合成。ただし、③のy座標を20倍
合成は、本当はもっと元の線回りをうねうねさせたかったのですが、調整しきれていません。
sinカーブはxをラジアン変換しないといけなく、少々悩んでしまいました。
sinカーブ(三角関数)の動きは面白いので、今後いろいろな効果に使えそうな気がします。

跳ねながらゴールを目指す

上にある花火(打ちあがるところ)と基本その4(上から下にジグザグ移動)元に、点を4方向の斜めに移動させ、外壁や障害物(壁)に当たったら跳ねて方向を変える、というロジックを組み込みました。

これを応用すると、ブロック崩しもできそうな気がします。検討してみます。

もう少し知りたい方

基本的には斜め方向の移動なので、右上、右下、左上、左下の4つがあります。
壁への当たり方についても、それぞれ4(2+2)パターンあります。
例えば右上の動きだったら、上の壁に当たる場合と右の壁に当たる場合とでは跳ね返りの方向が変わります。また、壁の角にあたる場合でも、その壁が凸の場合と凹とがありますが、跳ね返り方はこの2つは同じで進行方向と真逆(行列の方向を反転)になります。
文字で書くとちょっとわかりにくいですね。そのうち絵を入れて解説します。また、実際に少しずつコードを書いていって動かしてみた方がわかりやすいと思います。
なお、デバック途中ではコードの一部に間違いがあって、物理的にはありえない動きが出たりして面白かったです。

跳ねながら出口に向かう・2 

冒頭の動画のショート動画バージョンです。

とにかく、跳ね回ればいつか出口に行けるんじゃないか、ってことで。

車輪が回りながら落ちていく

車輪の回転の向きと進み方をクラスで定義し、進む動作、落ちる動作、向き反転、壁突破などを盛り込みました。

跳ね返りの音はマクロ(VBA)中にBeep音を組み込みましたが、それ以外の音はフリー音源から合成したもです。マクロだといろんな音の再生タイミングがうまくとれなくて・・

ドラム缶を上から転がしてみた(ショート動画)

実は上の「車輪が回りながら落ちていく」と内容はほぼ同じなのですが、階数や形を変え、ショート動画にしてみました。

車輪(ドラム缶)は1つ進むと3方向に変化させ、前に邪魔があったら戻るかそれを消すか、というようにプログラム組みましたが、描画速度の事情でうまく映らないところが発生。調整に苦労しちゃいました。

その他編

この実験は「セルに色を入れていく」、を基本にしていますが、他でも図形や画像部品を用いてアニメーションを作ることもできます。割と手軽なのでちょこちょこ作ったら紹介していきます。

セリフつき4コマ漫画風(音声もあり)

4つの画像をタイマーで切り替え、それに即したセリフ図形とテキストを入れたものです。セリフは一度に表示するのでは面白くないので、一字ずつ表示するようにしました。また、セリフ表示後にテキスト読み上げ機能を組み入れています。

画像の切り替えとセリフ表示の同期がなかなかうまくいかなくて苦労しました。Application.OnTime を使ってます。


新たに作ったら、どんどん追加していきますよ。溜まってきましたら解説ページも作りますかね。

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