お世話になります。
ExcelのVBAである処理を実行中に、フォームやその他の方法でもいいのですが、あるフォルダ内の画像ファイルをランダムに表示することは可能でしょうか?
ある処理には、外部データの取り込みでwebの情報を取得し、それを関数で加工して、テキスト形式で排出する処理で、Loopが所々に入っています。
この処理には多少時間がかかります。
その間に、画像ファイルの表示をランダムになるべくなら等間隔で表示させたいのですが、出来るものでしょうか?
処理完了までに時間がプラスされるのは覚悟しています。
要するに、バックではある処理がされ、画面上には写真などがプレビューされるようにしたいということです。何か方法をご存知の方、よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
KenKen_SP です。フォルダ内の画像ファイルパスを配列に読み込んでおき、その要素数内で
乱数を発生させて、画像ファイルを決めます。次に、フォームなら
Me.Picture = LoadPicture(ImagePathArray(Index))
DoEvents
で更新します。画像が2回続けて同一にならないようにするためには、
前回表示の画像インデックスをモジュールレベル変数に保持しておいて、
乱数発生時に比較し、同一なら乱数発生をリトライします。
> ...テキスト形式で排出する処理で、Loopが所々に入っています。
あとは、ループ処理の区切りの良いところで以上の仕組みを呼び出せば
良いでしょう。用意する画像はなるべく軽いものがいいですね。
なお下記ソースコードでは画像ファイルのフォルダを固定してます。
' Userform 1 モジュール------------------------------------------
' 配置:Image1 CommandButton1
Option Explicit
' 画像ファイルのフォルダ
Private Const IMAGEDIR = "C:\Image"
' 画像ファイル名
Private Const IMAGETYPE = "*.jpg"
Private mImgPath() As String ' 画像パスを保存する
Private mlngPrevImgIdx As Long ' 前回表示の画像インデックス
Private Sub UserForm_Initialize()
Dim strFilePath As String
Dim i As Long
' Image コントロール初期化
With Me.Image1
.PictureSizeMode = fmPictureSizeModeZoom
.PictureAlignment = fmPictureAlignmentCenter
End With
' 前回表示の画像インデックス初期化
mlngPrevImgIdx = -1
' フォルダ内の画像ファイルを配列に取得します
strFilePath = Dir(IMAGEDIR & "\" & IMAGETYPE)
i = 0
While strFilePath <> ""
ReDim Preserve mImgPath(i)
mImgPath(i) = IMAGEDIR & "\" & strFilePath
i = i + 1
strFilePath = Dir()
Wend
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Erase mImgPath
End Sub
' ※ ボタンクリックでご自分のマクロを呼び出す
Private Sub CommandButton1_Click()
' 連続クリック防止
Me.CommandButton1.Enabled = False
Call SampleMacro
' 最後にフォームを閉じる
MsgBox "完了です", vbInformation
Unload Me
End Sub
’今回はややこしくなるので、フォームモジュール内にご自分
’のマクロを追加して頂く様になってますが、標準モジュール
’からもコールできるように Public にします。
Public Sub ImgChange()
Dim lngImgCount As Long
Dim lngImgIndex As Long
Dim strFilePath As String
' 乱数を発生させて表示する画像を決める
lngImgCount = UBound(mImgPath)
Do
Randomize
lngImgIndex = Int(lngImgCount * Rnd)
Loop Until mlngPrevImgIdx <> lngImgIndex
' 画像を Image1 に読み込んで更新
strFilePath = mImgPath(lngImgIndex)
Me.Image1.Picture = LoadPicture(strFilePath)
DoEvents
' mlngPrevImgIdx を更新
mlngPrevImgIdx = lngImgIndex
End Sub
Private Sub SampleMacro()
Dim i As Long
Application.ScreenUpdating = False
For i = 0 To 10
' ※ 次行の画像更新処理をご自分のマクロに追加
Call ImgChange
' 処理サンプル
ActiveSheet.Range("A1").Offset(i).Value = i
' サンプルだと早すぎるので仮に入れた Wait
Application.Wait (Now() + TimeValue("00:00:02"))
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同級生の顔を使ってエロ画像を...
-
至急回答お願いします、彼氏に...
-
pixivの画像を保存しようとした...
-
JPEGファイルに文字を入れたい
-
整形外科などで、MRIやレントゲ...
-
スマホで撮った写真をガラケー...
-
可愛い子はプリクラが盛れない...
-
tiffファイルの解像度変更の仕方
-
証明用写真の作り方をお教えく...
-
グーグル画像検索にかからない...
-
A4の用紙にExcelで写真の貼り方...
-
iPhoneで写真を撮りました。 端...
-
マクロで画像挿入→エラー「リン...
-
「湾岸の千葉君」での秀里毅の写真
-
至急です!!答えてくださいお願...
-
写真アップロードの仕方 送り方
-
「強調」の対義語は何ですか?
-
ロープで縛ってパフォーマンス
-
HIS RIS PACS のRISについて
-
【画像添付します。】5w2日で胎...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同級生の顔を使ってエロ画像を...
-
iPhoneで写真を撮りました。 端...
-
至急回答お願いします、彼氏に...
-
JPEGファイルに文字を入れたい
-
マクロで画像挿入→エラー「リン...
-
可愛い子はプリクラが盛れない...
-
pixivの画像を保存しようとした...
-
「強調」の対義語は何ですか?
-
tiffファイルの解像度変更の仕方
-
受信した添付写真を大きくする
-
至急です!!答えてくださいお願...
-
撮影日時をそのままに残して画...
-
持っている写真の画質を上げる...
-
PCでPDFファイルを電子書籍のよ...
-
証明用写真の作り方をお教えく...
-
「湾岸の千葉君」での秀里毅の写真
-
整形外科などで、MRIやレントゲ...
-
写真の下に文字を入れるには?
-
エクセル・ワードの表を画像化...
-
VBAの内容の修正をお願いさせて...
おすすめ情報