【ExcelVBA】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

【ExcelVBA】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

ExcelVBAを使えば、大量の画像も一括でExcelのシートに貼り付けるマクロを作ることができます。

  • フォルダ内の画像を一括で貼り付け(挿入)するマクロを作りたい。
  • 指定したフォルダ内の画像をまとめてExcelにコピペしたい。
  • たくさんの画像を手動でExcelに貼り付けるのがめんどくさい・・・。

この記事では、上記のような疑問や悩みが解決できるように解説します。

【ExcelVBA】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

【結果】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

今回のマクロを実行すると、以下の画像のような結果になります。

【ExcelVBA】フォルダ内の画像を貼り付ける(挿入する)マクロ

【準備】フォルダ内に一括貼り付け(挿入)マクロで使用する画像を格納

  • 今回の例では、いらすと屋の食べ物のイラストを下記のようなフォルダに格納しました。
    例: “C:\Users\hogeuser\Downloads\irasutoya\food”
    ※フォルダ内には画像ファイルのみ格納するようにしてください。
  • 画像を貼り付けたいExcelシートのA1セル・B1セルに適当な見出しを作成します。(例:A1 → name、B1 → img)

【ExcelVBAのコード】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

フォルダ内の画像を一括で貼り付け(挿入)するマクロのExcelVBAのコードがこちらです。

MEMO

Dir関数、Shapeオブジェクト、AddPictureメソッドの使い方がポイントです。

Option Explicit    ' 変数を宣言しないと使えませんという命令
'
' フォルダ内の画像を一括で貼り付け(挿入)するマクロ
'
    '変数の型を宣言
    Dim FolderPath As String    ' 画像ファイルがあるフォルダーパス
    Dim imgFileName As String   ' 画像ファイル名
    Dim FilePath As String      ' 画像のファイルパス
    Dim rowNum As Long          ' 行番号
    Dim MyShape As Shape        ' 画像オブジェクト
    
    FolderPath = "C:\Users\hogeuser\Downloads\irasutoya\food\"
    imgFileName = Dir(FolderPath, vbNormal)     ' 引数に指定したフォルダー内のファイル名を返す。vbNormal:標準ファイル
    FilePath = FolderPath & imgFileName
    
    Const CELL_HIGHT As Long = 100     ' セル・画像の高さ
  
    rowNum = 2  ' 開始する行番号
    Do Until imgFileName = ""
        ' セルの高さを設定
        Cells(rowNum, 1).RowHeight = CELL_HIGHT
                
        ' 画像ファイル名をセルに書き込む
        Cells(rowNum, 1).Value = imgFileName
        
        ' 画像ファイルをセルに貼り付け
        Cells(rowNum, 2).Select
        Set MyShape = ActiveSheet.Shapes.AddPicture( _
            Filename:=FilePath, _
            LinkToFile:=False, _
            SaveWithDocument:=True, _
            Left:=Selection.Left, _
            Top:=Selection.Top, _
            Width:=0, _
            Height:=0)
        
        With MyShape
            .LockAspectRatio = msoTrue  ' 縦横比を固定
            .Height = CELL_HIGHT         ' 画像の高さを指定(縦横比を固定にしているので自動で高さも変更される)
        End With
                
        ' フォルダ内の画像を選択
        imgFileName = Dir()     ' Dir関数は引数を省略するとまだ返していないファイル名を順に返す。
        FilePath = FolderPath & imgFileName
        
        ' 行を1つ進める
        rowNum = rowNum + 1
    
    Loop
    
    Columns("A:A").AutoFit  ' 列幅を自動調整
    Range("A1").Select

End Sub

【解説】フォルダ内の画像を一括で貼り付け(挿入)するマクロ

画像ファイルが格納されたフォルダーパスを変数に設定

FolderPath という文字列型の変数に、いらすと屋からダウンロードした画像のフォルダーパスを設定します。

Dir関数:指定したフォルダー内にあるファイル名を取得する関数

Dir 関数は、引数に指定したフォルダー内にあるファイル名を取得する関数です。

引数を指定しない場合は、直前に指定したフォルダー内でまだ返していないファイル名を順に返します。

imgFileName に順次格納していき、返すファイル名がなくなるまで、つまり、”” (空)になるまで、処理を繰り返します。

AddPictureメソッド:画像ファイルをExcelシートに貼り付ける際に便利

画像ファイルをExcelシート上に表示するには、Shapesオブジェクトの AddPicture メソッドを使用します。
Shapes. AddPicture メソッド (Excel) | Microsoft Docs

AddPicture(Filename, LinkToFile SaveWithDocument, Top, Left, Height, Width)

No. 引数名 説明
1 Filename String 読み込みたい画像ファイルのフルパス
2 LinkToFile MsoTriState列挙型 Excel起動時に、画像ファイルのリンク情報を読み込む(msoFalse)か、
エクセルブックにイメージを保存する。(msoTrue)
3 SaveWithDocument MsoTriState列挙型 Excel保存時に、一緒にイメージを保存する(msoTrue)か、
画像ファイルのリンク情報のみ保存する。(msoFalse)。
4 Top Single イメージの上端部のシート上での位置(ポイントで指定)
5 Left Single イメージの左端部のシート上での位置(ポイントで指定)
6 Height Single イメージの高さ(ポイントで指定)。原寸表示の場合は-1。
7 Width Single イメージの幅(ポイントで指定)。原寸表示の場合は-1。

Excelのワークシートに一括で貼り付けた画像の縦横比を固定する方法

画像の縦横比を固定するには、Shapeオブジェクトの LockAspectRatio プロパティに msoTrue を指定します。

縦横比を固定した後は、「高さ」か「幅」のどちらかを変更することで、もう一方が自動で変更されます。

【補足】Excelシート内の図形や画像を一括で削除する方法

実際にマクロを作成する中で、Excelマクロで貼り付けた画像を一括で削除する場面があるかと思います。

そんなときは、以下の方法が便利です。

  1. 画像を1つ選択した状態で、ショートカットキー [Ctrl]+[A]キーを押すと、ワークシートに配置されている図形や画像がすべて選択されます。
  2. 続けて [Delete]キーを押すと、 選択していた図形や画像が一括で削除されます。

Excel(エクセル) VBAのおすすめ本

できる イラストで学ぶ 入社1年目からのExcel VBA」は、初学者でも楽しく学べるVBA学習書です。案内役のキャラクターと共に、とにかく分かりやすく、初心者が挫折しないように工夫されたVBAの本です。VBAの基礎的な文法はイラスト入りでわかりやすく解説され、よく使うコードの書式や注意事項も丁寧に解説されてます。

初回30日間無料Amazon Kindle Unlimitedなら無料で読むこともできます!(無料期間が過ぎた後は、月額980円であなたの好きなKindle書籍や雑誌が読み放題になります。)

created by Rinker
きたみあきこ (著), できるシリーズ編集部 (著)

まとめ

  • フォルダ内の画像を一括で貼り付け(挿入)するマクロのExcelVBAについて解説しました。
  • Dir関数、Shapeオブジェクト、AddPictureメソッド、などの仕様を理解するところがポイントです。