「このセルって何行目だっけ?」「セル番地を文字列として取り出したい」
手作業で確認すれば済む話ですが、数式の中で動的にセル情報を使いたい場面もありますよね。
そんなときに便利なのがCELL関数です。セルの番地、行番号、列番号、データの種類などを数式で取得できます。
この記事では、GoogleスプレッドシートのCELL関数の基本から実践的な活用パターンまでまとめて紹介します。
スプレッドシートのCELL関数とは?
CELL関数(読み方: せる)は、指定したセルの情報を取得する関数です。
名前は英語の「cell(区画)」からきています。スプレッドシートの「セル」と同じ意味ですね。
「どんな情報がほしいか」をinfo_type(情報の種類)で切り替えて使います。たとえばセル番地がほしければ "address"、行番号なら "row" を指定します。
CELL関数にできることをまとめると、次のとおりです。
- セル番地を文字列として取得する
- 行番号・列番号を数値で返す
- セルの中身のデータ型(数値・文字列・空白)を判別する
- 列幅を取得する
NOTE
GoogleスプレッドシートのCELL関数はExcelと比べて使えるinfo_typeが限られています。Excelで使える
"filename"や"format"などはスプレッドシートでは非対応です。詳しくは「Excelとの違い」セクションで解説します。
CELL関数の書き方(構文と引数)
基本構文
=CELL(info_type, 参照)
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| info_type | 必須 | 取得したい情報の種類を文字列で指定 |
| 参照 | 任意 | 情報を取得するセル。省略するとアクティブセルが対象 |
info_typeは必ずダブルクォーテーションで囲みます。=CELL("address", A1) のように書いてください。
TIP
参照を省略するとアクティブセル(選択中のセル)が対象になります。結果が安定しないため、参照は明示的に指定するのがおすすめです。
info_typeの種類一覧
GoogleスプレッドシートのCELL関数で使えるinfo_typeは以下の7種類です。
| info_type | 戻り値 | 使用例 |
|---|---|---|
"address" | セル番地を文字列で返す(例: $A$1) | =CELL("address", B3) → $B$3 |
"col" | 列番号を返す | =CELL("col", C1) → 3 |
"row" | 行番号を返す | =CELL("row", A5) → 5 |
"type" | データ型を1文字で返す(b=空白, l=文字列, v=数値) | =CELL("type", A1) → v |
"width" | 列幅を整数で返す | =CELL("width", A1) → 8 |
"contents" | セルの値をそのまま返す | =CELL("contents", A1) → セルA1の値 |
"prefix" | 文字列の配置記号を返す('=左, "=右, ^=中央) | =CELL("prefix", A1) → ' |
NOTE
参照に範囲(例:
A1:C10)を指定した場合は、範囲の左上のセルの情報だけが返ります。
CELL関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
セル番地を文字列で取得する(address)
=CELL("address", B3)
結果: $B$3
セル番地が絶対参照の文字列として返ります。この結果をINDIRECT関数に渡せば、動的なセル参照を実現できますよ。
行番号・列番号を取得する(row / col)
=CELL("row", A5)
結果: 5
=CELL("col", C1)
結果: 3
行番号や列番号を数値で返します。ROW関数やCOLUMN関数でも同じ結果を得られます。
データの種類を判別する(type)
=CELL("type", A1)
セルの中身に応じて次の1文字を返します。
| 戻り値 | 意味 | 具体例 |
|---|---|---|
b | 空白セル | セルが空のとき |
l | 文字列(label) | "東京" など |
v | 数値(value) | 100、日付、TRUE/FALSE |
「このセルにデータが入っているか」を判定したいときに使えます。
列幅を取得する(width)
=CELL("width", A1)
A1が含まれる列の幅を整数で返します。レイアウト調整の参考にしたいときに便利です。
CELL関数の実践的な使い方・応用例
セル番地を動的に組み立ててデータを参照する
CELL関数で取得した行番号・列番号を使い、動的にセル参照を作る例です。
=INDIRECT("B" & CELL("row", A2))
A2と同じ行のB列のデータを返します。行番号をCELL関数で動的に取得しているため、A2の位置が変わっても追従しますよ。
データ型に応じて処理を分岐する
セルに文字列が入っているか、数値が入っているかで処理を分けたい場面です。
=IF(CELL("type", A2)="v", A2*1.1, "数値以外")
A2が数値のときだけ1.1倍の計算を行います。文字列や空白のときは「数値以外」と表示します。
データの入力ミスを検出するチェック用の数式としても活用できますね。
入力済みセルの個数をカウントする
CELL関数の "type" とARRAYFORMULA・COUNTIF関数を組み合わせて、空白以外のセルを数えるパターンです。
=COUNTIF(ARRAYFORMULA(CELL("type", A1:A20)), "<>b")
各セルのデータ型を配列で取得し、"b"(空白)以外の個数をカウントします。
TIP
単純に空白以外を数えるだけならCOUNTA関数のほうがシンプルです。CELL関数を使うメリットは、データ型(文字列・数値)を区別できる点にあります。
条件付き書式でデータ型をハイライトする
文字列が入っているセルだけ背景色を変えたい場合に使えます。
- 対象範囲を選択します
- 「表示形式」メニュー →「条件付き書式」を選択します
- 「カスタム数式」を選びます
- 数式欄に
=CELL("type", A1)="l"と入力します - 背景色を設定します
数値セルに意図せず文字列が混入していないか、視覚的にチェックできます。
よくあるエラーと対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
#VALUE! エラーが出る | info_typeのスペルミス(例: "adress") | 正しいスペルを確認する。"address" の d は2つ |
#VALUE! エラーが出る | スプレッドシートで非対応のinfo_typeを使った | "filename" や "format" はスプレッドシートでは使えない |
| 値が更新されない | CELL関数は揮発性関数だが再計算が遅れている | セルを編集して確定する、またはシートを再読み込みする |
| 範囲を指定したのに1つしか返らない | 参照に範囲を指定すると左上セルの情報だけ返る仕様 | セルを1つずつ指定するか、ARRAYFORMULA関数と組み合わせる |
"type" で日付が v になる | 日付はシリアル値(数値)として管理されている | 日付かどうかはISDATE関数で判定する |
Excelとの違い
GoogleスプレッドシートのCELL関数は、Excelと比べて使えるinfo_typeが大幅に少ないのが最大の違いです。
| info_type | Excel | Googleスプレッドシート |
|---|---|---|
"address" | 対応 | 対応 |
"col" | 対応 | 対応 |
"row" | 対応 | 対応 |
"type" | 対応 | 対応 |
"width" | 対応 | 対応 |
"contents" | 対応 | 対応 |
"prefix" | 対応 | 対応 |
"filename" | 対応 | 非対応 |
"format" | 対応 | 非対応 |
"color" | 対応 | 非対応 |
"protect" | 対応 | 非対応 |
"parentheses" | 対応 | 非対応 |
Excelでは12種類のinfo_typeが使えますが、スプレッドシートでは7種類に限られます。
特に影響が大きいのは次の2つです。
"filename"が使えない: スプレッドシートではファイル名やシート名をCELL関数で取得できません。シート名の取得には=MID(CELL("address",'シート名'!A1),2,FIND("!",CELL("address",'シート名'!A1))-2)のような回り道が必要です"format"が使えない: セルの表示形式コードを取得できません。表示形式の判定にはApps Scriptを使う必要があります
ExcelでのCELL関数の使い方はExcelのCELL関数の記事で詳しく解説しています。
まとめ
GoogleスプレッドシートのCELL関数は、セルの番地・行列番号・データ型などの情報を取得する関数です。
ポイントを整理します。
- 構文は
=CELL(info_type, 参照)で、info_typeに取得したい情報の種類を指定する - スプレッドシートで使えるinfo_typeは7種類(address, col, row, type, width, contents, prefix)
"address"でセル番地を文字列として取得でき、INDIRECT関数との連携が便利"type"でセルのデータ型(空白・文字列・数値)を判別できる- Excelでは12種類のinfo_typeが使えるが、スプレッドシートでは
"filename"や"format"が非対応 - 行番号・列番号だけならROW関数・COLUMN関数のほうがシンプル
- ExcelのCELL関数とはinfo_typeの対応状況が異なるので要注意
まずは =CELL("address", A1) でセル番地の取得から試してみてください。
