【VBA】指定したフォルダ内の画像をエクセルに大量貼り付け!

f:id:yshgs_elec:20200908223624j:plain

大量の画像をエクセルシートに張り付けたい。でも手作業でやってたら日が暮れそうだ。

この記事では、こんな悩みをエクセル(VBA)を使って一瞬で解決します。

 

さっそくやっていきましょう!

スポンサーリンク

やりたいことのイメージ共有

本題に入る前に、この記事で紹介する内容を共有化しておきましょう。

 

以下のように、あるフォルダの中に複数の画像が入っています。

(私のブログ記事のサムネイル画像を使っています。今回は7つの画像だけですが、何枚でも対応可能です。)

エクセルに張り付けていく画像ファイル一覧

この画像たちをエクセルシートにひとつひとつ自動で張り付けていく方法をご紹介していきます。

 

最終的な完成イメージは以下のようになります。

画像が保存されているフォルダもセル上に記入する方式にしていますので、非常に使い勝手は良いと思います。

エクセルに画像を一括貼り付けした結果

あなたのやりたいこととイメージが一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

下準備:エクセルシートを整える

今回は以下のようにA2セルに画像が保存されている場所を記入するようにしています。

また、A4セルから下方向に画像をどんどん張り付けていこうと思います。

画像が保存されているフォルダのパスを入力

このままでは画像を張り付けたときに、セルの高さが足りず、画像が重なってしまうので、セルの高さをあらかじめ調整しておきましょう。

 

以下の画像を参考に行の高さを調整します。

手順①:行全体を適当に選択し、右クリック

手順②:行の高さを選択

セルの高さを調整する手順

 

手順③:行数を入力⇒OK

(今回は行の高さが100でちょうどよくなるようにVBAコードを記述しています。ここの数字と、のちほど紹介するVBAコード中の数字が一致していれば問題ありません。)

セルの高さを調整する手順

すると以下のようにエクセルシート上のセルの高さが大きくなったと思います。

 

今回はこのセルの高さと一致するように画像をはりつけていきます。

セルの高さを調整した結果

事前準備が整ったら、次はVBAコードを記入していきます。

 

VBAの使いかたがわからない、という方は以下の記事を参考に、コードを記述できる環境を整えておきましょう。

www.higashisalary.com

 

スポンサーリンク

フォルダ内の画像を順番に張り付けていくVBAコード

以下が画像貼り付けを行うVBAコードです。

 

私とまったく同じようにエクセルシートを作っているひとは、そのままコピーしちゃってください。

Sub picture_insert()
    '変数の型を宣言
    Dim base_path As String
    Dim file_name As String
    Dim file_path As String
    Dim i As Integer
    ase_path = Cells(2, 1) & "\"
    file_name = Dir(base_path, vbNormal)
    file_path = base_path & file_name
    i = 1
    Do Until file_name = ""
        ActiveSheet.Pictures.Insert(file_path).Select
        Selection.Cut
        Cells(i + 3, 1).Select
        ActiveSheet.PasteSpecial
        Selection.ShapeRange.Height = 100
        file_name = Dir()
        file_path = base_path & file_name
        i = i + 1
    Loop
End Sub

※先ほどエクセルシートを整えたときに、セルの高さを100に設定したと思います。

もし、もっと大きな(小さな)画像として貼り付けたい場合は、エクセルシートの高さを好きな大きさに変更し、さらに上のVBAコード中の

Selection.ShapeRange.Height = 100

この数字もセルの大きさに応じて書き換えればOKです。

 

記述が終わったらあとは実行するのみ!

 

いざ実行!!!

実行結果としては、冒頭に紹介した通りです。

以下のようにA列に画像が並んでいます。

サンプルコードを実行し、フォルダ内の画像をエクセルに一括貼り付けした結果

手作業でやると数分かかってしまう作業でも、このようにVBAを駆使すれば、ほんの一瞬で終わらせることが可能です。

 

スポンサーリンク

要点説明:ActiveSheet.Pictures.Insertについて

ここでは、この記事の中で覚えておくべく要点を説明します。

 

先ほど紹介したVBAコードでは、画像をシートに張り付けるために、以下の指示コードを用いています。

【ActiveSheet.Pictures.Insert(***)】

※***の部分にはファイルのフルパスを入力

 

しかし単純にこのコードを使うだけでは、画像をハイパーリンクとして張り付けてしまうため、保存場所のフォルダ名や、張り付けた画像のファイル名を変更してしまうと、うまく表示できなくなってしまいます。

 

その問題を回避するために、先ほど紹介したVBAコードでは、

①張り付けた画像を切り取る【Selection.Cut】

②再び張り付ける【ActiveSheet.PasteSpecial】

ということを行っています。

 

すこしややこしいと思いますが、そうゆうもんだと思って受け入れてもらった方が良いと思います。

 

ぜひ覚えておきましょう。

スポンサーリンク

おわりに

というわけで今回は、指定したフォルダ内の画像をエクセルシートに順番に張り付けていく方法をご紹介しました。

 

応用すれば、フォルダが複数になったとしても、一瞬で対応が可能ですので、ぜひチャレンジしてみてください。

 

このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。

■もっと業務を効率的に行いたい。

■はやく帰って子供と遊びたい。

こんな人はぜひ他の記事も読んでみてください。

また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。

私にわかる範囲であればご協力いたしますので。(もちろん無料です。)

最後に・・・

このブログを応援してあげても良いよ、という方は以下のボタンをポチっていただけると嬉しいです。

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

にほんブログ村 IT技術ブログへ
にほんブログ村

Twitterもやっていますので、興味があれば覗いてみてください。

それではまた!

コメント

  1. 川浦 大輝 より:

    いつも困った時にサイトをみております。他のサイトよりシンプルでわかりやすく、なぜこのコードを書いているのかの説明もあり、勉強になります。ありがとうございます。
    1点、画像の貼り付けについてご質問があります。
    画像を貼り付ける際に、画像の任意の領域をトリミングして貼り付けることはできますでしょうか。

タイトルとURLをコピーしました