| 
    
     |  | ■ ワークシートでアニメーション! 
 「エクセルのワークシート上の任意の場所でアニメーションを動かしたい!」
 業務用のアプリケーションや趣味のフリーソフトの開発でそのような要望を持たれた方は少なくないと思います。
 
 エクセルのワークシート上でGIFアニメを再生できれば簡単なのですが…。残念ながらワークシート上でGIFアニメを再生するのは無理なようです。
 
 しかし、アニメーションを再生するのは実はそんなに難しいことではありません。ExcelVBAを使えば、簡単にあなたのワークシート上で、あらかじめ用意されたアニメーション画像を再生することが可能です。
 
 今回はExcel2003とExcel2007の両方で、ワークシート上に透過GIFの画像をアニメーション再生してみましょう。
 アニメーション用の透過GIF画像は、ご自身で用意してください。
 
 Excel2003までなら…
 
 Excel2003までなら、以下のマクロで簡単に任意の場所にGIF画像をアニメーション再生できます。
 
 
 Public Sub test()
 Dim WrkPicture(9) As Picture
 Dim i As Long
 For i = 0 To 9
 Set WrkPicture(i) = ActiveSheet.Pictures.Insert(LCase(ThisWorkbook.Path _
 & "\img\" & i & ".gif"))
 If i <> 0 Then
 WrkPicture(i - 1).Delete
 Set WrkPicture(i - 1) = Nothing
 End If
 Call Sleep (100)
 DoEvents
 Next i
 WrkPicture(i - 1).Delete
 Set WrkPicture(i - 1) = Nothing
 End Sub
 
 まず、アニメーション用の透過GIF画像を10枚用意します。GIF画像のファイル名は0.gif〜9.gifとします。
 次に実行するマクロブックのある場所に"img"というフォルダを作り、その中にGIF画像を格納します。
 これで準備は完了です。上記マクロを実行してみましょう。
 
 Excel2003までなら、アクティブセルのそばに用意されたGIF画像が連続して現れ、10枚目の画像が表示されたあと、画像が消えるはずです。
 
 
 マクロの中を詳しく見ていきましょう。
 
 まず、宣言部でAPIのSleep関数を定義しています。これは、アニメーションの再生にウェイトをかける必要があるためです。(ウェイトをかけないと、一瞬でアニメーションが再生され、わけがわかりません)
 今回は、0.1秒間隔(Call Sleep (100))で10枚の画像を表示させるので、アニメーションの再生時間は1秒になります。
 
 Pictureオブジェクトで定義した配列、WrkPicture(9)に用意したGIF画像を0.gifから順番に画像挿入していきます。
 WrkPicture(1)が挿入された時点で、その下にWrkPicture(0)がまだ残っています。これを消さないと、画像がどんどん上に重なっていきますので、2回目以降のループで消しています。
 
 わざわざこんなことをしているのは、このほうがアニメーションの再生が滑らかになるからです。
 (次の画像を重ねる前に下の画像を消すと、アニメーションがブチブチになります)
 もちろん忘れずに、DoEventsで画像更新をしてやる必要もあります。
 
 ループを抜けた後の画像クリアは必要に応じて、使い分けてください。画像をそのまま残すならこの部分の処理は必要ありません。
 
 さて、せっかくですので、ワークシートのセレクションチェンジイベントからCallさせてみましょう。
 
 |  |