Excel VBAで画像を自動配置&リセットする方法【VBA】

Excel VBAを使って、フォルダ内の画像をセルに自動配置するマクロと、配置した画像をワンクリックで削除するマクロを作成してみましょう。これらのコードを使えば、Excelシート上に手軽に画像を配置し、不要になったら簡単に削除できるようになります。

目次

準備

まずは画像が入ったフォルダを用意します。このフォルダ内の画像をシートに配置します。

1. 画像を指定のセルに配置するマクロ

以下のコードでは、フォルダ内の画像を順に読み込み、指定したセルの位置に配置します。また、ダイアログボックスで画像フォルダを選択できるようにしています。画像は順に、セル A1, D1, A6, D6…といった順で配置され、サイズも調整されます。

Sub InsertImagesInCells_Array()
    Dim ws As Worksheet
    Dim imgFolder As String
    Dim img As Picture
    Dim imgPath As String
    Dim imgWidth As Single
    Dim imgHeight As Single
    Dim imgFile As String
    Dim imgPositions As Variant
    Dim i As Integer
    Dim folderDialog As FileDialog

    ' ダイアログボックスでフォルダを選択
    Set folderDialog = Application.FileDialog(msoFileDialogFolderPicker)
    folderDialog.Title = "画像フォルダを選択してください"
    If folderDialog.Show <> -1 Then Exit Sub ' キャンセルした場合は終了
    imgFolder = folderDialog.SelectedItems(1) & "\" ' フォルダパスを取得

    ' トリミング後のサイズを指定
    imgWidth = 30   ' 幅を30ポイントに設定
    imgHeight = 30  ' 高さを30ポイントに設定

    ' 画像を貼り付けたいシートを指定
    Set ws = ActiveSheet ' アクティブなシートを使用

    ' 貼り付けるセルの位置をリストとして定義(最大20個)
    imgPositions = Array("A1", "D1", "A6", "D6", "A11", "D11", "A16", "D16", _
                         "A21", "D21", "A26", "D26", "A31", "D31", "A36", "D36", _
                         "A41", "D41", "A46", "D46")

    ' フォルダ内のファイルを順に読み込む
    imgFile = Dir(imgFolder & "*.jpg")  ' .jpg形式のファイルを対象に読み込み
    i = 0

    ' 画像ファイルがある限り、かつセル位置リストの範囲内で画像を貼り付け
    Do While imgFile <> "" And i <= UBound(imgPositions)
        imgPath = imgFolder & imgFile

        ' 画像を貼り付け
        Set img = ws.Pictures.Insert(imgPath)

        ' 画像の位置とサイズを調整
        With img
            .Left = ws.Range(imgPositions(i)).Left  ' 指定セルの左端に配置
            .Top = ws.Range(imgPositions(i)).Top    ' 指定セルの上端に配置
            .Width = imgWidth                       ' 幅を30ポイントに設定
            .Height = imgHeight                     ' 高さを30ポイントに設定
        End With

        ' 次の画像ファイルを取得し、インデックスを進める
        imgFile = Dir
        i = i + 1
    Loop

    ' 終了メッセージ
    MsgBox "画像の貼り付けが完了しました。", vbInformation
End Sub

コードの説明

  • フォルダ選択ダイアログApplication.FileDialog(msoFileDialogFolderPicker)で画像フォルダを選択するダイアログを表示し、ユーザーが選んだフォルダを使用します。
  • セル位置の指定imgPositions配列で、画像を配置するセルの順番を指定しています。
  • 画像のサイズ調整imgWidthimgHeightで、画像サイズを30ポイント×30ポイントに調整しています。

2. 配置した画像をすべて削除するマクロ

次に、配置した画像をワンクリックで削除するマクロです。以下のコードでは、現在のシート内にあるすべての画像を削除します。

Sub ResetImagesInSheet()
    Dim ws As Worksheet
    Dim img As Shape

    ' 画像を削除するシートを指定
    Set ws = ActiveSheet ' アクティブなシートを使用

    ' シート内の画像をすべて削除
    For Each img In ws.Shapes
        If img.Type = msoPicture Then
            img.Delete
        End If
    Next img

    MsgBox "シート内のすべての画像が削除されました。", vbInformation
End Sub

コードの説明

  • アクティブなシートの画像削除ActiveSheetを指定して、現在表示中のシートの画像のみを削除します。
  • 画像判定If img.Type = msoPictureで、画像だけを判定し、削除しています。他の図形(例えば、ボタンなど)は削除されません。

まとめ

この2つのマクロを使えば、Excelシート上で画像の配置やリセットが簡単に行えます。まずは画像フォルダを選択して「InsertImagesInCells_Array」を実行し、シートに画像を配置しましょう。次に「ResetImagesInSheet」を実行すると、配置した画像がすべてクリアされます。

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次