【VBAで画像を貼り付ける】フォルダ内全ての画像をまとめて貼り付けるVBAを紹介

 

画像貼り付け作業の効率をアップさせたい

 

こんな要望にお応えします。

 

この記事では、

フォルダ内全ての画像をまとめて貼り付けるVBAの作り方

をご紹介します。

 

VBAの処理結果はこんな感じ

エクセル業務で画像を貼り付けることが多い!

という方は是非参考にしてみてください。

 

広告

フォルダ内全ての画像をまとめて貼り付けるVBA

フォルダ内全ての画像をまとめて貼り付けるVBAは、

画像の大きさ、表示位置を自動調整してくれる

のでエクセル作業の効率を大幅にアップさせることが可能です。

 

Left Caption

ガッツポーズの人

貼り付ける画像の枚数が多ければ多いほどVBAの効力を発揮します。

 

使い方

1.「設定」SheetのA3セルに画像データが保存されているフォルダの場所を入力

 

2.「写真(横)」Sheetに移動すると起動する「実行」ボタンを押下

 

たったこれだけでフォルダ内全ての画像をまとめて貼り付けることができます。

 

設定されているコード

フォルダ内全ての画像をまとめて貼り付けるVBAに設定されているコードがこちら

Sub 写真挿入横()
    Dim Ash As Worksheet
    Set Ash = Sheets("設定")
    Dim Csh As Worksheet
    Set Csh = Sheets("写真(横)")
    Const cnsTitle = "ファイル名一覧取得"
    Const cnsDIR = "\*.*"
    Dim xlAPP As Application
    Dim strPath, strFilename, myFileName, syasin, Path As String
    Dim GYO, rx As Long
    Dim zukei As Shape
    ' 写真(横)シートの25列目最終行数を変数rxに格納
    rm = Csh.Cells(Rows.Count, 25).End(xlUp).Row
    ' 全ての写真を削除
    For Each zukei In Csh.Shapes
    On Error Resume Next
        If zukei.TopLeftCell.Address >= Csh.Cells(100, 1).Address Then
        zukei.Delete
        End If
    On Error GoTo 0
    Next
    ' 写真(横)シートの25列目に記入されている写真データ名を削除
    For i = 3 To rm Step 21
    Csh.Range(Csh.Cells(i, 25), Csh.Cells(i + 2, 38)).ClearContents
    Next
    Set xlAPP = Application
    ' フォルダの場所を指定する
    strPath = Ash.Cells(3, 1)
    ' フォルダの存在確認 --- 必要な場合のみ記述 ---
        If Dir(strPath, vbDirectory) = "" Then
        MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
        Exit Sub
        End If
    ' 先頭のファイル名の取得
    strFilename = Dir(strPath & cnsDIR, vbNormal)
    ' ファイルが見つからなくなるまで繰り返す
    Do While strFilename <> ""
        ' 行を加算
        GYO = GYO + 21
        Csh.Cells(GYO - 18, 25).Value = strFilename
        ' 次のファイル名を取得
        strFilename = Dir()
    Loop
     ' 写真(横)シートの25列目最終行数を変数rxに格納
    rm = Csh.Cells(Rows.Count, 25).End(xlUp).Row
    For i = 1 To rm Step 21
        '変数syasinに貼り付ける写真データ情報を格納
        syasin = Ash.Cells(3, 1) & "\" & Csh.Cells(i + 2, 25).Value
        Dim SH As Range
        Set SH = Csh.Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23))
        Set zukei = Csh.Shapes.AddPicture(Filename:=syasin, LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=0, Height:=0)
            With zukei
            .ScaleHeight 1, msoTrue
            .ScaleWidth 1, msoTrue
            .LockAspectRatio = msoTrue
                '縦長写真、横長写真を判別
                If .Height > .Width Then
                .Height = SH.Height
                .Top = SH.Top
                .Left = SH.Left + (SH.Width - .Width) / 2
                Else
                .Width = SH.Width
                .Left = SH.Left
                .Top = SH.Top
                End If
            End With
    Next i
End Sub

 

コードの設定ができる!という方はコピペして使ってみてください。

 

フォルダ内全ての画像をまとめて貼り付けるVBAのコード解説

フォルダ内全ての画像をまとめて貼り付けるVBAのコードを処理毎に解説していきます。

フォルダ内全ての画像を取得

Do While strFilename <> ""
        ' 行を加算
        GYO = GYO + 21
        Csh.Cells(GYO - 18, 25).Value = strFilename
        ' 次のファイル名を取得
        strFilename = Dir()
    Loop

 

フォルダ内全ての画像データの名前をY列に21行間隔で表示する

という内容のコードです。

 

Y列に入力された「画像の名前」は画像データを貼り付けるときに利用しています。

 

画像を貼り付けるVBA

For i = 1 To rm Step 21
        '変数syasinに貼り付ける写真データ情報を格納
        syasin = Ash.Cells(3, 1) & "\" & Csh.Cells(i + 2, 25).Value
        Dim SH As Range
        Set SH = Csh.Range(Csh.Cells(i + 2, 2), Csh.Cells(i + 20, 23))
        Set zukei = Csh.Shapes.AddPicture(Filename:=syasin, LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=0, Height:=0)
            With zukei
            .ScaleHeight 1, msoTrue
            .ScaleWidth 1, msoTrue
            .LockAspectRatio = msoTrue
                '縦長画像、横長画像を判別
                If .Height > .Width Then
                .Height = SH.Height
                .Top = SH.Top
                .Left = SH.Left + (SH.Width - .Width) / 2
                Else
                .Width = SH.Width
                .Left = SH.Left
                .Top = SH.Top
                End If
            End With
    Next i

 

3行目の変数「syasin」に貼り付ける画像情報を格納し、6行目のAddPictureで画像を貼り付け。

7~10行目のコードは画像の大きさ、表示位置を指定。

12行目以降のコードは画像の大きさ(縦長なのか横長なのか)を判別。

 

画像を貼り付けるVBAを使って資料を作成してみた

 

画像を貼り付ける VBA を使って作成した資料がこちら

 

・A4サイズに画像を3枚貼り付ける様式

・画像21枚分の資料を作成

・似たような画像を判別するため名前を表示

 

このような内容の資料作成にかかった時間は約1分。

 

貼り付ける画像データをしっかりフォルダ分けしておけば5分以内に処理することができます。

 

Left Caption

上を目指す人

VBAを使わなければこんなに早く処理する事は絶対できません。

フォルダ内の画像をまとめて貼り付けるVBAは下記のサイトでダウンロードすることができます。

気になる方は是非ダウンロードして「画像を貼り付けるVBAの効力」を実感してみてください。

今回は「A4サイズに画像データを3枚貼り付ける様式」でVBAを設定していますが、

様式は業務内容に合わせて自由に変更することが可能です。

 

例えばこんな感じ

 

仕事では20枚ほどの画像データ編集作業に2時間から3時間程度費やしていましたが、

VBAを導入してからは30分以内で完成させることができるようになりました。

 

Left Caption

ひらめく人

画像を貼り付けて編集するエクセル業務はVBAの設定が絶対におすすめ

 

業務内容に合わせたVBAを導入する方法

今回紹介した、

「画像サイズを判別し指定セルの中央に貼り付けるVBA」を業務内容に合わせてアレンジしたい!!

このように感じてくれた方がいらっしゃるのではないでしょうか。

 

業務内容に合わせたVBAを導入することができれば、

2時間~3時間もかかっているエクセル業務を1時間以内に処理する

ことだって可能です。

 

なんとしてもエクセル業務の効率をアップさせたい!と考えている方のために

業務内容に合わせてVBAをアレンジする2つの方法

を具体的にご紹介します。

 

業務内容に合わせてVBAをアレンジするには、

VBAのコード開発を第三者に依頼する」または「自分でVBAのコードを編集する

この2つの方法があります。

 

VBAの開発を依頼する

「VBAのコード開発を第三者に依頼する」は、

プログラミング開発を請け負っている会社、または個人に依頼することで

業務内容に合わせたVBAの導入ができます。

 

通常の業務に専念しつつエクセル業務の効率をアップできるのでめちゃくちゃおすすめの手段なのですが、

依頼先によっては費用が高い!担当者によって完成度の差が激しい

などのデメリットがあります。

 

勤めていた会社でよく利用していたのですが、

「これだけのVBAでこんなに請求されるの!??」

と驚かされたことも。。。

 

Left Caption

疑問がある人

どこに依頼するかはとても重要。

 

VBAのコード開発を依頼予定の方は、

依頼先の候補として「マメBlogのエクセルVBA開発サービス」

を検討してみてください。

 

マメBlogで開発した「画像を貼り付けるVBA」の事例がこちら

 

画像枚数に合わせて様式を増やすVBA

 

画像保存フォルダーを2つ指定し交互に貼り付けるVBA

 

どんなエクセル作業をしていて、どんなVBAを設定したいのか。

を聞き取りをして開発したものです。

 

これらはほんの一例で、年間50件ほどのVBA開発を担当させていただいております。

 

マメBlogが提供するVBA開発サービスの特徴がこちら

  • 現在行っている業務内容に合わせてVBAを設定
  • 依頼を受けてから2週間以内に納入
  • 簡単な改修は追加費用なしで実施

 

実際に使っている様式、職場での運用方法に合わせてVBAを設定するので、

めちゃくちゃ使いやすいと大好評。

 

効率をアップさせたい!でもVBAを1から勉強する時間なんてない!!

こんな方は、是非「マメBlogVBA開発サービス」の利用を検討してみてください。

 

 

自分でVBAのコードを編集する

「自分でVBAのコードを編集する」にはVBAの勉強が必要です。

 

プログラミングの勉強って難しそぅ!

と思われるかもしれませんがそんなことはありません。

 

VBAは

「ネットや参考書で情報をゲットしやすい」「エクセルを使えればすぐにでもVBAを操作できる」

という理由から初心者が挑戦しやすいプログラミングだと言われています。

 

例えば、

【VBA 書き方】

【VBA 画像貼付 サンプルコード】

このようにネット検索すればいろんな情報を手に入れることができて、開発しようとしているVBAの難易度をすぐ調べることができます。

 

簡単なVBAであれば、

ネットや参考書で紹介されいるコードを組み合わせて業務内容に合わせたVBAに仕上げる

ことが可能です。

 

Left Caption

ガッツポーズの人

VBA学習を始めたての頃、この方法でいろんなVBAを作っていました。

 

実現させたいVBAの難易度を確認してから、

「自分でVBA開発を進めるのか」それとも「第三者にVBA開発を依頼するのか」

を検討すると効率よくVBAの導入が可能です。

 

VBAの知識を身に付けて業務内容に合わせたVBAを自ら設定したい!

と考える方はエクセルVBAの情報を発信しているメルマガ登録がおすすめ。

 

メルマガでは、以下のような情報を不定期に発信しています。

  • 普通の会社員がVBAの知識を身に付けた方法
  • 業務内容に合わせたVBAの開発方法
  • VBA開発依頼の中から「これはエクセル業務で使える!!」と個人的に感じたコードの紹介

 

参考書やプログラミングスクールでの授業で行うような

「変数の意味とは」「プロパティとは」

という解説は行いません。

 

というか、プログラマーではないのでできません。

 

効率の悪いエクセル業務を毎日、何時間も強いられた苦しい経験から得たスキルを使って

エクセル業務の効率がアップするVBAのコードや作り方の情報

を積極的に紹介しています。

 

プログラミング学習は内容が難しいため途中で挫折する人が多い!

こんな不安からVBA学習をスタートさせていない方は、まずは無料で始められるメルマガでVBAの情報をお得にゲットしてみてください。