Excelワークシート上でスライドショーを行うマクロです。フォルダー内の画像ファイルを1枚ずつ切り替えて表示します。
画像スライドショー マクロ
Sub Excelでスライドショー()
Const pathUser As String = "C:\Pictures"
Const maxW As Long = 700 '最大幅 pt単位
Const maxH As Long = 500 '最大高 pt単位
Dim aryFile() As String 'ファイルパスの配列
Dim i As Long
'対象画像のファイルパスを配列に格納
s_getFileArray pathUser, aryFile, 0
'スライドショーの実行
For i = 1 To UBound(aryFile)
s_InsImage aryFile(i), "スライドショー", maxW, maxH
'ユーザー操作で切り替え
If InputBox("次の画像を表示します", "スライドショー", "続行", 500, 500) = "" Then Exit For
'時間経過で自動切り換え
'Application.Wait (Now + TimeValue("00:00:05"))
Next i
End Sub
'指定フォルダー以下の画像ファイルのリストを取得する
'要参照 : Microsoft Scripting Runtime
Private Sub s_getFileArray(aPath As String, aryFile() As String, cnt As Long)
Dim oFS As New FileSystemObject
Dim oFile As File
Dim oFolder As Folder
'サブフォルダーの処理: 再帰呼び出し
For Each oFolder In oFS.GetFolder(aPath).SubFolders
f_getFileArray oFolder.Path, aryFile, cnt
Next
'ファイルの処理: 指定拡張子のファイルを配列に追加
For Each oFile In oFS.GetFolder(aPath).Files
Select Case LCase(oFS.GetExtensionName(oFile))
Case "png", "gif", "jpeg", "jpg"
cnt = cnt + 1
ReDim Preserve aryFile(1 To cnt)
aryFile(cnt) = oFile.Path
End Select
Next
Set oFile = Nothing
Set oFolder = Nothing
Set oFS = Nothing
End Sub
'アクティブシートの画像貼り替え(スライドショー)
Private Sub s_InsImage(pathImg As String, nameShp As String, maxW As Long, maxH As Long)
Dim oShp As ShapeRange
Application.ScreenUpdating = False
On Error Resume Next '未配置時のエラー回避
ActiveSheet.Shapes(nameShp).Delete
On Error GoTo 0
Set oShp = ActiveSheet.Pictures.Insert(pathImg).ShapeRange
With oShp
.Name = nameShp
.LockAspectRatio = True
.Top = 30
.Left = 10
'最大サイズを超える場合は調整
If .Width > maxW Then .Width = maxW
If .Height > maxH Then .Height = maxH
End With
Application.ScreenUpdating = True
Set oShp = Nothing
End Sub
ポイント解説
スライドショーの実体
画像を切り替えているように見えますが、画像の削除と貼り付けを繰り返すというのが実体です。
画像の場所と最大サイズ(固定値の変数)
pathUser
に画像ファイルのあるフォルダーパス、maxW
と maxH
にスライド画像の最大サイズ(ポイント単位)を指定します。必要に応じて書き換えたり、実行時にユーザー指定する方法に変更してください。
最大サイズに収まる画像は原寸、超える画像は最大サイズまで縮小されます。
フォルダー内の画像ファイルを検索して配列に格納
ここでは、ファイル拡張子で選別しています。ファイル拡張子は以下の構文で求められます。
FileSystemオブジェクト.GetExtensionName(Fileオブジェクト)
画像の切り替え(InputBoxで手動切り替え)
ダイアログボックスのボタンクリックの度に画像を切り替える方法です。あえて InputBox
を使っているのは、表示位置を指定できるからです。MsgBox
は常に中央に表示されるので、画像にかぶってしまうのです。ユーザーフォームを使うのが正攻法なのですが、手間いらずのInputBox
で代用しています。
画像の切り替え(時間経過で自動切り換え)
マクロ動作を一定時間停止させるには、Application.Wait
メソッドで再開時刻を指定します。5秒停止の場合は現在時刻+5秒 を指定します。
Application.Wait (Now + TimeValue("00:00:05"))