【無料コード付き】 EXCEL VBA で図形(shape)を使って4コマ アニメーションを作る

「 Excel =表計算やデータ管理だけの堅いソフト」だと思っていませんか? 実は、Excel VBA(マクロ)が持つ「図形(Shape)操作機能」と「タイマー制御」を組み合わせると、Excel の画面上で**セリフがシュシュシュッと流れる4コマアニメーション**を作ることができるんです。

今回は、初心者でもブログのコードをコピペするだけで一発で動かせる「入門編(Ver.1)」のプログラムを用意しました。

ご自身で用意したお気に入りのイラストや写真(PNGやJPG)を使って、オリジナルの4コマを動かすことも簡単にできます。ぜひ最後までお読みください!

🎥 完成イメージと今回の仕組み

まずは、今回作成するプログラムの動きのイメージです。

1. 自動クリア: 実行ボタンを押すと、画面上の古い画像や吹き出しが一瞬でリセットされます。

2. 画像の自動配置: 1コマ目の画像が指定の位置にパッと表示されます。

3. タイピング演出: 画像の右上に吹き出しが出現し、セリフが1文字ずつ流れるように表示されます。

4. 4コマ連動: 数秒のインターバルを挟みながら、2コマ目、3コマ目、4コマ目と自動でページがめくられるように進んでいきます。

文字が流れる途中で、特定のキーワード(今回は「ヒット」「筋肉痛」など)の色や太さが自動で変わるプチ演出も仕込んでいます!

🛠️ 事前準備:ファイルと画像の配置

プログラムを動かす前に、1つだけ大切なルールがあります。

1. 新しい Excel ファイルをマクロ有効ブック(.xlsm)として保存します。

2. その Excel ファイルと「全く同じフォルダ」の中に、表示させたい4コマの画像(計4枚)を保存してください。 上記の動画で用いた顔の絵のサイズは、177×176ピクセルです。

⚠️ 注意1: ファイル名(拡張子)は、コード内の指定と完全に一致させておく必要があります(デフォルトでは `コマ1.png` ~ `コマ4.png` に設定しています)。

⚠️ 注意2: この時点で「内容がよくわからない」、という方は下記のサイトを一度ご覧ください。きっとわかるようになります。

【超入門】 Excel VBAで アニメーション を作ろう!ワクワクが止まらないプログラミングの第一歩
「仕事で エクセル は使っているけど、マクロとかプログラミングはちょっと……」そう感じている方、多いですよね?確かに Excel は計算ツールですが、実はこんな「遊び心」が詰まったツールでもあるんです。 ・セルを自由自在に色付けできる ・図…

コピペで動く!VBAソースコード

Excel の `Alt + F11` で VBA エディタを開き、「挿入」>「標準モジュール」を作成して、以下のコードをそのまま貼り付けてください。

#' Excel 2010以降(VBA7)を前提。32bit版でも64bit版でもこれで動きます
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub 四コマアニメーション上映()
    Dim base_path As String
    Dim frame As Integer
    Dim IntervalSeconds As Integer
    Dim NextTime As Date
    
    ' ==========================================
    ' 🛠️ 読者カスタマイズエリア(ここを自由に変えてね!)
    ' ==========================================
    
    ' 1. セリフの設定(4コマ分)
    Dim serifu(1 To 4) As String
    serifu(1) = "昨日は野球に行ったよ!"
    serifu(2) = "なんとヒットを2本も打った!"
    serifu(3) = "まあ、このくらいは当然ですが。"
    serifu(4) = "……でも、今日は全身筋肉痛。"

    ' 2. 画像ファイルの設定(4コマ分・同じフォルダ内のファイル名)
    Dim img(1 To 4) As String
    img(1) = "コマ1.png"
    img(2) = "コマ2.png"
    img(3) = "コマ3.png"
    img(4) = "コマ4.png"
    
    ' 3. 1コマの表示間隔(秒)
    IntervalSeconds = 4
    
    ' ==========================================
    
    ' マクロのExcelファイルと同じフォルダのパスを自動取得
    base_path = ThisWorkbook.Path & "\"
    
    ' 4コマをタイマーで順次セット
    For frame = 1 To 4
        NextTime = Now + TimeSerial(0, 0, (frame - 1) * IntervalSeconds)
        
        ' 実行するコマンドを作成してタイマーセット
        Application.OnTime NextTime, _
            "'個別コマ表示 " & frame & _
            ", """ & base_path & img(frame) & """" & _
            ", """ & serifu(frame) & """'"
    Next frame
End Sub

' 実際に1つのコマを描画するシステムマクロ
Sub 個別コマ表示(frame As Integer, pic_path As String, text As String)
    Dim ws As Worksheet
    Dim shp As Shape
    Dim lsp As Shape
    Dim i As Integer
    Dim current_text As String
    
    Set ws = ActiveSheet
    
    ' 1. 画面上の古い画像や吹き出しをクリア
    For Each shp In ws.Shapes
        If shp.Type = msoPicture Or shp.Type = msoAutoShape Then
            shp.Delete
        End If
    Next shp
    
    ' 2. 画像の配置(位置・サイズは一律固定で初心者にも安心)
    If pic_path <> ThisWorkbook.Path & "\" And Dir(pic_path) <> "" Then
        ws.Shapes.AddPicture Filename:=pic_path, LinkToFile:=False, SaveWithDocument:=True, _
                             Left:=30, Top:=50, Width:=180, Height:=180
    End If
    
    ' 3. 吹き出し(セリフ枠)の作成(画像の右上にゆったり配置)
    If text Like "*まあ*" Then
        Set lsp = ws.Shapes.AddShape(msoShapeCloudCallout, 180, 5, 220, 100) ' 雲型
        lsp.Adjustments.Item(1) = -0.2
    Else
        Set lsp = ws.Shapes.AddShape(msoShapeOvalCallout, 180, 5, 200, 90)   ' 楕円
    End If
    
    ' 吹き出しのデザイン調整(背景:白 / 線:黒)
    With lsp
        .Fill.ForeColor.RGB = RGB(255, 255, 255)
        .Line.ForeColor.RGB = RGB(0, 0, 0)
        .Line.Weight = 1.5
    End With
    
    ' 4. セリフを一字ずつ流す演出(タイピング風)
    For i = 1 To Len(text)
        current_text = Left(text, i)
        
        With lsp.TextFrame.Characters
            .text = current_text
            .Font.Size = 11
            .Font.Name = "MS ゴシック"
            .Font.Color = RGB(0, 0, 0) ' まず流れてきた文字全体を「黒」にセット
        End With
        
        ' 特定のキーワードを目立たせる装飾(後述のシステムを呼び出し)
        Call 部分文字装飾(lsp, current_text, "ヒット", RGB(255, 69, 0), True)
        Call 部分文字装飾(lsp, current_text, "筋肉痛", RGB(0, 0, 255), True)
        
        ' 配置の真ん中寄せ
        lsp.TextFrame.HorizontalAlignment = xlHAlignCenter
        lsp.TextFrame.VerticalAlignment = xlVAlignCenter
        
        ' 流れる速度の調整(100ミリ秒待機)
        DoEvents
        Sleep 100
    Next i
End Sub

' 特定の文字だけ色や太さを変える装飾システム
Private Sub 部分文字装飾(targetShape As Shape, fullText As String, keyword As String, colorRGB As Long, isBold As Boolean)
    Dim pos As Integer
    pos = InStr(fullText, keyword)
    If pos > 0 Then
        With targetShape.TextFrame.Characters(pos, Len(keyword)).Font
            .Color = colorRGB
            .Bold = isBold
        End With
    End If
End Sub

💡 【開発の罠】動かないときのトラブルシューティング

今回のマクロを開発するにあたり、 VBA 特有の「初心者から中級者までガチで引っかかるディープな罠」がいくつかありました。もしコピペしてエラーが出た場合は、ここをチェックしてみてください!

①「マクロが実行できません」と拒否される場合

Excel のセキュリティによって止められているか、または「マクロ名(プロシージャ名)に数字や記号を使っている」のが原因です。

VBA の仕様上、Sub 4コマ上映() のように先頭に数字を持ってきたり、Sub ▼コマ表示() のように記号を使ったりしたまま Application.OnTime(タイマー)で呼び出そうとすると、Excelがマクロを見失ってエラーになります。コード内はすべて「漢字」の安全な名前に整えてあります。

② 文字が一部しか映らない、または消えてしまう場合

一文字ずつ文字を増やすタイピング演出の途中、特定の文字に色を塗ると、Excelのフォーカスがバグって「それ以降の普通の文字」が透明(白)になってしまう現象があります。
本プログラムでは、文字が1文字増えるたびに「一回全体を黒文字にリセットしてから、キーワードを上書きする」という緻密な処理順序にすることで、この描画バグを回避しています。

✍️ コード内の調整ポイント

  • 読者が自分の画像やセリフに差し替えたい時に迷わないよう、🛠️ 読者カスタマイズエリア というコメント枠をコード内に明記しました。
  • ご自身がデバッグ中に格闘された「リアルなエラーと解決策」をトラブルシューティング(H3要素)として配置しました。これにより、同じ VBA エラーで検索してきたユーザーが、この記事に検索から辿り着きやすくなる(SEO強化)というメリットが生まれます。

ご自身のWordPress等のレイアウトに合わせて、適宜修正してご活用ください!

コメント

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