Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3479 / 13644 ツリー ←次へ | 前へ→

【61945】エクセル上で簡単なgif動画を作りたい あいこ 初心者 09/6/13(土) 22:58 質問[未読]
【61946】これを見てもフォルダ作る所とか分かりませ... あいこ 初心者 09/6/13(土) 23:01 回答[未読]
【61947】Re:これを見てもフォルダ作る所とか分かり... かみちゃん 09/6/13(土) 23:09 発言[未読]
【61948】Re:これを見てもフォルダ作る所とか分かり... neptune 09/6/14(日) 9:22 発言[未読]

【61945】エクセル上で簡単なgif動画を作りたい
質問  あいこ 初心者  - 09/6/13(土) 22:58 -

引用なし
パスワード
   ↑エクセルで簡単なアニメーションを再生し続けたい
どーもやり方がチンプンカンプン

詳しく初心者でも分かる様に
誰か優しい方教えてくださいスイマセン

【61946】これを見てもフォルダ作る所とか分かりま...
回答  あいこ 初心者  - 09/6/13(土) 23:01 -

引用なし
パスワード
   ■ ワークシートでアニメーション!

「エクセルのワークシート上の任意の場所でアニメーションを動かしたい!」
業務用のアプリケーションや趣味のフリーソフトの開発でそのような要望を持たれた方は少なくないと思います。

エクセルのワークシート上で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させてみましょう。

【61947】Re:これを見てもフォルダ作る所とか分か...
発言  かみちゃん E-MAIL  - 09/6/13(土) 23:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>■ ワークシートでアニメーション!

以下のことかと思いますが、
http://home.att.ne.jp/zeta/gen/excel/c04p23.htm

どのあたりがわかりませんか?
わからないところをポイントを絞ってみてはいかがでしょうか?

【61948】Re:これを見てもフォルダ作る所とか分か...
発言  neptune  - 09/6/14(日) 9:22 -

引用なし
パスワード
   ▼あいこ 初心者 さん:
こんにちは

引用元のサイトでは明確に著作権を主張し、その上で
>事前に許可なく、当サイトの一部または全部を転載することを禁じます。
と、明記しています。

もし無断引用なら、犯罪と言われても仕方のない事をしています。
・・・というか犯罪です。
もし↑なら引用した投稿を削除すべきです。
もし、許可を得ているなら、その旨も記すべきです。

初心者だろうが、ベテランだろうが関係のない事です。

3479 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free