セル内画像は表の行に対応する画像を管理するときに使います。
公開画像のURL一覧ならIMAGE関数、手元や非公開Driveの画像なら挿入メニューを選びます。
練習データ・スライド・PDF・コードTXTをダウンロードすると、同じ入力で試せます。
実務ファイルは変更前にコピーを作ります。
画面は2026年10月2日のパソコンのブラウザー版です。
IMAGEの4モードを同じ画像で比べる
image-practice.tsvを画像練習のA1へ読み込みます。
A2はCGメソッドの公開練習画像URLです。
B:E列の幅を180ピクセル、2行目の高さを100ピクセルに設定し、B2~E2へ順に次の式を入れます。
=IMAGE(A2,1)=IMAGE(A2,2)=IMAGE(A2,3)=IMAGE(A2,4,60,160)
| モード | 表示 |
|---|---|
| 1・省略時 | 縦横比を保ってセルに収める |
| 2 | 縦横比を変えてセルに合わせる |
| 3 | 原寸のまま。セルからはみ出す部分は切れる |
| 4 | 高さ・幅をピクセル指定。例は高さ60、幅160 |
画像に合わせてセルの幅や行高を自動変更するモードはありません。
モード1でも画像が小さければセルのサイズを確認します。
URLは引用符で囲むか、A2のようなセルを参照します。
初回の外部取得許可と表示されない場合
今回の実シートは、初回に#REF!となり、外部URLからデータを取得するアクセス許可の案内が出ました。
練習ファイルと画像URLを確認してアクセスを許可すると、4つの画像が表示されました。
表示だけのAPI値では画像の見た目を確認できないため、実画面も確認しています。
エラーの理由を読み、アクセス許可、URLの誤り、認証が必要なページ、対応していない画像形式を切り分けます。
画像ファイルではなく、画像のあるWebページのURLを渡していないかも確認します。
非公開画像を一般公開に変えて解決しようとせず、メニューからの挿入を選びます。
公式仕様ではdrive.google.comのURLとSVGはIMAGEの対象外です。
Driveの共有リンクをuc形式へ変換する旧手順は使いません。
NOWやRANDなど変動する関数を画像のベースURLへ使う制限もあります。
メニューでセル内・セル上へ入れる
画像を入れるセルを選び、挿入 → 画像 → セル内に画像を挿入を開き、アップロードやGoogleドライブから選びます。
非公開のDrive画像は、アクセスできるアカウントで選びます。
セル内画像と文字列は同じセルへ置けないため、説明は別列へ入れます。
セル上の画像は表の上に浮くオブジェクトで、行の並べ替えと画像の対応を同じものとして扱いません。
必要な操作に応じて選びます。
非公開Drive画像の一覧を作るGAS補助例
次の既存例は最大50件のPNG・JPEG・GIFを、新しいシートのセル上へ置きます。
FOLDER_IDを練習フォルダへ変更します。
出力シートの閲覧者には画像コピーが見えるため、元画像の共有設定と出力先の共有設定を別々に確認します。
function importDriveImagesToNewSheet() {
const FOLDER_ID = '対象フォルダID';
const MAX_IMAGES = 50;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const files = DriveApp.getFolderById(FOLDER_ID).getFiles();
// 既存シートを消去せず、新しいシートを作ります。
const sheet = ss.insertSheet('画像一覧_' + Date.now());
sheet.getRange(1, 1, 1, 3).setValues([['ファイル名', '元ファイル', '画像(セル上)']]);
sheet.setColumnWidth(3, 160);
let count = 0;
while (files.hasNext() && count < MAX_IMAGES) {
const file = files.next();
if (!['image/png', 'image/jpeg', 'image/gif'].includes(file.getMimeType())) continue;
const row = ++count + 1;
sheet.getRange(row, 1).setValue("'" + file.getName());
sheet.getRange(row, 2).setValue(file.getUrl());
sheet.setRowHeight(row, 110);
try {
const blob = file.getBlob();
if (blob.getBytes().length > 2 * 1024 * 1024) throw new Error('2MBを超えています');
const image = sheet.insertImage(blob, 3, row);
const scale = Math.min(140 / image.getWidth(), 100 / image.getHeight(), 1);
image.setWidth(Math.max(1, Math.round(image.getWidth() * scale)));
image.setHeight(Math.max(1, Math.round(image.getHeight() * scale)));
image.setAltTextTitle(file.getName());
} catch (error) {
sheet.getRange(row, 3).setValue('挿入できません: ' + error.message);
}
}
}Blobでの画像挿入は2MB以内です。
挿入できない画像はC列へ理由を書き、再実行では別シートを作ります。
このGASの実サービス画像挿入は未検証で、IMAGEの実画面確認をGASの動作確認とは扱っていません。
少数の架空画像で試してから使用してください。
戻し方
IMAGEの結果を消すときは、そのセルの式を外します。
元の画像ファイルは削除されません。
メニューで入れた画像は対象のセルや画像を確認して取り除きます。
GASの試験で追加したシートだけを整理する場合も、他の表を消さないよう名前と内容を確認してください。
公式の仕様と検証範囲
IMAGE関数で現在の仕様を確認できます。
練習データとコードの使い方
練習ZIPには3つのTSV、3枚のPPTX、Googleから書き出したPDF、数式TXTとGASがあります。
担当者の非公開GoogleファイルIDは入っていません。
TXTにある数式はシート、GASはApps Scriptへ貼ります。
旧GitHub資料と今回の改訂コードは同じ版とは限りません。






よくある質問:スプレッドシートのセルに画像を入れるときのチェックリスト
セルに画像を入れる方法は、どう選べばよいですか?
公開画像のURL一覧ならIMAGE関数、手元や非公開Driveの画像なら、挿入メニューを選びます。セル内画像は、表の行に対応する画像を管理するときに使います。
IMAGE関数の4つのモードは、どう違いますか?
モード1(省略時)は、縦横比を保ってセルに収めます。モード2は、縦横比を変えてセルに合わせます。モード3は、原寸のままで、セルからはみ出す部分は切れます。モード4は、高さ・幅をピクセルで指定します。画像に合わせてセルの幅や行高を自動で変更するモードはありません。
IMAGE関数で、「#REF!」が出ました。
初回は、外部URLからデータを取得するアクセス許可の案内が出ることがあります。この記事の実シートでも、初回は#REF!になり、許可すると4つの画像が表示されました。エラーの理由を読み、アクセス許可、URLの誤り、認証が必要なページ、対応していない画像形式を切り分けてください。
画像のURLを指定したのに、表示されません。
画像ファイルではなく、画像のあるWebページのURLを渡していないか確認します。URLは引用符で囲むか、A2のようなセルを参照します。
Driveの画像を、IMAGE関数で表示できますか?
公式仕様では、drive.google.comのURLとSVGは、IMAGE関数の対象外です。Driveの共有リンクを変換する旧手順は使いません。非公開画像を一般公開に変えて解決しようとせず、メニューからの挿入を選んでください。
セル内の画像と、文字は、同じセルに置けますか?
置けません。セル内画像と文字列は同じセルに置けないため、説明は別列へ入れます。セル上の画像は、表の上に浮くオブジェクトで、行の並べ替えと画像の対応を同じものとして扱いません。
GASの補助例は、動作確認済みですか?
このGASの実サービス画像挿入は、未検証です。IMAGE関数の実画面確認を、GASの動作確認とは扱っていません。最大50件のPNG・JPEG・GIFが対象で、Blobでの画像挿入は2MB以内です。少数の架空画像で試してから使用してください。
画像を元に戻すには?
IMAGE関数の結果を消すときは、そのセルの式を外します。元の画像ファイルは削除されません。メニューで入れた画像は、対象のセルや画像を確認して取り除きます。画面は2026年10月2日の表示で、最新の仕様は公式ヘルプで確認してください。
