- こんな感じの日本的スプレッドシートから、複数のセルを指定して値を取得したい。
- 1セルずつgetRange().getValue()すると処理が遅いのでそれは避けたい。
- 使いやすいようにa1notation(”A1″, “B2” のような形式)で指定したい。
・・・ということで関数を作りました。
使用例
function test() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("申請書");
const a1Notations = ["B2", "D2", "B3"];
const values = getValuesByA1Notations(sheet, a1Notations);
console.log(values)
}20:07:21 お知らせ 実行開始
20:07:22 情報 [ 'テスト太郎', 35, '承認よろで~す' ]
20:07:22 お知らせ 実行完了作った関数
/**
* sheetオブジェクトとセル番地(A1表記)の配列を受け取り、各セルに入っている値をシートから取得します。
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet -値を取得する対象のシートオブジェクト
* @param {string[]} a1Notations - 取得したいセルアドレスの配列 (例: ["A1", "B2", "C3"])
* @return {any[]} 各セルの値が格納された配列
*/
function getValuesByA1Notations(sheet, a1Notations) {
const data = sheet.getDataRange().getValues();
const lastRow = data.length;
const lastCol = data[0]?.length ?? 0;
const results = a1Notations.map(notation => {
const range = sheet.getRange(notation);
const row = range.getRow();
const col = range.getColumn();
if (row > lastRow || col > lastCol) return undefined;
return data[row - 1][col - 1];
})
return results;
}
コメント