GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  ワークシート上でアニメーションを表現してみよう!
 
■ ワークシートでアニメーション!

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

エクセルのワークシート上でGIFアニメを再生できれば簡単なのですが…。残念ながらワークシート上でGIFアニメを再生するのは無理なようです。

しかし、アニメーションを再生するのは実はそんなに難しいことではありません。ExcelVBAを使えば、簡単にあなたのワークシート上で、あらかじめ用意されたアニメーション画像を再生することが可能です。

今回はExcel2003とExcel2007の両方で、ワークシート上に透過GIFの画像をアニメーション再生してみましょう。
アニメーション用の透過GIF画像は、ご自身で用意してください。

Excel2003までなら…

Excel2003までなら、以下のマクロで簡単に任意の場所にGIF画像をアニメーション再生できます。

' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−−−−−−−
Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long)
' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−−−−−−−

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させてみましょう。

' ワークシートモジュールに記述ここから −−−−−−−−−−−−−−−−−−−−−−−
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Call test
End Sub
' ワークシートモジュールに記述ここまで −−−−−−−−−−−−−−−−−−−−−−−

これで、Excel2003までなら、アクティブセルを変更するたびに、アクティブセルのそばでアニメーション画像を再生してくれるはずです。



Excel2007だとどうなる?

さてこのマクロブックを、Excel2007の互換モードで開いてみましょう。
マクロを実行してみるとすぐにわかりますが、アニメーションの表示位置がExcel2003とは異なります。
Excel2003ではアクティブセルの位置に画像を挿入してくれたのに、Excel2007ではアクティブセルとは無関係に、ワークシートの左上部に表示されます。
どうも、Excel2007では画像の挿入に関する内部の仕組みが変わってしまったようです。
まあ、この場合、
  WrkPicture(i).Top = Selection.Top
  WrkPicture(i).Left = Selection.Left
を追加して、画像の表示位置を指定することもできますが、プログラムの実行速度が遅いと、移動させる画像が残像になって表示され大変見苦しくなってしまいます。



ここで、もうひとつのワークシート上で画像をアニメーションさせる方法をご紹介します。

Public Sub test()
Dim WrkRange As ShapeRange
Dim i As Long
  For i = 0 To 9
    Set WrkRange = ActiveSheet.Shapes.Range("animation")
      WrkRange.Fill.UserPicture LCase(ThisWorkbook.Path _
                                & "\img\" & i & ".gif")
    Set WrkRange = Nothing
    Call Sleep(100)
    DoEvents
  Next i
  Set WrkRange = ActiveSheet.Shapes.Range("animation")
    WrkRange.Fill.Visible = msoFalse
  Set WrkRange = Nothing
End Sub

今回は、ShapeRangeオブジェクトを使ってアニメーションを表示させています。
前回の方法が画像を次々挿入してアニメーションさせていたのに対し、今回はあらかじめ表示させる画像オブジェクトを用意しておき(ActiveSheet.Shapes.Range("animation")の部分)その背景画像を書き換えるという方法をとっています。

まず、アニメーションさせる画像と同じ大きさの矩形オートシェイプをワークシートに挿入し、表示させたい場所に移動します。次に、図の書式設定で塗りつぶしを"塗りつぶしなし"、線を"線なし"に指定します。最後に、挿入したオートシェイプの名前を"animation"に変更します。これで準備OKです。



早速、マクロを実行してみましょう。
画像オブジェクト"animation"の背景画像が次々と読み込まれ、アニメーションしている様子がご覧になれたと思います。

このマクロでは、アクティブシート上にある"animation"という名前のオブジェクトでShapeRangeオブジェクトを生成しています。あとは、ループ処理でその背景画像を、Fill.UserPicture プロパティを用いて、表示させたいGIF画像に次々と変更させます。

最後に、Fill.Visible = msoFalse で塗りつぶしなしにしていますが、前回と同様に、画像をそのまま残すならこの部分の処理は必要ありません。

さらに、前回同様、ワークシートのセレクションチェンジイベントで、このマクロをCallさせてみましょう。

' ワークシートモジュールに記述ここから −−−−−−−−−−−−−−−−−−−−−−−
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WrkRange As ShapeRange
  Set WrkRange = ActiveSheet.Shapes.Range("animation")
    WrkRange.Top = Target.Top
    WrkRange.Left = Target.Left
  Set WrkRange = Nothing
  Call test
End Sub
' ワークシートモジュールに記述ここまで −−−−−−−−−−−−−−−−−−−−−−−

これで、前回同様、アクティブセルの位置に合わせてアニメーション画像が表示されるはずです。画像オブジェクトの移動は、このとき一度きりなので、見苦しい残像が発生する恐れもありません。



ちなみに、拙作ソフトのCell_雀ver3.20では、この方法を用いてExcel2007上で冴子先生等オフィスアシスタントのアニメーションを再現させています。興味のある方はぜひお試しください。

ワークシート上でアニメーションを自在に行えれば、エクセルを用いて簡単なプレゼンテーションを行ったり、ユーザーと対話させるなど、インタラクティブで楽しいアプリケーションを開発することが可能になります。

ぜひ、皆さんも挑戦してみてください。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,