現場代理人必見!写真帖作成マクロで何百枚もの写真編集作業をボタン1クリックで完了させる方法とは

 

現場で撮影した何百枚、何千枚もの写真を、1枚ずつエクセルに貼り付けて写真帖を作成していませんか?

 

VBAを使えば、大量の写真貼り付け作業をボタン1クリックで自動処理できます。

 

この記事では、現場代理人の方が抱える「写真帖作成の手間と時間」という悩みを、写真帖作成マクロを使って根本から解決する方法を解説します。

写真の取り込みから、ファイル名の表示、更新日の表示まで、実際のVBAコードを交えながら紹介しますので、ぜひ最後まで読んでみてください。

 

広告

現場代理人が写真帖作成に時間を奪われる3つの理由

現場代理人の方にとって、写真帖の作成は避けて通れない業務のひとつです。

工事の進捗記録、施工前・施工後の比較記録、検査用の提出書類など、写真帖を必要とする場面は現場ごとに数多くあります。

 

しかし実態を見ると、

定時まで現場で作業をして、残業時間を使って写真編集をしている現場代理人の方が多いのが現実

です。

 

その作業の中身を具体的に整理すると、次の3つが時間を奪っている大きな要因になっています。

 

①写真を1枚ずつ手作業で貼り付けている

エクセルに写真を貼り付ける作業は、「挿入」→「画像」→「ファイル選択」→「貼り付け」→「サイズ調整」という手順を写真の枚数だけ繰り返します。

 

写真が10枚程度なら何とかなりますが、1現場で100枚、200枚となると話は別です。

 

単純計算で1枚あたり2〜3分かかるとすれば、100枚の写真帖を仕上げるのに3〜5時間かかることに。。。

これが毎月、毎週のように発生するとなると、写真帖作成だけで相当な残業時間が積み上がっていきます。

 

②写真のファイル名や撮影日を手入力している

写真帖には、写真のキャプション(説明文)や撮影日・更新日を記載するのが一般的です。

ファイル名や日付の情報を1枚ずつ目視で確認しながら手入力する作業は、ミスが発生しやすく、確認作業にも余計な時間がかかってしまいます。

 

「この写真はいつ撮ったっけ」「ファイル名の入力を1行ずれて入力してしまった」という無駄な時間を費やしている方が多いのではないでしょうか。

 

③写真のレイアウト調整に時間がかかっている

エクセルに写真を貼り付けると、サイズや位置がバラバラになることがほとんどです。

それを1枚ずつ手動でサイズ調整し、セルの位置に合わせて配置し直す作業は非常に手間がかかります。

 

複数ページにわたる写真帖を作成する場合、このレイアウト調整だけで数十分〜1時間以上かかることも珍しくありません。

 

写真帖作成マクロで解決できること

写真帖作成マクロを導入すると、上記の3つの問題をまとめて解決することができます。

 

写真帖作成マクロの概要を簡単に説明すると、

使い方は「フォルダを指定してボタンを押す」という操作だけ。たったこれだけの操作で写真の貼り付け・サイズ調整・ファイル名と更新日の表示まで、すべてを自動処理してくれる

です。

 

実際に私がある現場代理人の方から写真帖作成マクロの開発依頼を受けたとき、依頼者の方が毎月行っている写真編集作業の内容をヒアリングすると、「月に1回、2〜3日かけて写真帖を作成している」という状況でした。

マクロを導入した結果、その作業が1時間以内に完了するようになったという報告をいただいています。

 

自動化できる処理の内容

写真帖作成マクロで自動化できる主な処理内容は以下のとおりです。

 

  • 指定フォルダ内の写真ファイルを自動取得し、エクセルのセルに対して一定のサイズで自動配置する
  • 写真のファイル名(または写真のキャプションとなる任意のテキスト)を写真の下のセルに自動表示する
  • 写真ファイルの更新日(または作成日)を取得して、日付として自動表示する
  • 1ページあたりの写真枚数や配置レイアウトは、マクロ内の設定値を変更するだけで柔軟にカスタマイズ対応可能

 

関連記事「写真の貼付けを完全自動化」では、上記の機能の設定方法が解説されており、さらに写真帖作成マクロ(サンプル)をダウンロードすることもできます。

 

写真帖作成マクロを実際に動かして便利さを体感してみたい!という方は是非ダウンロードして使ってみてください。

 

写真帖作成マクロの基本的な仕組みを理解する

写真帖作成マクロは、

大きく分けて「①フォルダから写真ファイルのパスを取得する」「②写真をエクセルのセルに貼り付ける」「③ファイル名と更新日を表示する」という3つの処理で構成

されます。

 

それぞれの処理の役割を理解しておくと自分の業務に合わせてカスタマイズするときにとても役立つので、これから紹介するVBAコードの内容をしっかり確認してみてください。

 

①フォルダから写真ファイルのパスを取得するVBA

指定したフォルダ内にある写真ファイルの一覧を取得する処理がスタート地点です。

Sub フォルダ内写真パス取得()

Dim folderPath As String
Dim fileName As String
Dim i As Long

'写真が入っているフォルダのパスを指定
folderPath = "C:\写真フォルダ\"

'変数iは貼り付け開始行の管理に使用
i = 1

'フォルダ内のファイルを順番に取得
fileName = Dir(folderPath & "*.jpg")

Do While fileName <> ""
'取得したファイル名をA列に表示(確認用)
Cells(i, 1).Value = fileName
i = i + 1
'次のファイルを取得
fileName = Dir()
Loop

MsgBox "写真ファイルの取得が完了しました。"

End Sub

 

コードの流れを解説します。

 

folderPath に写真が保存されているフォルダのパスを指定します。

Dir() 関数を使うことで、指定フォルダ内に存在する .jpg 拡張子のファイルを順番に取得するという内容です。

 

Do While fileName <> “" のループで、フォルダ内にファイルが存在する限り繰り返し処理を実行します。

ファイルが見つからなくなると fileName が空文字になるため、ループが自動で終了する仕組みです。

 

まずこの処理でフォルダ内の写真ファイルを一覧取得できることを確認してから、次の貼り付け処理に進むと理解しやすくなります。

 

②写真をセルに自動貼り付けするVBA

フォルダ内の写真ファイルを取得した後、エクセルのセルに写真を自動貼り付けする処理を追加します。

Sub 写真自動貼り付け()

Dim folderPath As String
Dim fileName As String
Dim picPath As String
Dim pic As Picture
Dim targetCell As Range
Dim rowNum As Long
Dim colNum As Long
Dim photoCount As Long

'写真フォルダのパスを指定
folderPath = "C:\写真フォルダ\"

'1ページあたりの列数(横に並べる写真の数)
Dim colMax As Long
colMax = 3

rowNum = 2
colNum = 1
photoCount = 0

fileName = Dir(folderPath & "*.jpg")

Do While fileName <> ""

picPath = folderPath & fileName

'貼り付け先のセルを指定
Set targetCell = Cells(rowNum, colNum)

'写真を貼り付け
Set pic = ActiveSheet.Pictures.Insert(picPath)

'セルの位置とサイズに合わせて写真を配置
With pic
.Left = targetCell.Left + 2
.Top = targetCell.Top + 2
.Width = targetCell.Width - 4
.Height = targetCell.Height - 4
End With

photoCount = photoCount + 1
colNum = colNum + 1

'列数がcolMaxを超えたら次の行へ
If colNum > colMax Then
colNum = 1
rowNum = rowNum + 10 '行の高さに合わせて調整
End If

fileName = Dir()
Loop

MsgBox photoCount & "枚の写真を貼り付けました。"

End Sub

 

コードの流れを解説します。

 

colMax = 3 で1行あたりに横並びにする写真の枚数を設定しています。

colMax = 2 に変更すれば2列レイアウト、colMax = 4 に変更すれば4列レイアウトになります。

 

ActiveSheet.Pictures.Insert(picPath) で写真ファイルを読み込んで貼り付けます。

貼り付けた写真のサイズと位置は、targetCell(貼り付け先のセル)の位置と幅・高さに合わせて自動調整しています。

 

rowNum + 10 の「10」はセルの行高に応じた値で、写真の高さに合わせてこの数値を変更することで、レイアウトを自由に調整することが可能です。

 

③ファイル名と更新日を自動表示するVBA

写真の貼り付けが完了したら、写真の下のセルにファイル名と更新日を自動で表示する処理を追加します。

Sub ファイル名と更新日表示()

Dim folderPath As String
Dim fileName As String
Dim picPath As String
Dim rowNum As Long
Dim colNum As Long
Dim colMax As Long
Dim updateDate As Date

folderPath = "C:\写真フォルダ\"
colMax = 3
rowNum = 2
colNum = 1

fileName = Dir(folderPath & "*.jpg")

Do While fileName <> ""

picPath = folderPath & fileName

'写真ファイルの更新日を取得
updateDate = FileDateTime(picPath)

'写真の下の行にファイル名を表示
Cells(rowNum + 8, colNum).Value = fileName

'更新日を表示(日付フォーマット指定)
Cells(rowNum + 9, colNum).Value = Format(updateDate, "yyyy/mm/dd")

colNum = colNum + 1

If colNum > colMax Then
colNum = 1
rowNum = rowNum + 10
End If

fileName = Dir()
Loop

MsgBox "ファイル名と更新日の表示が完了しました。"

End Sub

 

コードの流れを解説します。

 

FileDateTime(picPath) は、指定したファイルの更新日時を取得するVBAの関数です。

この関数を使うことで、写真ファイルそのものが持っている更新日情報を自動的に取得できます。

 

Format(updateDate, “yyyy/mm/dd") で、取得した日付を「2025/04/01」という形式に整えて表示します。

 

Cells(rowNum + 8, colNum) の「+8」は写真の貼り付け位置から何行下にファイル名を表示するかを設定しています。

写真の高さや行設定に合わせてこの数値を変更しカスタマイズしてください。

 

この3つの処理(パス取得・貼り付け・情報表示)を1つのマクロにまとめることで、ボタン1クリックで写真帖が完成する仕組みが出来上がります。

 

写真帖作成マクロをボタンに登録して使いやすくする方法

VBAコードを書いただけでは、毎回VBEエディタを開いて実行する必要があります。

現場代理人の方がスムーズに使えるようにするには、エクセルシート上にボタンを配置して、ワンクリックで実行できる状態にしておくことが大切です。

ボタンの設置方法は、「開発」タブ → 「挿入」→ 「ボタン(フォームコントロール)」を選択して、シート上に任意のサイズでドラッグします。

ボタン作成方法

 

「マクロの登録」ダイアログが開いたら、先ほど作成したマクロ名を選んで「OK」をクリックすれば登録完了です。

ボタン上で右クリックして「テキストの編集」を選び、「▶ 写真帖作成スタート」などのわかりやすいボタン名に変更してください。

 

一度ボタンを設置してしまえば、次回からはボタンを押すだけで写真帖を作成させることができます。

誰でも迷わず使えるシンプルな操作性に仕上げることが、マクロを現場で定着させるための重要なポイントです。

 

写真帖作成マクロを実装する際の注意点

写真帖作成マクロを実際の業務に導入するにあたって、いくつか押さえておくべき注意点があります。

事前に把握しておかないと、「マクロを実行したのに写真が貼り付けられない」「想定と違うレイアウトになった」という問題が発生するので注意してください。

 

フォルダパスの記述ミスに注意する

folderPath = “C:\写真フォルダ\" の記述は、実際に写真が保存されているフォルダのパスに書き換える必要があります。

フォルダパスの末尾に \(バックスラッシュ)を忘れると、ファイルが正しく認識されないため、必ず末尾に \ を付けてください。

また、フォルダ名やファイル名に日本語を使っている場合、文字コードの問題で正しく動作しないことがあります。

 

フォルダ名・ファイル名は半角英数字で管理することを推奨します。

 

対応する画像ファイルの拡張子を確認する

サンプルコードでは *.jpg で検索していますが、現場で使っているカメラやスマートフォンの機種によっては *.jpeg、*.png、*.heic などの拡張子が混在していることがあります。

 

Dir() 関数で複数の拡張子に対応するには、拡張子ごとに処理を繰り返す仕組みを追加するか、指定フォルダ内の写真をすべてJPEG形式に統一するかのどちらかで対応すると良いでしょう。

 

セルの行高・列幅を事前に設定しておく

写真をセルに合わせてサイズ調整する処理を使っているため、セルの行高と列幅が写真のサイズに対して小さすぎると、縦横比が崩れた見苦しいレイアウトになってしまいます。

マクロを実行する前に、写真を配置する列の幅と行の高さをあらかじめ設定しておきましょう。

 

写真帖作成マクロをさらに実用的にするカスタマイズ例

基本的な写真帖作成マクロを習得したら、現場の業務に合わせてカスタマイズすることで、さらに便利な使い方ができます。

 

フォルダ選択ダイアログを追加する

現在のサンプルコードでは、folderPath にフォルダパスを直接書き込んでいます。

現場ごとに保存先フォルダが異なる場合は、フォルダ選択ダイアログマクロを追加することで、毎回コードを書き換える手間をなくすことが可能です。

'フォルダ選択ダイアログを表示する処理
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)

fd.Title = "写真フォルダを選択してください"

If fd.Show = True Then
folderPath = fd.SelectedItems(1) & "\"
Else
MsgBox "フォルダが選択されませんでした。処理を終了します。"
Exit Sub
End If

 

このコードを追加することで、マクロを実行するたびにフォルダ選択ダイアログが表示されます。

 

関連記事「ダイアログからフォルダパスを取得するマクロ」では、ある現場代理人様からの依頼で作成した写真帖作成マクロをダウンロードすることができます。

 

ダイアログから写真が保存されているフォルダを指定する仕様になっていて、かなり使いやすいマクロになっているので是非参考にしてみてください。

 

施工前・施工後の写真を横並びで配置する

現場写真帖では、「施工前」と「施工後」の写真を横に並べて比較表示するレイアウトが求められることがあります。

そのような場合は、フォルダを2つ(施工前フォルダ・施工後フォルダ)用意しておき、それぞれのフォルダから写真を取得してセルに貼り付ける仕様にするとよいでしょう。

'施工前フォルダと施工後フォルダを指定
Dim beforePath As String
Dim afterPath As String

beforePath = "C:\施工前写真\"
afterPath = "C:\施工後写真\"

'施工前写真をA列に、施工後写真をB列に貼り付ける処理を記述

 

施工前の写真をA列、施工後の写真をB列に配置することで、比較しやすいレイアウトの写真帖に仕上げることができます。

 

写真の枚数が多い場合に複数シートへ自動振り分けする

1枚のシートに表示できる写真の枚数には限界があります。

 

写真の枚数が多い場合は、設定した枚数(例:1シートあたり20枚)に達したら自動的に次のシートへ移って貼り付けを継続する仕様にすると良いでしょう。

大量の写真データをまとめて貼り付けることができ、複数シートにまたがる写真帖に仕上げることができます。

'1シートあたりの最大写真枚数を設定
Dim maxPerSheet As Long
maxPerSheet = 20

'写真の枚数がmaxPerSheetを超えたら次のシートを追加
If photoCount Mod maxPerSheet = 0 Then
Sheets.Add After:=ActiveSheet
rowNum = 2
colNum = 1
End If

 

photoCount Mod maxPerSheet = 0 の条件で、写真の枚数が設定した最大枚数の倍数になったタイミングで新しいシートを追加する処理が開始されます。

シートが自動追加されることで、写真がどれだけ多くても1回の実行で写真帖をいっきに完成させることが可能。

 

まとめ ~ 現場代理人の写真帖作成はマクロで自動化が必須 ~

現場代理人の方が毎月多くの時間を費やしている写真帖作成作業は、VBAを使った自動化で大幅に短縮することができます。

 

何百枚もの写真貼り付け・ファイル名表示・更新日表示がボタン1クリックで処理可能なので、時間の短縮だけでなく手作業によるレイアウトのズレやファイル名の入力ミスといった人的エラーもなくすことが可能です。

 

マクロ導入後の空いた時間を、現場管理の本来の業務に充てられるようになることが、写真帖作成マクロ導入の最大のメリットだと私は考えています。

 

もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。

 

業務内容に合わせたオーダーメイドマクロを設定させていただきます。

最後まで読んでいただきありがとうございました。エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。