【完成アニメ多数公開中】EXCELでアニメーションをつくる 基礎編

EXCELマクロ( VBA )を使って、EXCELのセルを塗りつぶして絵を作ったり、その絵を動かしてみる( アニメーション )実験をしています。こんな感じです↓

このページでは、すべての動きの基礎としているロジックを紹介します。これらを組み合わせていくと、いろいろ面白いものが作れそうです。

各アニメーションの「VBAコード(フルコード)」を公開しました!コピペでそのまま動きます。
各項目の「▼コピペ用VBAコード」を開き、VBE(標準モジュール)に貼り付けるだけで手元のExcelで即座に動かせます。
※実行の前にセルのサイズの調整や必要に応じて数字のプリセットをお願いします。

基本の前に

「ExcelはPCに入っているけど、そもそもマクロを使ったことないし、作り方も全くわからない」という方、以下に初歩をまとめました。開発のためのメニューの表示の仕方から記載してますので、「全く初めて」という方でも始められると思います。是非お読みください。

【超入門・コード付き】 Excelでアニメーションを作ろう!ワクワクが止まらないプログラミングの第一歩
Excelでアニメーションが作れる?プログラミング超初心者向けに、VBAの設定からコピペで動くサンプルコード、実行ボタンの作り方まで丁寧に解説!使い慣れたExcelを「遊び」に変えるワクワクな第一歩を踏み出しましょう!

とても易しく記載していますので是非一読ください。

エクセル アニメーション 基本その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


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

EXCELでアニメーションをつくる ちょっと応用編
Excel VBA(マクロ)のセル塗りつぶし制御で、渦巻や花火、文字描画などの応用アニメーションを紹介します。作り方のTipsもあります。ループ処理や条件分岐を組み合わせた少し複雑な動きのロジックと実践アイデアでこんなものができます。

ちばらぼおすすめ:

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

▼ EXCELアニメーション ページのご案内

Excelで動くアニメーションの作り方【動画・総合カタログ】
標準マクロ(VBA)を使ってExcelシートで動くアニメーションの作り方を解説!サンプルコードや実際の動画を多数公開している総合カタログです。初心者向けのセル描画から図形(Shape)を動かす手順まで一挙紹介。作成例をすぐ確認したい方はこちら!
【完成アニメ多数公開中】EXCELでアニメーションをつくる 基礎編
Excel VBAで動くアニメーションの基本パターンをまとめたカタログページ!縦線やジグザグ移動、ドットアニメなど、動きの基礎ロジックとアニメ作品を一覧で紹介。プログラムのヒントや詳細コードページへのリンクも掲載中!
EXCELでアニメーションをつくる ちょっと応用編
Excel VBA(マクロ)のセル塗りつぶし制御で、渦巻や花火、文字描画などの応用アニメーションを紹介します。作り方のTipsもあります。ループ処理や条件分岐を組み合わせた少し複雑な動きのロジックと実践アイデアでこんなものができます。

コメント