大量の画像をエクセルシートに張り付けたい。でも手作業でやってたら日が暮れそうだ。
この記事では、こんな悩みをエクセル(VBA)を使って一瞬で解決します。
さっそくやっていきましょう!
やりたいことのイメージ共有
本題に入る前に、この記事で紹介する内容を共有化しておきましょう。
以下のように、あるフォルダの中に複数の画像が入っています。
(私のブログ記事のサムネイル画像を使っています。今回は7つの画像だけですが、何枚でも対応可能です。)
この画像たちをエクセルシートにひとつひとつ自動で張り付けていく方法をご紹介していきます。
最終的な完成イメージは以下のようになります。
画像が保存されているフォルダもセル上に記入する方式にしていますので、非常に使い勝手は良いと思います。
あなたのやりたいこととイメージが一致していれば、ぜひ続きをご覧ください。
下準備:エクセルシートを整える
今回は以下のようにA2セルに画像が保存されている場所を記入するようにしています。
また、A4セルから下方向に画像をどんどん張り付けていこうと思います。
このままでは画像を張り付けたときに、セルの高さが足りず、画像が重なってしまうので、セルの高さをあらかじめ調整しておきましょう。
以下の画像を参考に行の高さを調整します。
手順①:行全体を適当に選択し、右クリック
手順②:行の高さを選択
手順③:行数を入力⇒OK
(今回は行の高さが100でちょうどよくなるようにVBAコードを記述しています。ここの数字と、のちほど紹介するVBAコード中の数字が一致していれば問題ありません。)
すると以下のようにエクセルシート上のセルの高さが大きくなったと思います。
今回はこのセルの高さと一致するように画像をはりつけていきます。
事前準備が整ったら、次はVBAコードを記入していきます。
VBAの使いかたがわからない、という方は以下の記事を参考に、コードを記述できる環境を整えておきましょう。
フォルダ内の画像を順番に張り付けていく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を使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。
私にわかる範囲であればご協力いたしますので。(もちろん無料です。)
最後に・・・
このブログを応援してあげても良いよ、という方は以下のボタンをポチっていただけると嬉しいです。
Twitterもやっていますので、興味があれば覗いてみてください。
それではまた!
コメント
いつも困った時にサイトをみております。他のサイトよりシンプルでわかりやすく、なぜこのコードを書いているのかの説明もあり、勉強になります。ありがとうございます。
1点、画像の貼り付けについてご質問があります。
画像を貼り付ける際に、画像の任意の領域をトリミングして貼り付けることはできますでしょうか。
ご質問ありがとうございます(^^)
できますよ!
記事中コード内に画像の高さを調整している部分があると思います。
そこに
Selection.ShapeRange.PictureFormat.CropTop = 30
を追加してみてください。
これで上側が少しトリミングされると思います。
トリミング方法については以下の記事で解説しています。
トリミング領域の変更方法等はこちらをご確認ください。
難しければまたお気軽にご質問いただければと思います(^^)