相対参照と絶対参照
ws.SetFormula(0, 2, "A1*B1"); // 相対参照
ws.SetFormula(1, 2, "$A$1*B2"); // 絶対参照(行・列を固定)
ws.SetFormula(2, 2, "$A1*B3"); // 列だけ固定
ws.SetFormula(3, 2, "SUM(Sheet2!A1:A10)"); // クロスシート参照
ws.SetFormula(4, 2, "SUM('My Sheet'!A1:B2)"); // 空白を含むシート名
$ はコピー・オートフィルのときに動かないことを意味します。Excel と同じです。
| 書き方 | コピーしたとき |
|---|---|
A1 | 行も列も相対的にずれる |
$A1 | 列は固定、行はずれる |
A$1 | 行は固定、列はずれる |
$A$1 | どちらも動かない |
$ とシフトの違い
混同しやすい点です。$ が効くのはコピー時であり、行・列の挿入削除時ではありません。
$A$1 を参照する数式がある状態で、1 行目の上に行を挿入する
→ 参照は $A$2 になる(対象のセルが動いたので追従する)
これも Excel と同じ挙動です。参照は「その位置」ではなく「そのセル」を指しています。
クロスシート参照
Sheet2!A1 の形で他のシートを参照できます。シート名に空白や記号が含まれる場合は
シングルクォートで囲みます('My Sheet'!A1)。
| 形 | 例 |
|---|---|
| 単一セル | Sheet2!A1 |
| 範囲 | Sheet2!A1:B10 |
| クォート付き | 'My Sheet'!A1:B2 |
参照先のシートで値が変わると、参照している数式が再計算されます。多段の連鎖 (Sheet1 → Sheet2 → Sheet3)にも対応し、循環は検出されます。
数式を持たないデータ専用のシートでも、値を変更すれば他シートへ通知されます。
定義名
定義名は数式から直接参照できます。
SUM(SalesData)
TaxRate * B5
シートスコープの名前は、ブックスコープの同名を隠します(シャドウイング)。 定義の仕方は 定義名 を参照してください。
参照が壊れる場合
| 状況 | 結果 |
|---|---|
| 参照先の行・列を削除した | #REF! |
| 参照先のシートを削除した | #REF! |
| 存在しない名前を書いた | #NAME? |
| 交差しない範囲どうしの交差演算 | #NULL! |
#REF! はその場で数式の文字列が書き換わります。元の参照は復元できません
(Excel と同じ挙動)。行削除の直後に取り消したい場合は
元に戻す を使ってください。
コピーとオートフィル
セルをコピーして貼り付けると、相対参照は貼り付け先に合わせて自動的にずれます。 クリップボード経由(他アプリからの貼り付けを含む)でも同じです。
オートフィルでは、フィルハンドルのドラッグ方向に応じて参照がオフセットされます。 詳細は オートフィル を参照してください。
範囲の書き方
| 書き方 | 意味 |
|---|---|
A1:C3 | 通常の矩形範囲 |
A:C | A 列から C 列全体 |
3:5 | 3 行目から 5 行目全体 |
フル列・フル行は、評価時にシートの寸法にクランプされます。