Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2025年6月12日木曜日

スプレッドシートの空白セルを直前の値で埋めたい


A列の空白セルに直前の値を入れたくて書いたコードです


スプレッドシートに以下のようなBeforeの表があるとき
(A列に空白セルがある)


Before
1AB
2エリア都市
3東京新宿
4渋谷
5池袋
6神奈川横浜
7川崎
8相模原
9千葉千葉
10船橋
11松戸



空白セルの直前に入っている値で埋めて以下Afterのようにしたい


After
1AB
2エリア都市
3東京新宿
4東京渋谷
5東京池袋
6神奈川横浜
7神奈川川崎
8神奈川相模原
9千葉千葉
10千葉船橋
11千葉松戸




Code.gs
function fillEmptyAreaCells() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange("A2:A" + sheet.getLastRow()); // A2から最終行まで
const values = range.getValues();

let lastValue = "";

for (let i = 0; i < values.length; i++) {
if (values[i][0] !== "") {
lastValue = values[i][0]; // 新しい値を記憶
} else {
values[i][0] = lastValue; // 空欄を直前の値で埋める
}
}

range.setValues(values); // 上書き保存
}



Tips


スプレッドシートのURLを指定して実行したい場合


getSheetById(id) という待望のメソッドが追加されていたのでそれを使う

function fillEmptyAreaCellsBySheetUrl() {
const sheetUrl = "SPREADSHEET_URL";

// URLからgidを文字列として正確に取得(指数表記防止)
const gid = (sheetUrl.match(/gid=(\d+)/) || [])[1];
Logger.log("gid: " + gid);

const ss = SpreadsheetApp.openByUrl(sheetUrl); // ここでURLのスプレッドシートを明示的に開く
const sheet = ss.getSheetById(gid); // このSpreadsheetの中からgidを探す

if (!sheet) {
throw new Error("❌ 指定された gid のシートが見つかりません: " + gid);
}

const range = sheet.getRange("A2:A" + sheet.getLastRow());
const values = range.getValues();

let lastValue = "";

for (let i = 0; i < values.length; i++) {
if (values[i][0] !== "") {
lastValue = values[i][0];
} else {
values[i][0] = lastValue;
}
}

range.setValues(values);
}




今回シートのIDは const gid = (sheetUrl.match(/gid=(\d+)/) || [])[1]; で取得しています

const gid = sheetUrl.split("gid=")[1] ではエラーになりました



スプレッドシートのURLをよく見ると

シートIDが末尾に2つある
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit?gid=127068302#gid=127068302

しかも#でつながっているので

const gid = sheetUrl.split("gid=")[1] とかやると

127068302#

末尾に#がついてきてエラーになる


Error: ❌ 指定された gid のシートが見つかりません: 1621369581#




Reference

getSheetById(id)


Latest post

スプレッドシートの空白セルを直前の値で埋めたい

A列の空白セルに直前の値を入れたくて書いたコードです スプレッドシートに以下のようなBeforeの表があるとき (A列に空白セルがある) Before 1 A B 2 エリア 都市 3 東京 新宿 4 渋谷 5 池袋 6 神奈川 横浜 7 川崎 8 相模原 9 千葉 千葉 10 ...