名前付き範囲
v1.4.0 から、セルや範囲に定義済み名を割り当て、数式で参照できます — =SUM(Sheet1!B2:B13) の代わりに =SUM(Sales)。名前はワークブック全体、または単一シートにスコープできます。
Note: 名前の定義は Pro 機能です。名前の読み取り(
getName・getNames)と xlsx からのインポートは Lite で動作するため、Pro で作成した — またはファイルから読み取った — 名前は無償版でも数式で解決されます。
名前の定義
名前は単一のワークシートではなくインスタンス(ワークブック)上に存在します。名前とアドレスを渡します。スコープとコメントは任意です。
import { createReogrid } from '@reogrid/pro'
const grid = createReogrid({ workspace: '#app' })
// ワークブックスコープ(既定)— 全シートから参照可能
grid.defineName('Sales', 'Sheet1!B2:B13')
grid.defineName('Tax', 'Sheet1!$F$1', 'workbook', '消費税率')
// シートスコープ — そのシート上で同名のワークブック名を隠す
grid.defineName('Region', 'A1:A20', 'Summary')
defineName(name, address, scope?, comment?)。address はセル/範囲参照(Sheet1!A1:B10、A1、'My Sheet'!$C$3)です。scope は 'workbook'(既定)またはシート名です。
名前の管理
grid.getName('Sales') // 'Sheet1!$B$2:$B$13' — 絶対アドレス、または undefined
grid.getNames() // ワークブック全体の DefinedNameInfo[]
grid.getNames('Summary') // 指定スコープのみ
grid.removeName('Tax') // 削除できたら true
DefinedNameInfo は { name, scope, address, comment? } です。名前の対象が破棄されている場合、address は #REF! になります。
ワークブックスコープとシートスコープ
| スコープ | 指定方法 | 可視範囲 |
|---|---|---|
| ワークブック | 'workbook'(既定) | 全シートの数式で使用可能。 |
| シート | シート名、例 'Summary' | そのシートで使用可能。そこでは同名のワークブック名を隠す。 |
シートスコープの名前は、そのシート上の数式評価時に同名のワークブック名より優先されます。
数式での使用
範囲や値が期待される箇所であればどこでも名前を参照できます。
grid.defineName('Sales', 'Sheet1!B2:B13')
grid.defineName('Tax', 'Sheet1!$F$1')
grid.worksheet.cell('E1').value = '=SUM(Sales)' // 範囲名
grid.worksheet.cell('E2').value = '=E1*Tax' // 単一セル名をスカラーとして
grid.worksheet.cell('E3').value = '=AVERAGE(Sales)'
#REF! の挙動
定義済み名は対象を追跡します。名前が指す行・列が削除されると、名前は #REF! に解決され、それを使う数式も #REF! と評価されます — 直接の壊れた参照と同じ挙動です。名前を再定義する(または対象を復元する)と修正されます。
grid.defineName('Sales', 'Sheet1!B2:B20') // 新しい範囲を指す
xlsx への往復
名前は <definedNames> にシリアライズ・読み込みされるため、=SUM(Sales) は Excel への保存と復元を通じて保持されます。ReoGrid JSON でも往復します。ワークブックをインポートすると定義済み名も取り込まれ、Lite でも数式で解決されます。
関連項目
- 数式エンジン — 名前を利用する数式言語の全体。
- マルチシートワークブック — 名前とクロスシート参照の関係。
- XLSXインポート・エクスポート — 定義済み名がファイルとともに移動する仕組み。