A列の空白セルに直前の値を入れたくて書いたコードです
スプレッドシートに以下のようなBeforeの表があるとき
(A列に空白セルがある)
Before
空白セルの直前に入っている値で埋めて以下Afterのようにしたい
After
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)