Googleスプレッドシートで複数枚の画像をまとめて挿入する方法【GAS活用】

「GoogleスプレッドシートでもExcelみたいにまとめて画像を挿入できたら便利なのに…」と思ったことはありませんか?
Excelでは画像を複数選択して一括挿入できますが、Googleスプレッドシートの標準機能では1枚ずつ手動で追加しなければなりません。
画像の枚数が多いと作業も大変になってきます。
そこで今回は、Google Apps Script を活用してGoogleスプレッドシートに複数の画像を一括挿入する方法をご紹介します。
今回のGASを使えば画像挿入作業を効率化し、業務の生産性をアップできます。

完成イメージ

- 選択したセルから画像を1行ずつセル内に挿入
- Googleドライブのフォルダを指定して一括処理
Googleドライブ内にある画像を使って、スプレッドシート内にセル内画像として一括挿入します。
手順

GASによる画像一括挿入では、Google ドライブ内にある画像を使用します。
そのため、Googleドライブに画像保存用の新しいフォルダを作成します。(好きな名前で作成)
その後、作成したフォルダに画像ファイル(PNG, JPG, GIF) をアップロードします。

セル内画像として挿入するため、挿入先のセルを選択します。
選択したセルを基準に、1行ずつ下に画像が挿入されます。

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function showFolderInputDialog() {
var ui = SpreadsheetApp.getUi();
var response = ui.prompt("GoogleドライブのフォルダIDまたはフォルダ名を入力してください:");
if (response.getSelectedButton() == ui.Button.OK) {
var folderInput = response.getResponseText();
insertImagesFromDrive(folderInput);
}
}
function insertImagesFromDrive(folderInput) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var folder = getFolderByIdOrName(folderInput);
if (!folder) {
SpreadsheetApp.getUi().alert("指定されたフォルダが見つかりません。");
return;
}
var files = folder.getFiles();
var range = sheet.getActiveRange();
var startRow = range.getRow();
var col = range.getColumn();
var supportedFormats = ["image/png", "image/jpeg", "image/gif"];
var row = startRow;
while (files.hasNext()) {
var file = files.next();
var mimeType = file.getMimeType();
if (supportedFormats.includes(mimeType)) {
try {
var publicUrl = getPublicImageUrl(file);
if (publicUrl) {
sheet.getRange(row, col).setFormula(`=IMAGE("${publicUrl}")`);
row++;
}
} catch (e) {
Logger.log("Error processing file: " + file.getName() + " - " + e.toString());
}
}
}
}
function getFolderByIdOrName(folderInput) {
try {
return DriveApp.getFolderById(folderInput);
} catch (e) {
var folders = DriveApp.getFoldersByName(folderInput);
return folders.hasNext() ? folders.next() : null;
}
}
function getPublicImageUrl(file) {
try {
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
return "https://drive.google.com/uc?id=" + file.getId();
} catch (e) {
Logger.log("Failed to set sharing for file: " + file.getName() + " - " + e.toString());
return null;
}
}
スクリプトの説明
- ダイアログ表示でGoogleドライブのフォルダIDまたはフォルダ名を入力
-
function showFolderInputDialog() { var ui = SpreadsheetApp.getUi(); var response = ui.prompt("GoogleドライブのフォルダIDまたはフォルダ名を入力してください:"); if (response.getSelectedButton() == ui.Button.OK) { var folderInput = response.getResponseText(); insertImagesFromDrive(folderInput); } }
SpreadsheetApp.getUi().prompt()
を使って、ユーザーにフォルダの指定を求めます。- OKボタンを押すと、
insertImagesFromDrive(folderInput)
を実行 し、入力したフォルダの画像を処理します。
- 指定フォルダの画像を取得し、選択したセルを基準に1行ずつ挿入
-
function insertImagesFromDrive(folderInput) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var folder = getFolderByIdOrName(folderInput); if (!folder) { SpreadsheetApp.getUi().alert("指定されたフォルダが見つかりません。"); return; } var files = folder.getFiles(); var range = sheet.getActiveRange(); var startRow = range.getRow(); var col = range.getColumn(); var supportedFormats = ["image/png", "image/jpeg", "image/gif"]; var row = startRow; while (files.hasNext()) { var file = files.next(); var mimeType = file.getMimeType(); if (supportedFormats.includes(mimeType)) { try { var publicUrl = getPublicImageUrl(file); if (publicUrl) { sheet.getRange(row, col).setFormula(`=IMAGE("${publicUrl}")`); row++; } } catch (e) { Logger.log("Error processing file: " + file.getName() + " - " + e.toString()); } } } }
getFolderByIdOrName(folderInput)
を使って、フォルダIDかフォルダ名で該当のフォルダを探します。sheet.getActiveRange()
を使い、ユーザーが選択したセルの行 (startRow
) と列 (col
) を取得します。ここを基準に画像を順番に挿入します。getFiles()
を使い、フォルダ内の全ファイルを取得します。getPublicImageUrl(file)
を使って、画像を 「リンクを知っている全員が閲覧可」 に設定します。- Googleドライブの
uc?id=FILE_ID
の形式でURLを取得します。 sheet.getRange(row, col).setFormula("=IMAGE('URL')")
を使い、スプレッドシートのセル内に画像を埋め込みます。row++
を実行して 次の行に移動 しながら画像を順番に挿入します。
- フォルダIDまたはフォルダ名でGoogleドライブのフォルダを取得
-
function getFolderByIdOrName(folderInput) { try { return DriveApp.getFolderById(folderInput); } catch (e) { var folders = DriveApp.getFoldersByName(folderInput); return folders.hasNext() ? folders.next() : null; } }
DriveApp.getFolderById(folderInput)
を試し、フォルダIDとして有効ならそのフォルダを返します。- IDが無効なら、フォルダ名で検索し、最初に見つかったフォルダを返します。
- どちらも見つからなければ
null
を返します。
- Googleドライブの画像を「公開」にし、そのURLを取得
-
function getPublicImageUrl(file) { try { file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); return "https://drive.google.com/uc?id=" + file.getId(); } catch (e) { Logger.log("Failed to set sharing for file: " + file.getName() + " - " + e.toString()); return null; } }
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
でファイルの公開設定を「リンクを知っている全員が閲覧可」に変更します。- これにより、画像を手動で公開設定する必要がなくなります。
- Googleドライブの
uc?id=FILE_ID
の形式でURLを取得します。 - この形式を使えば、
=IMAGE("URL")
でスプレッドシート内に画像を直接表示可能です。

スクリプトを書いたら、好きな名前を付けて保存します。
(例:「画像一括挿入」)

スクリプトを実行すると、画像フォルダを指定するためのダイアログボックスが表示されます。
フォルダIDもしくはフォルダ名を入力します。
入力後、「OK」をクリックします。

選択したセルを基準に、1行ずつセル内に画像が挿入されます。
GAS実行時の注意事項
- 対応フォーマットは PNG, JPG, GIF のみ
→ PDFやSVGは非対応です - Googleドライブの画像を「公開」にする必要がある
→ 今回のスクリプトでは自動で設定を「公開」に変更します - 大量の画像を処理するとGoogle Drive APIの制限にかかる
→ 50枚を超えるなど画像が大量にある場合は、分割して実行が必要です
GASで一括画像挿入のメリット・デメリット
メリット | デメリット |
---|---|
手作業不要で画像を一括挿入できる 選択したセルを基準に1行ずつ挿入可能 Google Drive APIで自動的に画像の公開設定を変更 | Googleドライブに画像をアップロードする手間がある Google Drive API の制限に注意が必要 |
まとめ
Google Apps Script (GAS) を活用することで、Googleスプレッドシートで画像の一括挿入が可能となります。
事前準備として画像をGoogleドライブにアップロードする手間がありますが、手作業で一つずつ画像挿入するのと比べて作業効率がアップします。
セル内画像の挿入をまとめて行いたい時に今回のGASをご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント