「いま参照しているセルの番地を、文字列として数式の中で使いたい」「データの種類によって計算式を切り替えたい」
そんなときに役立つのがCELL関数です。セル番地・行列番号・データ型・列幅といった「セルの情報」を、関数1本で取り出せます。
この記事では、GoogleスプレッドシートのCELL関数の使い方を、info_type 7種類の戻り値から実務応用、Excelとの差分まで実例付きで整理します。
スプレッドシートのCELL関数とは?
CELL関数(読み方:セル)は、指定したセルの情報を取り出す関数です。
「どんな情報がほしいか」を info_type で切り替えながら、1本の関数で複数の用途に使えるのが特徴です。
CELL関数で取得できる代表的な情報は、次の4種類です。
- セル番地(
$A$1のような絶対参照の文字列) - 行番号・列番号(数値)
- データ型(空白・文字列・数値の判別)
- 列幅(整数)
たとえば、=CELL("address", B3) と書けば $B$3 という文字列が返ります。この結果を INDIRECT関数 に渡せば、動的にセル参照を組み立てられます。
NOTE
GoogleスプレッドシートのCELL関数は、Excelに比べて使える info_type が少なめです。
"filename"や"format"などはスプレッドシートでは非対応で、シート名取得やセル書式の取得には別の方法が必要になります。詳しくは「Excelとの違い」セクションで解説します。
CELL関数の構文と引数
基本構文
=CELL(info_type, [参照])
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| info_type | 必須 | 取得したい情報の種類を文字列で指定する |
| 参照 | 任意 | 情報を取得したいセル。省略するとアクティブセルが対象 |
info_type は必ずダブルクォーテーションで囲んで指定します。=CELL("address", A1) のように、第1引数を文字列として渡すのがポイントです。
TIP
第2引数の参照を省略すると、アクティブセル(選択中のセル)が対象になります。結果が再計算のタイミングで揺らぐので、参照は明示的に指定するのがおすすめです。
info_type 7種類の戻り値と使い分け
GoogleスプレッドシートのCELL関数で使える info_type は、次の7種類です。
| info_type | 戻り値の例 | 用途 |
|---|---|---|
"address" | $B$3 | 絶対参照の文字列でセル番地を取得 |
"col" | 3 | 列番号(A=1, B=2, …)を整数で取得 |
"row" | 5 | 行番号を整数で取得 |
"type" | b / l / v | データ型(空白・文字列・数値)を1文字で取得 |
"width" | 8 | セルが属する列の幅を整数で取得 |
"contents" | セルの値 | 参照セルの中身をそのまま返す |
"prefix" | ' " ^ など | 文字列の配置記号(左揃え・右揃え・中央揃え)を取得 |
NOTE
第2引数に範囲(例:
A1:C10)を渡すと、範囲の左上セルだけを対象とした結果が返ります。すべてのセルについて情報を取りたいときは ARRAYFORMULA との組み合わせが必要です。
type が返す3種類の値
"type" を指定したときに返る1文字には、それぞれ意味があります。
| 戻り値 | 意味 | 具体例 |
|---|---|---|
b | blank(空白セル) | セルが空のとき |
l | label(文字列) | "東京" "商品A" など |
v | value(数値) | 100、日付(シリアル値)、TRUE/FALSE |
日付やTRUE/FALSEは内部的に数値として扱われるため、v が返る点は覚えておくと便利です。
CELL関数の基本的な使い方
ここからは info_type 別に、よく使うパターンを順に見ていきます。
セル番地を絶対参照の文字列で取得する(address)
=CELL("address", B3)
結果は $B$3 です。文字列として返るので、INDIRECTやVLOOKUPの引数に組み込みやすい形です。
行番号・列番号を取得する(row / col)
=CELL("row", A5)
結果は 5 です。
=CELL("col", C1)
結果は 3 です。
行番号や列番号だけがほしい場合は、ROW関数 / COLUMN関数のほうがシンプルに書けます。CELL関数を使うメリットは、address や type など他の情報と統一的に扱える点にあります。
データ型を1文字で判別する(type)
=CELL("type", A1)
セルの中身に応じて b / l / v のいずれかが返ります。「このセルにデータが入っているか」「文字列か数値か」を数式で判定したいときに役立ちます。
列幅を整数で取得する(width)
=CELL("width", A1)
A1が属する列の幅を整数で返します。レイアウトのチェックや、列幅に応じた表示制御を組みたいときに便利です。
セル値をそのまま返す(contents)
=CELL("contents", A1)
参照セルの値をそのまま返すだけなので、=A1 と書くのとほぼ同じ結果になります。CELL関数の引数の動作確認用に覚えておくとよいでしょう。
CELL関数の実践的な活用パターン
ここからは、CELL関数を他の関数と組み合わせた実務向けの応用例を紹介します。
INDIRECTと組み合わせて動的にセル参照を組み立てる
CELL関数で取得した行番号を使い、参照先を動的に切り替えるパターンです。
=INDIRECT("B" & CELL("row", A2))
A2と同じ行のB列の値を返します。A2の行位置が変わっても、CELL関数が現在の行番号を返してくれるので参照が追従します。
集計表の「同じ行の別カラムを参照したい」シーンで便利な書き方です。
データ型に応じて処理を分岐する
セルが数値か文字列かで計算を切り替えたい場面で使えます。
=IF(CELL("type", A2)="v", A2*1.1, "数値以外")
A2が数値(v)のときだけ1.1倍の計算を行い、それ以外なら「数値以外」と表示します。
データの入力ミスチェックや、混在データの前処理にも応用できます。
ARRAYFORMULAでデータ型を一括取得する
CELL関数は単独だと範囲を渡しても左上セルしか返しませんが、ARRAYFORMULAで包むと配列処理に対応できます。
=COUNTIF(ARRAYFORMULA(CELL("type", A1:A20)), "<>b")
A1:A20の各セルについてデータ型を取得し、空白(b)以外の個数をカウントする式です。
TIP
単純に空白以外の個数を数えるだけなら COUNTA関数 のほうがシンプルです。CELL関数を使うメリットは、文字列のみ・数値のみといったデータ型の絞り込みカウントができる点にあります。
条件付き書式でデータ型をハイライトする
文字列が混入しているセルだけ色を付けたい、といった場面で使えます。
- 対象範囲を選択する
- メニュー「表示形式」→「条件付き書式」を開く
- 「カスタム数式」を選ぶ
- 数式欄に
=CELL("type", A1)="l"と入力する - 背景色などのフォーマットを設定する
数値列のはずのセルに文字列が紛れ込んだとき、視覚的にすぐ気づける仕組みになります。
CELL関数のExcelとの違いと代替手段
GoogleスプレッドシートのCELL関数は、Excelに比べて対応する info_type が少ないのが大きな違いです。
| info_type | Excel | Googleスプレッドシート |
|---|---|---|
"address" | 対応 | 対応 |
"col" | 対応 | 対応 |
"row" | 対応 | 対応 |
"type" | 対応 | 対応 |
"width" | 対応 | 対応 |
"contents" | 対応 | 対応 |
"prefix" | 対応 | 対応 |
"filename" | 対応 | 非対応 |
"format" | 対応 | 非対応 |
"color" | 対応 | 非対応 |
"protect" | 対応 | 非対応 |
"parentheses" | 対応 | 非対応 |
特に影響が大きいのは、次の2つです。
"filename"非対応: ブックのファイル名やシート名を直接取得できません。シート名がほしい場合は、Apps Script でSpreadsheetApp.getActiveSheet().getName()を呼び出すカスタム関数を作るのが現実的な代替策になります"format"非対応: セルの表示形式コードを取得できません。表示形式によって処理を変えたい場合も Apps Script の利用が必要です
ExcelのCELL関数の使い方は、ExcelのCELL関数の使い方|セルの書式・位置・ファイル名を取得する方法で詳しく解説しています。Excel側の挙動を確認したい方はあわせて参考にしてください。
よくあるエラーと対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
#VALUE! エラーが出る | info_type のスペル誤り(例:"adress") | "address" の d は2つ。スペルを正確に書く |
#VALUE! エラーが出る | スプレッドシートで非対応の info_type を使った | "filename" "format" などは非対応。7種類の対応リストを確認する |
| 値が更新されない | CELL関数は揮発性関数だが再計算が遅れることがある | セルを再編集する、またはシートを再読み込みする |
| 範囲を渡したのに1つだけ返る | 仕様:参照に範囲を指定すると左上セルだけが対象 | 1セルずつ指定するか、ARRAYFORMULAで配列化する |
"type" で日付が v になる | 日付はシリアル値(数値)として管理されるため | 日付判定は ISDATE関数を使う |
"prefix" が空文字になる | 文字列に配置プレフィックスが付いていない | 明示的に ' などを付けたセルのみ意味のある値が返る |
まとめ
GoogleスプレッドシートのCELL関数は、セル番地・行列番号・データ型などの情報を1関数でまとめて取り出せる便利な関数です。
ポイントを整理します。
- 構文は
=CELL(info_type, [参照])。info_type には取得したい情報の種類を文字列で指定する - 使える info_type は7種類(
"address""col""row""type""width""contents""prefix") "address"は INDIRECT との組み合わせで動的なセル参照を実現できる"type"でデータ型を判別すると、計算式の分岐や入力ミス検出に応用できる- 範囲を渡すと左上セルしか返らないので、配列処理は ARRAYFORMULA で包む
- ExcelのCELL関数では使える
"filename""format"などはスプレッドシートでは非対応。代替手段は Apps Script - 行番号・列番号だけなら ROW関数 / COLUMN関数 のほうがシンプル
まずは =CELL("address", A1) でセル番地を取得するところから試して、INDIRECTとの組み合わせまで広げてみてください。
