はじめに
こんにちは、YUMAです!
Excelに大量の画像を横位置を揃えて、間隔を一定にして貼り付けていくような作業をしたことはありますか?
こんな作業、手作業でやっていたらとても時間がかかりますし、何より面倒ですよね。
そこで、今回はこんな面倒な作業を一瞬で終わらせるExcelマクロをご紹介します。
フォルダ内の画像を一斉に貼り付けるマクロ
概要
今回紹介するマクロの概要は以下です。
- 選択したセルを左上にして、指定したフォルダ内の画像を下に向かって一斉に貼り付ける。
- 画像のサイズは元のサイズ
- 画像の間隔は、画像の上端から次の画像の上端までの行数を指定する
コード
マクロのコードは以下です。
Sub 画像一斉貼り付け()
Dim top As Long
Dim objFile As Object
Dim objFldr As FileSystemObject
Dim spanStr As String
Dim span As Long
Dim dlg As FileDialog
Dim folderPath As String
Dim height As Long
Dim rc As Integer
Dim flg As Boolean
Application.ScreenUpdating = False
flg = False
rc = MsgBox("現在選択されているセルを左上にして画像を挿入します。よろしいですか?", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
Set objFldr = CreateObject("Scripting.FileSystemObject")
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
If dlg.Show = False Then Exit Sub
folderPath = dlg.SelectedItems(1)
Do
spanStr = InputBox("画像の上端から次の画像の上端までの行数を入力してください")
If StrPtr(spanStr) = 0 Then Exit Sub
If IsNumeric(spanStr) Then
flg = True
Else
MsgBox ("数値を入力してください")
End If
Loop Until flg = True
height = ActiveCell.height
span = CLng(spanStr)
span = span * height
top = Selection.top
For Each objFile In objFldr.GetFolder(folderPath).Files
ActiveSheet.Shapes.AddPicture _
Filename:=objFile, _
linktofile:=False, _
savewithdocument:=True, _
Left:=Selection.Left, _
top:=top, _
Width:=-1, _
height:=-1
top = top + span
Next
Application.ScreenUpdating = True
MsgBox ("画像の貼り付けが完了しました")
Else
Exit Sub
End If
End Sub
マクロ使用の流れ
- 左上にしたいセルを選択
- マクロを実行
- 確認メッセージが表示させるので、「はい」を選択
- 貼り付けたい画像ファイルが入っているフォルダを選択
- 画像の上端間の行数を入力
- 画像が貼り付けられる
- 完了メッセージが表示される
画像のサイズを指定したい場合
貼り付ける画像のサイズを指定したい場合は、AddPictureメソッド内のWidth(幅)とheight(高さ)の値を「-1」から任意の値に変更してください。
おわりに
VBAはまだまだ初心者ですが、よかったら参考にしてみてください!