MENU

GASの名前付き範囲でセル参照を管理する

当ページのリンクには広告(PR)が含まれていることがあります。
GASの名前付き範囲でセル参照を管理する。名前付き範囲、名前で取得、未定義を確認の処理例。

合計を読む場所をD8と書いておくと、表の作り直しで参照先の見直しが必要になります。「集計結果」という名前をセルに付けて、その名前から範囲を取得する方法なら、コードにも読みたい値の意味が残ります。ただし、名前を付ければ参照先の確認が不要になるわけではありません。

GAS(Google Apps Script)のgetRangeByNameは、名前が見つからない場合にnullを返します。似た名前のセルやアクティブなセルへ代わりに進めず、設定の間違いとして止めると、別の値を読むことを防げます。まずは読み取りだけの例で、名前と実際のセルが対応しているかを確かめます。

目次

名前とセルの対応を確認する

練習用スプレッドシートのB2に1200を入れ、シートの「名前付き範囲」でB2へPracticeTotalという名前を付けます。見出しや空欄まで範囲に含めず、この例では1セルだけにしてください。

名前は用途を示す目印です。同じ数値が入っているセルでも、月間売上と税込合計は違う値なので、名前も分けます。担当者が見た目を直すときも、名前付き範囲がどのセルを指しているかを確認できるようにしておきます。

公式のSpreadsheetリファレンスでは、名前から範囲を取得できることと、未定義時の戻り値を確認できます。範囲の基本はセル・行・範囲の読み書きも参照してください。

1セルの数値だけを受け取るコード

次の関数は名前、範囲の大きさ、値の型を順に確認します。表示文字列を数値へ勝手に変換しないので、"1200円"のような文字列はエラーになります。

function readNamedNumber(book, name) {
  if (typeof name !== 'string' || name.trim() === '') {
    throw new Error('範囲名を指定してください');
  }
  const range = book.getRangeByName(name);
  if (!range) throw new Error('名前付き範囲がありません: ' + name);
  if (range.getNumRows() !== 1 || range.getNumColumns() !== 1) {
    throw new Error('1セルの範囲を指定してください');
  }
  const value = range.getValue();
  if (typeof value !== 'number' || !Number.isFinite(value)) {
    throw new Error('範囲の値が数値ではありません');
  }
  return {name: name, cell: range.getA1Notation(), value: value};
}

function previewNamedTotal() {
  const book = SpreadsheetApp.getActiveSpreadsheet();
  console.log(JSON.stringify(readNamedNumber(book, 'PracticeTotal')));
}

練習用シートからApps Scriptを開き、previewNamedTotalを選んで実行します。B2が1200なら、ログのcellがB2、valueが1200になることを確認します。コードは値や名前を書き換えません。

名前の変更と削除を試す

次に、練習用の名前を一度別の名前へ変えます。コードに指定したPracticeTotalがなくなれば「名前付き範囲がありません」で止まる想定です。自動で範囲を作り直さないため、タイプミスが新しい設定として残りません。

名前付き範囲そのものを扱うNamedRangeには、名前や参照範囲を変更するメソッドと、定義を削除するremoveがあります。定義の削除とセルの内容の削除は別です。運用で変更する場合は、先にその名前を使うコードや数式も確認してください。

B2以外へ参照先を変える場合も、読み取り結果のcellと数値を見比べます。値だけがたまたま同じだと参照先の間違いを見逃すので、位置も一緒に出す形にしています。複数セルを読む用途では、このコードの1セルという条件をそのまま流用しないでください。

名前で補えないこと

名前付き範囲は、元データの意味や入力の正しさまでは判断しません。別月の合計が入っていたり、税の扱いが変わったりしても、数値ならこの関数はエラーを返しません。対象期間や集計条件の確認は別に必要です。

例の確認は、ローカルの代用オブジェクトを使った正常値、名前なし、複数セル、文字列の分岐までです。Google上での範囲の移動や承認画面は実行していません。実際のファイルではコピーを用意し、名前変更後も意図した値を読めるかを確認してください。

複数人が設定を触るツールでは、名前の用途と変更時の確認先を関数とファイルの整理方法と合わせて記録すると、後から参照先を追いやすくなります。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次