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

EXCELマクロ

EXCEL マクロ( VBA )を使って、EXCEL のセルを塗りつぶして絵を作ったり、その絵を動かしてみる( アニメーション )実験です。このページでは、すべての動きの基礎としているロジックを紹介します。これらを組み合わせていくと、いろいろ面白いものが作れそうです。

基本その1(縦線)

ループを回して行を移動し、同じ列のセルの色付けをどんどん行っていくごくシンプルなものです。まずは上から下につけてみてます。

P列の1行目~50行目を黒く塗りつぶします。

プログラムのヒント

特定のセル(i,j)を黒く塗りつぶすのは、マクロの中に
 Cells(i,j).Interior.Color = RGB(0, 0, 0)
と記載すればできますよ。(他にも方法はあります)
縦方向に塗りつぶしを進めたいなら、ループを使います。たとえば
 for i=1 to 50
 Cells(i,5).Interior.Color = RGB(0, 0, 0)
next
これで、5列目のセルの1行~50行が黒く塗りつぶせます。
そんなに難しくないですね。

基本その2(クロス)

縦(上から下)に色付けした後、横(左から右)に色をつけていくものです。

これも結構シンプル。

プログラムのヒント

基本その1では縦方向にループを回しました。
基本その2では、縦方向のループの後に横方向のループを回しています。
 for i=1 to 50
 Cells(i,5).Interior.Color = RGB(0, 0, 0)
next

 for j=1 to 50
 Cells(5,j).Interior.Color = RGB(0, 0, 0)
next
こうすれば、セル位置(5,5)がクロスする塗り絵ができますね。そんなに難しくはありません。
RGB関数は、いろいろ値を変えれば別の色が出せますよ。

基本その3(ドット アニメーション )

上から下に点(といっても黒塗りセル)が移動するように見せるものです。ちなみに、黒塗りしたセルを次のループで消していきます。

ループの途中で時間を止めるようにしました。そうしないと速すぎて動きが追えないのです。

プログラムのヒント

セルを黒く塗りつぶすのは、
 Cells(i, j).Interior.Color = RGB(0, 0, 0)
で、できますが、色を戻すのは、
Cells(i, j).Interior.ColorIndex = 0
で、できます。これは無色にする方法で、白で塗るなら、
Cells(i, j).Interior.Color = RGB(255, 255, 255)
でOK。場面に応じて使い分けるといいですよ。
また、最近のPCは処理性能がよいので、この色変えを一気にすると色の付いたセルが移動することを目視するのが大変困難になります。このため、上の動画のプログラムは、わざわざループ中にタイマーをセットし、途中で一時停止するようにしています。
タイマーのセット方法もいろいろありますが、この中では次の分を使っています。
Application.Wait [Now() + “00:00:00.1”]
ループ中のどこに埋め込めばいいのか、は自分で試してみると効果がある場面と無い場面がわかっていいですよ。

基本その4(上から下にジグザグ移動)

基本2の応用で、上から下への移動に横の移動を加えたものです。あるところまで行くと横移動は逆向きにしています。

ロジックはそんなに複雑ではないよ!動きが出るとつい目で追っちゃいますね。

プログラムのヒント

右向きと左向きの切り替えは、ループカウンタ(i)を横幅(ここでは10)で割った商が偶数か奇数かで判定できるようにしています。こんな感じ(実際は少しだけ違います)。
m = i \ 10
If m Mod 2 = 0 Then ‘偶数
j = j + 1 ‘右
Else ‘奇数
j = j – 1 ‘左
End If
Cells(i, j).Interior.Color = RGB(0, 0, 0)

基本その5(右下に向かいつつ、上左のセルを塗る)

セルを右下に1つずつ移動させつつ、移動直後の位置の上側、左側を塗りつぶしていくものです。

この動きを応用すると、ドミノ倒しで絵を浮き出すようなことができる気がします。そのうち、挑戦してみます

プログラムのヒント

「ループで斜め下に移動し、Cells(i, i)のセルの上部と左部を色付けしていく」というものです。
ループは入れ子になりますね。
For i = 2 To max_col
For j = 1 To (i – 1)
‘上部の色付け
Cells(i – j, i).Interior.Color = RGB(・・・
  ’左部の色付け
Cells(i, i – j).Interior.Color = RGB(・・・
Next j
Next i
こんな感じです。


基礎編も新たに作ったら、どんどん追加していきますよ。

コメント

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