目次
フォームに画像を表示する
ユーザーフォームに画像を表示します。
画面イメージ

DFD図

ソースコード
' モジュールレベル変数 Dim imgPaths() As String ' 画像パスの配列 Dim currentIndex As Long ' 現在表示中のインデックス ' ==== 前の画像ボタン ==== Private Sub CommandButton2_Click() If currentIndex > 1 Then currentIndex = currentIndex - 1 ShowImage currentIndex Else MsgBox "最初の画像です", vbInformation End If End Sub ' ==== 次の画像ボタン ==== Private Sub CommandButton3_Click() If currentIndex < UBound(imgPaths) Then currentIndex = currentIndex + 1 ShowImage currentIndex Else MsgBox "最後の画像です", vbInformation End If End Sub Private Sub CommandButton4_Click() Call loadSHeet End Sub Private Sub Image1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer) End Sub Private Sub UserForm_Initialize() Call loadSHeet End Sub ' ==== 画像表示処理 ==== Private Sub ShowImage(index As Long) Dim path As String path = imgPaths(index) If Dir(path) = "" Then MsgBox "画像ファイルが存在しません:" & vbCrLf & path, vbExclamation Exit Sub End If With Image1 .Picture = LoadPicture(path) .PictureSizeMode = fmPictureSizeModeZoom End With End Sub Private Sub CommandButton1_Click() Call loadFilePath End Sub Sub loadSHeet() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Set ws = ThisWorkbook.Sheets("imagelist") ' 最終行を取得(ヘッダは1行目) lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row If lastRow < 2 Then MsgBox "画像が見つかりません", vbExclamation Exit Sub End If ' パスを配列に格納(2行目から) ReDim imgPaths(1 To lastRow - 1) For i = 2 To lastRow imgPaths(i - 1) = ws.Cells(i, 2).Value Next i currentIndex = 1 ShowImage currentIndex End Sub Sub loadFilePath() Dim fDialog As FileDialog Dim folderPath As String Dim fileName As String Dim rowNum As Long Dim ws As Worksheet Dim fso As Object Dim folder As Object Dim file As Object ' === フォルダ選択ダイアログ === Set fDialog = Application.FileDialog(msoFileDialogFolderPicker) With fDialog .Title = "フォルダを選択してください" .AllowMultiSelect = False If .Show <> -1 Then MsgBox "フォルダが選択されませんでした。", vbExclamation Exit Sub End If folderPath = .SelectedItems(1) End With ' === imagelist シートの取得・初期化 === On Error Resume Next Set ws = ThisWorkbook.Sheets("imagelist") If ws Is Nothing Then Set ws = ThisWorkbook.Sheets.Add ws.Name = "imagelist" End If On Error GoTo 0 ws.Cells.ClearContents ws.Range("A1").Value = "ファイル名" ws.Range("B1").Value = "フルパス" ' === フォルダ内のファイル取得 === Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderPath) rowNum = 2 For Each file In folder.Files ws.Cells(rowNum, 1).Value = file.Name ws.Cells(rowNum, 2).Value = file.path rowNum = rowNum + 1 Next file MsgBox "フルパス一覧の出力が完了しました!", vbInformation End Sub