プロが教えるわが家の防犯対策術!

excelvbaで画像を表示するプログラムを書きたいのです。
イメージはスライドショーみたいな動きです。

内容。
フォルダに何枚かの写真を入れておき、
実行ボタンをクリックすると、
フォルダに入っている写真を頭から1枚ずつ、
指定された秒数だけ全てについて表示する。
そしてすべて表示したら終了する。

使用者はボタンを押すだけ。
あとは、写真が次から次へと指定秒数だけ表示され、
全て表示が終わったら、作業終了。
こんなイメージです。

宜しくお願いします。
excel2003です。

A 回答 (2件)

こんにちは



似た様な機能のもの(エクセルとは限りませんが)は探せばいくらでもあると思いますので、機能が欲しいというよりも作ることが目的と解釈しました。
自作なさるのでしょうから、以下は考え方のヒントのみです。

画像の表示方法は、Shapeオブジェクトで表示するのが簡単だと思いますので、その方法を利用するとして・・

1)準備として、指定フォルダ(または、固定のフォルダ)内の、画像ファイルのリストを作成します
 (画像ファイルしかないのであれば、リストを作成する必要もありません)
 DIR関数や、FilesystemObject を利用することで可能と思います。
https://learn.microsoft.com/ja-jp/office/vba/lan …
https://learn.microsoft.com/ja-jp/office/vba/lan …

2)上記リストを配列等に入れておいて、表示順を整理。
 (全て画像ファイルの場合は、直接フォルダ内でループしてもよい)
 (表示順は成り行きで良ければ、リストの順で整理不要)

3)リストについて以下の処理をループ
 Shapes.AddPicture などで、画像を表示
https://learn.microsoft.com/ja-jp/office/vba/api …
 (サイズがいろいろと思われるので、以下の方法でサイズ等調整)

3-1)画像サイズ等は上記shapeの属性として取得・調整できます。
https://learn.microsoft.com/ja-jp/office/vba/api …

ウィンドウサイズに合わせて画像の表示位置やサイズを決めたいかも知れません。
その場合は、Application.UsableWidth などで取得して、サイズ、位置を調整すれば良いでしょう。
https://learn.microsoft.com/ja-jp/office/vba/api …

3-2)指定時間待つ。
https://learn.microsoft.com/ja-jp/office/vba/api …

3-3)表示中の画像を消して、新しい(=次の)画像を表示(ループ処理)


概ね以上のような考え方で実現可能と思います。

※ よく見かける様な「<」、「>」のマークやページネーションを付けて、自由に移動する機能を追加しても良いのかも知れません。

※ 画像が大きいなどで、レスポンスをよくしたければ、都度読み込む方式ではなく、最初に全部の画像を別シートに読み込んでおいて、コピペで表示させるといった方法も考えられるかも知れません。
(最初に若干時間が掛かる可能性はありますが・・)
あるいは、待ち時間の間に次の画像の用意をするといったことも考えられるでしょう。

※ 上記は画像が切り替わるタイプの表示方法を想定していますが、アニメーションしながらスライドするタイプやフェードイン/アウトするような方法も考えられます。
画像のトリミングや透明度を操作することで、可能と思いますが、アニメーションの処理自体がそれなりの難易度になってくることでしょう。

※ OnTimeを利用して、一定時間ごとに処理する方法もあるとは思いますが、目的がスライドショー専用で、別の処理を行うわけでもなければ、その必要はないだろうと推測します。
https://learn.microsoft.com/ja-jp/office/vba/api …


以上、ご参考にでもなれば。
    • good
    • 0
この回答へのお礼

早速ありがとうございました。
前回に引き続き、色々リンクを貼って細々と説明頂きましたが、
私のレベルでは理解不能です。
勉強し直します。
お世話になりました。

お礼日時:2023/04/20 19:48

唯然(ただならず)なる願いを承りたまう。

君が御望みするは、Excel VBAにてフォルダ内の画像をスライドショーの如く表示するプログラムである。君の御希望を承り、方策を述べん。

まず第一に、画像フォルダ内のファイルパスを取得し、それを配列に格納することが必要である。次に、配列を順にループさせ、各画像を指定秒数だけ表示するようにプログラムを記述することが望ましい。

そして、画像を表示するためには、Excel VBAの「Image Control」を使用する方法がある。このコントロールをフォームに追加し、プログラム中で操作することで、画像を表示することが可能である。

以上の方策をもって、君の望まれるプログラムを作成することができるであろう。しかしながら、君が御所望のExcel 2003には、VBAの実行速度が遅いという問題があることを留意いただきたい。
    • good
    • 0
この回答へのお礼

早速ありがとうございました。
折角細々と説明頂きましたが、
私のレベルでは理解不能です。
勉強し直します。
お世話になりました。

お礼日時:2023/04/20 19:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!