SkillStack Lab 運営者の「スタック」です。
仕事で報告書を作るとき、エクセルに写真を一枚ずつ貼り付けて、角を合わせてサイズを調整して…という作業に追われていませんか?
特に工事写真台帳のように大量の画像を扱う場合、手作業だと縦横比が崩れたり、結合セルの真ん中に綺麗に収まらなかったりと、意外と神経を使いますよね。
今回は、そんな面倒な作業を一括で終わらせるマクロについて、ファイル名順の処理や重くなる問題への対策も含めて解説していきます。

- 画像の縦横比を崩さずセルに合わせて自動調整する仕組み
- 結合セルの中央にピッタリ配置する計算ロジック
- フォルダ内の複数画像をファイル名順に一括処理する方法
- ファイルサイズ肥大化やエラー時の具体的な対処法
【結論】エクセルに写真を貼り付け、自動サイズ調整するVBAコード
「今すぐ仕事で使いたい!」「面倒な設定は後回しにしたい」という方のために、選択したセル(結合セル対応)に合わせて写真を自動サイズ調整し、中央に貼り付ける実用的なVBAコードを先にご紹介します。
以下のコードをコピーして、エクセルの標準モジュールに貼り付けるだけで、すぐに使えます。
Sub PasteAndFitPicture()
Dim picPath As String
Dim pic As Picture
Dim targetCell As Range
' 画像を選択
picPath = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.png;*.gif")
If picPath = "False" Then Exit Sub
' 貼り付け先のセルを取得(結合セル対応)
Set targetCell = ActiveCell.MergeArea
' 画像を挿入
Set pic = ActiveSheet.Pictures.Insert(picPath)
' 縦横比を維持してサイズ調整し、中央に配置
With pic
.ShapeRange.LockAspectRatio = msoTrue
If .Width / targetCell.Width > .Height / targetCell.Height Then
.Width = targetCell.Width
Else
.Height = targetCell.Height
End If
.Left = targetCell.Left + (targetCell.Width - .Width) / 2
.Top = targetCell.Top + (targetCell.Height - .Height) / 2
End With
End Sub
なぜこのコードで綺麗に配置できるのか、複数枚を一括処理するにはどうすればいいのかといった詳しい仕組みについては、ここから順番に解説していきますね。
写真の縦横比を維持!サイズ調整マクロの基礎知識

まずは、VBAを使って画像を思い通りに制御するための基礎的な考え方から見ていきましょう。
ただ貼り付けるだけなら簡単ですが、「綺麗に」「枠に合わせて」配置するには、ちょっとした算数とコツが必要です。
ここでは、プロっぽい仕上がりにするために避けて通れない、いくつかの重要なロジックを深掘りします。
縦横比を維持してセルに合わせる
写真をセルに貼り付けるとき、一番やりがちなミスが「写真が縦長になったり横長になったりして歪んでしまう」ことですよね。
これは、セルの高さと幅に無理やり合わせようとするからです。
これを防ぐためには、アスペクト比(縦横比)の固定が重要になります。VBAでコードを書く際は、単純に「画像の高さ=セルの高さ」とするのではなく、以下の手順を踏む必要があります。
具体的には、「セルの枠内に収まる最大のサイズ」を計算で求めるわけですが、ここで少しだけ算数の話をしますね。
比率維持の計算ステップ
画像を歪ませないためには、以下の手順で計算します。
- セルの幅と高さ、画像の幅と高さを取得する。
- 「横幅に合わせた場合の縮小率(セル幅 ÷ 画像幅)」を計算する。
- 「高さに合わせた場合の縮小率(セル高さ ÷ 画像高さ)」を計算する。
- 2つの縮小率のうち、小さい方を採用する。

こうすることで、縦長の写真を横長のセルに入れたとしても、はみ出さずに余白を残して収めることができます。
「小さい方の縮小率」を選ぶのが、写真を切らずに全体を表示させる最大のポイントですね。これをコードに落とし込むことで、どんな形状の写真が来ても、自動的に最適なサイズが算出されるようになります。
結合セルに画像をピッタリ収める
実務で作る帳票や台帳って、セルを結合して大きな「写真貼り付け欄」を作ることが多いですよね。例えば、B2からE10までを結合して一つの枠にする、といった具合です。
でも、VBAで普通にセル(ActiveCell)を指定すると、結合された範囲全体ではなく、左上の1マス分しか認識してくれないことが多々あります。
ここで使うのが MergeArea というプロパティです。
MergeAreaとは?

選択しているセルが結合されている場合、その結合範囲全体をひとつの塊(Rangeオブジェクト)として扱ってくれる便利な命令です。
これを使えば、「B2セルからD10セルまで結合されている」といった場合でも、その大きな四角形の幅(Width)と高さ(Height)を正確に取得できます。
これを知らないと、「マクロを実行したら、写真が豆粒みたいなサイズで左上にちょこんと貼られただけだった…」なんて悲劇が起きてしまうので注意が必要ですね。
実務レベルのマクロでは、必ずと言っていいほどこの処理が入っています。
写真をセルの真ん中に配置する
サイズ調整ができたら、次は配置です。左上(Left, Top)をセルの左上に合わせるだけだと、余白が右と下に偏ってしまい、見た目が少し不格好になります。
報告書としての体裁を整えるなら、画像はセルの中心にあるべきですよね。
プロっぽい仕上がりにするには、センタリング(中央揃え)の計算を入れましょう。計算式は意外とシンプルです。
左位置(Left) = セルの左位置 + (セルの幅 – 画像の幅) ÷ 2
上位置(Top) = セルの上位置 + (セルの高さ – 画像の高さ) ÷ 2

この計算を上下左右で行うことで、どんなサイズの写真でも、セルのど真ん中にドンと配置されます。この「余白を2で割る」という処理を入れるだけで、報告書のクオリティがグッと上がりますよ。
また、厳密にはエクセルの画面表示倍率やディスプレイ解像度によって数ピクセルのズレが生じることがあるので、わずかにマージン(余白)を持たせて計算するのがコツです。
フォルダ内の複数を一括処理する

1枚貼るだけなら手作業でもいいですが、10枚、20枚となるとマクロの出番です。
指定したフォルダに入っている画像を、次々と読み込んで貼り付けていく処理を作ります。
一般的には Dir 関数や FileSystemObject を使って、フォルダ内のファイル一覧を取得します。「拡張子が .jpg のファイルだけを探す」といった条件指定も可能です。
ループ処理の注意点
画像を連続で貼り付けるときは、次に貼り付けるセルをどうやって決めるかが重要です。
「アクティブセルの下の行に移動する」のか、「特定の名前がついたセルに順番に入れる」のか、事前にルールを決めてコードを書く必要があります。
特に工事写真台帳のテンプレートなどは、「次の写真枠」が決まった位置にあることが多いので、Offset プロパティを使って「10行下のセルへ移動」といった制御をループの中に組み込むのが一般的です。
ファイル名順に並べて貼り付ける
フォルダ内の一括処理でよくあるトラブルが、「写真が順番通りに貼り付けられない」という問題です。
実は、パソコン内部でのファイル取得順序は、私たちがフォルダで見ている「名前順」とは限らないんです。
現場写真などで「001.jpg」「002.jpg」と番号を振っているのに、マクロを通すと「1.jpg」の次に「10.jpg」が来てしまい、バラバラになってしまうと困りますよね。
これを解決するには、一度ファイル名をすべて取得してから、配列などで並び替え(ソート)を行う処理を挟む必要があります。
少しコードは複雑になりますが、業務で使うなら必須の機能かなと思います。バブルソートなどのアルゴリズムを実装して、意図した順番通りに写真を並べる工夫が必要です。
💡 ネットのコードをコピペしても、自分のファイルに合わせて修正できず困っていませんか?
ブログのテキストや分厚い専門書でVBAのコードを解読するのは、実は非常にハードルが高く、9割の人が途中で挫折してしまいます。
確実に実務で使えるスキルを身につけるなら、文字を追うのではなく「プロの画面の動きを動画でそのまま真似する」のが一番の近道です。
元社内SEの視点で、小難しい理論は抜きにして、明日からの面倒な手作業を劇的にラクにする「超・実践的なUdemy神講座」だけを厳選しました。
※Udemyは頻繁に90%OFFセール(1,500円前後)を行っています。絶対に定価では買わず、まずはセールが開催されていないかチェックして、賢く自己投資を始めてみてください!
\ 動画を見てマネするだけで自動化 /
エクセルへの写真貼り付けと自動サイズ調整マクロの応用
基本的な仕組みがわかったところで、次はもう少し実践的な、現場レベルでの活用法やトラブルシューティングについてお話しします。
私が実際に相談を受けた内容なども踏まえて、より深く解説しますね。
工事写真台帳の作成を自動化する
「エクセル 写真 貼り付け 自動サイズ調整 マクロ」と検索される方の中で、最もニーズが高いのが建設業界の工事写真台帳ではないでしょうか。
A4縦の用紙に写真を3枚並べて、右側に説明書きを入れる…というフォーマットが一般的ですよね。
この場合、単に画像を貼るだけでなく、以下の機能も組み合わせると最強のツールになります。
- 画像のファイル名をそのまま「説明欄」に転記する
- 撮影日などのExif情報を読み取って記載する
- 改ページに合わせて、新しいページ(行)を自動で追加する
特に、写真の中に写っている「黒板(小黒板)」の文字が読めるサイズで貼り付けられているかは重要です。
ここまで自動化できれば、現場から帰ってきて数時間かかっていた事務作業が、ワンクリック数分で終わるようになります。これは本当に効果絶大です。
大量の画像で重くなるのを防ぐ
写真をたくさん貼り付けたエクセルファイル、メールで送れないほど重くなっていませんか?
最近のスマホやデジカメは高画質なので、そのまま貼り付けるとファイルサイズが爆発的に増えてしまいます。
ここで重要なのが「リンク貼り付け」と「埋め込み貼り付け」の違いです。
| 貼り付け方式 | メリット | デメリット |
|---|---|---|
| 埋め込み | ファイル単体で管理・配布できる | ファイルサイズが巨大になる |
| リンク | ファイルサイズが非常に軽い | 元画像を移動・削除すると表示されなくなる |
実務では、客先に提出することを考えると「埋め込み」が安全ですが、そのままだと重すぎます。
対策としては、VBAからエクセルの「図の圧縮」機能を呼び出すのが有効です。
Application.CommandBars.ExecuteMso "PicturesCompress" などのコマンドを使って、画質を少し落として容量を削減する処理をマクロの最後に追加しておきましょう。

マクロで貼り付けできない時の対処
「コードは合っているはずなのに、なぜか動かない…」という場合、いくつか原因が考えられます。
よくあるのがセキュリティ設定です。
会社のエクセルだと、マクロの実行がブロックされていることがあります。まずは「開発」タブからマクロのセキュリティ設定を確認してみましょう。
また、画像のパス(保存場所)に日本語が含まれているとエラーになるケースや、結合セルの指定が間違っていて「貼り付け先の幅が0」と判定され、エラーが出ることもあります。
動かないときは、まずは「F8キー」を押して、1行ずつコードを実行(ステップイン)してみるのが解決への近道です。
【元情シスからのワンポイントアドバイス】
VBAのエラー対応に何時間も溶かしてしまうのは、本来の業務効率化とは逆行してしまいます。
最近では、VBA特有の難解なエラーや属人化を嫌い、より汎用性が高く転職時の市場価値も直結する「Python」を使ってエクセル業務を自動化する企業が急増しています。
「コピペVBA職人」から脱却し、未経験から一生モノのPythonスキルを身につけるなら、プロのマンツーマン指導が受けられるスクールの無料カウンセリングで、まずはキャリアのプロに相談してみるのが圧倒的な近道です。
\ VBAの限界を感じたらPythonへ /
フリーソフトやアプリとの違い

最近は、スマホで撮るだけで台帳ができるアプリや、無料で使えるフリーソフトもたくさんありますよね。
「わざわざマクロを作る必要ある?」と思うかもしれません。それぞれの特徴を比較してみましょう。
| ツール | コスト | 自由度 | 特徴 |
|---|---|---|---|
| Excelマクロ | 無料 | 高 | 自社フォーマットに完全対応可能 |
| スマホアプリ | 有料が多い | 低 | 現場で完結するがフォーマット固定が多い |
| フリーソフト | 無料 | 中 | 操作は簡単だが、細かい微調整が難しい |
マクロのメリット
- 完全無料:エクセルさえあれば追加費用がかからない。
- カスタマイズ自由:自社の指定フォーマットに1ミリ単位で合わせられる。
- セキュリティ:外部サーバーにデータを上げなくて済む。
アプリは手軽ですが、月額費用がかかったり、フォーマットが決まっていたりします。
「いつものあの帳票」をそのまま使いたいなら、やはりエクセルマクロに軍配が上がるかなと思います。
【警告】ネットのコードをコピペするだけの「VBA職人」は危険です
今回紹介したマクロを使えば、面倒な写真の自動サイズ調整も一瞬で終わります。しかし、仕組みを理解せずにコピペで作ったツールは、エラーが起きた瞬間に誰も直せない「ブラックボックス」と化します。
エラーに怯えずに業務を根本から自動化するなら、Udemyの「定額制(パーソナルプラン)」で、プロから体系的にVBAやPythonを学ぶのが一番の近道です。
- コピペから卒業できる「実務直結のVBA基礎」
- エラーの原因を自分で特定できる「デバッグ術」
- AIにコードを書かせる「最新の生成AIプロンプト」
関連する複数スキルを1つずつ単発で買うより、月額サブスクでまとめて学ぶ方が圧倒的に高コスパです。
7日間の無料体験もあるので、まずはノーリスクで一生モノの自動化スキルを手に入れましょう。
\ 自動化スキルを月額サブスクで学び放題 /
※会社経費で落とすための稟議の通し方はこちらの記事で解説しています。
エクセルの写真貼り付け自動サイズ調整マクロで業務改善
今回は、エクセルに写真を自動でサイズ調整して貼り付けるマクロについて解説してきました。
縦横比の維持、センタリング、そして一括処理。これらを組み合わせることで、単純作業の時間を大幅に削減できます。
最初はコードを書くのが難しく感じるかもしれませんが、一度作ってしまえば、その後の作業はずっと楽になります。
「手作業での貼り付け」から卒業して、その時間を分析や現場の管理など、もっと重要な仕事に使っていきましょう!
もし「自分でコードを書くのはやっぱり不安…」という場合は、まずは簡単な「1枚貼り付け」から試してみて、少しずつ機能を足していくのがおすすめですよ。
より詳細な仕様については、マイクロソフトの公式ドキュメントなども参考にしてみてください。(出典:Microsoft Learn『Shapes.AddPicture メソッド (Excel)』)

