メディア掲載: レバテックフリーランス様のサイトで当ブログが紹介されました

GAS: 複数セル番地(A1, B2…)から値を一括取得する関数

  • こんな感じの日本的スプレッドシートから、複数のセルを指定して値を取得したい。
  • 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;
}

コメント

タイトルとURLをコピーしました