EXCELマクロ( VBA )を使って、EXCELのセルを塗りつぶして絵を作ったり、その絵を動かしてみる( アニメーション )実験をしています。こんな感じです↓
このページでは、すべての動きの基礎としているロジックを紹介します。これらを組み合わせていくと、いろいろ面白いものが作れそうです。
各アニメーションの「VBAコード(フルコード)」を公開しました!コピペでそのまま動きます。
各項目の「▼コピペ用VBAコード」を開き、VBE(標準モジュール)に貼り付けるだけで手元のExcelで即座に動かせます。
※実行の前にセルのサイズの調整や必要に応じて数字のプリセットをお願いします。
基本の前に
「ExcelはPCに入っているけど、そもそもマクロを使ったことないし、作り方も全くわからない」という方、以下に初歩をまとめました。開発のためのメニューの表示の仕方から記載してますので、「全く初めて」という方でも始められると思います。是非お読みください。

とても易しく記載していますので是非一読ください。
エクセル アニメーション 基本その1(縦線)
ループを回して行を移動し、同じ列のセルの色付けをどんどん行っていくごくシンプルなものです。まずは上から下に色づけしていくものです。

P列の1行目~50行目を黒く塗りつぶします。面白いな、と感じた方は、【超入門】 Excel VBAで絵を動かそう!のページで詳しく解説してますので、是非ご覧ください!動かすときはセルに数字を入れるのをお忘れなく!
コピペ用VBAコード(クリックで開く)
Option Explicit
Sub 縦に色付け()
' 変数の準備(整数を入れる箱を作ります)
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim max_col As Integer
Dim itrv_num As Integer
Dim tmp As String
'横セルの制限
max_col = 50
'繰り返しの階数
n = 50
j = 1
m = 1
'黒塗りしたいセルにあらかじめ数字1を入れてください
'縦の処理
For i = 1 To n
'1行処理の度に、0.05秒の待ち時間を置く
Application.Wait [Now() + "00:00:00.05"]
For j = 1 To max_col
If Cells(i, j).Value = 1 Then
Cells(i, j).Interior.Color = RGB(0, 0, 0)
End If
Next
Next i
End Sub
エクセル アニメーション 基本その2(クロス)
縦(上から下)に色付けした後、横(左から右)に色をつけていくものです。

これも結構シンプル。下のコードを使って再現する場合は、縦方向のセルに1を、横方向のセルに2を入れてみてください。
コピペ用VBAコード(クリックで開く)
Option Explicit
Sub 色塗_クロス()
'--------------------------------------------------
' 設定値の定義
'--------------------------------------------------
Dim maxRow As Long, maxCol As Long
maxRow = 50 ' 縦のセル数
maxCol = 50 ' 横のセル数
Dim i As Long, j As Long
Dim currentCell As Range
'--------------------------------------------------
' 1. 縦方向の走査(1行ずつ上から下へ:値が 1 のセルを黒塗り)
'--------------------------------------------------
For i = 1 To maxRow
' 待機時間(0.2秒間隔) & 画面更新の許可
Application.Wait [Now() + "00:00:00.2"]
DoEvents
For j = 1 To maxCol
Set currentCell = Cells(i, j)
If currentCell.Value = 1 Then
With currentCell
.Interior.Color = RGB(0, 0, 0)
.Value = ""
End With
End If
Next j
Next i
'--------------------------------------------------
' 2. 横方向の走査(1列ずつ左から右へ:値が 2 のセルを黒塗り)
'--------------------------------------------------
For j = 1 To maxCol
' 待機時間(0.2秒間隔) & 画面更新の許可
Application.Wait [Now() + "00:00:00.2"]
DoEvents
For i = 1 To maxRow
' Cells(行, 列) なので Cells(i, j) に修正
Set currentCell = Cells(i, j)
If currentCell.Value = 2 Then
With currentCell
.Interior.Color = RGB(0, 0, 0)
.Value = ""
End With
End If
Next i
Next j
End Sub
エクセル アニメーション 基本その3(ドット アニメーション )
上から下に点(といっても黒塗りセル)が移動するように見せるものです。ちなみに、黒塗りしたセルを次のループで消していきます。

ループの途中で時間を止めるようにしました。そうしないと速すぎて動きが追えないのです。
下記はご自分の好きな位置を指定してください。
startRow = 2 ‘ 開始行
endRow = 50 ‘ 終了行
targetCol = 10 ‘ 対象の列(10列目 = J列)
コピペ用VBAコード(クリックで開く)
Option Explicit
Sub ドット移動()
'--------------------------------------------------
' 設定値の定義
'--------------------------------------------------
Dim startRow As Long, endRow As Long, targetCol As Long
startRow = 2 ' 開始行
endRow = 50 ' 終了行
targetCol = 10 ' 対象の列(10列目 = J列)
Dim i As Long
Dim currentCell As Range, prevCell As Range
'--------------------------------------------------
' 縦方向のアニメーション(上から下へドットが移動)
'--------------------------------------------------
For i = startRow To endRow
' 待機時間(0.1秒間隔) & 画面更新の許可
Application.Wait [Now() + "00:00:00.1"]
DoEvents
Set currentCell = Cells(i, targetCol)
Set prevCell = Cells(i - 1, targetCol)
' 1. 現在のセル(値が 1 の場合)を黒塗りにして値を 0 に変更
If currentCell.Value = 1 Then
With currentCell
.Interior.Color = RGB(0, 0, 0) ' 背景色:黒
.Font.Color = RGB(0, 0, 0) ' 文字色:黒
.Value = 0
End With
End If
' 2. 直前のセル(値が 0 の場合)を色なしに戻して値を 1 に復元
If prevCell.Value = 0 Then
With prevCell
.Interior.ColorIndex = xlNone ' 塗りつぶしなし
.Font.Color = RGB(255, 255, 255) ' 文字色:白
.Value = 1
End With
End If
Next i
End Sub
エクセル アニメーション 基本その4(上から下にジグザグ移動)
基本2の応用で、上から下への移動に横の移動を加えたものです。あるところまで行くと横移動は逆向きにしています。

ロジックはそんなに複雑ではないよ!動きが出るとつい目で追っちゃいますね。
事前にはセルの大きさだけ揃えてもらえれば、あとはマクロを実行するだけです。
コピペ用VBAコード(クリックで開く)
Option Explicit
Sub 縦ジグザグ_自動スクロール()
'--------------------------------------------------
' 設定値の定義
'--------------------------------------------------
Dim totalRows As Long ' 描画する全体の行数
Dim scrollStartRow As Long ' スクロールを開始する行数
Dim baseCol As Long ' ジグザグの中心となる列(15列目 = O列)
totalRows = 200
scrollStartRow = 30
baseCol = 15
Dim i As Long ' 現在の行インデックス
Dim j As Long ' 中心からの横オフセット量
Dim intervalGroup As Long ' 往復周期グループ
Dim scrollRowIndex As Long ' スクロール位置カウンター
j = 0
scrollRowIndex = 1
'--------------------------------------------------
' スタート位置(1行目・16列目)を黒塗り
'--------------------------------------------------
Cells(1, baseCol + 1).Interior.Color = RGB(0, 0, 0)
'--------------------------------------------------
' ジグザグ軌跡の描画 & スクロール処理
'--------------------------------------------------
For i = 1 To totalRows
' 待機時間(0.05秒間隔) & 画面更新の許可
Application.Wait [Now() + "00:00:00.05"]
DoEvents
' ------------------------------------------------
' 横方向の位置(オフセット j)を計算
' (i + 4) \ 10 で10行ごとの周期グループを算出
' 偶数グループなら右移動(+1)、奇数グループなら左移動(-1)
' ------------------------------------------------
intervalGroup = (i + 4) \ 10
If intervalGroup Mod 2 = 0 Then
j = j + 1 ' 右へ移動
Else
j = j - 1 ' 左へ移動
End If
' セルを黒塗り描画
Cells(i, baseCol + j).Interior.Color = RGB(0, 0, 0)
' ------------------------------------------------
' 指定行数を超えたら画面を1行ずつ上スクロール
' ------------------------------------------------
If i > scrollStartRow Then
scrollRowIndex = scrollRowIndex + 1
ActiveWindow.ScrollRow = scrollRowIndex
End If
Next i
End Sub
エクセル アニメーション 基本その5(右下に向かいつつ、上左のセルを塗る)
セルを右下に1つずつ移動させつつ、移動直後の位置の上側、左側を塗りつぶしていくものです。

この動きを応用すると、ドミノ倒しで絵を浮き出すようなことができる気がします。そのうち、挑戦してみます
コピペ用VBAコード(クリックで開く)
Option Explicit
Sub 右下に拡大展開()
'--------------------------------------------------
' 設定値の定義
'--------------------------------------------------
Dim maxSize As Long
maxSize = 50 ' 展開する最大サイズ(50×50マス)
Dim i As Long ' 現在のステップ(正方形のサイズ)
Dim j As Long ' 展開中の軸オフセット
'--------------------------------------------------
' スタート位置(1行1列目)を黒塗り
'--------------------------------------------------
Cells(1, 1).Interior.Color = RGB(0, 0, 0)
'--------------------------------------------------
' 対角線に沿って右下方向へ領域を拡大
'--------------------------------------------------
For i = 2 To maxSize
' 待機時間(0.1秒間隔) & 画面更新の許可
Application.Wait [Now() + "00:00:00.10"]
DoEvents
' 現在のステップ(i, i) を起点に、上方向(縦軸)と左方向(横軸)を塗りつぶし
For j = 1 To i
' 上方向( i 列目の 1 ~ i 行目を黒塗り)
Cells(j, i).Interior.Color = RGB(0, 0, 0)
' 左方向( i 行目の 1 ~ i 列目を黒塗り)
Cells(i, j).Interior.Color = RGB(0, 0, 0)
Next j
Next i
End Sub
基礎編も新たに作ったら、どんどん追加していきますよ。次は応用編です。

ちばらぼおすすめ:
コードを書きながらアニメーションの動きを確認するには、PC本体+拡張モニターの2画面構成にするのが圧倒的に便利です。私自身も27インチの大型モニターを繋いで開発していますが、拡張モニター側にVBE(コード画面)、PC側にExcel(シート画面)と並べており、ウィンドウを切り替える必要がありません。大型モニターを導入する場合は、強いこだわりがなければ以下のようなコスパの高い定番モデルがおすすめです(これは一例なのでお好みでよいと思います)。
▼ EXCELアニメーション ページのご案内



コメント