CELL関数とは
CELL関数とは、指定したセル、もしくは最後になにかしらのアクションがあったセルの、様々な情報を取得する事ができる関数です。
公式の説明は下記のとおり。
CELL関数の使い方
式:=CELL("検査の種類",参照)
検査の種類で指定した情報を取得します。
検査の種類は忘れずにダブルクオーテーションで囲みましょう。
参照は省略可能ですが、意図がある場合を除き、省略はしない方がいいです。
CELL関数を使ってみる
検査の種類は現在12種類あります。
その中の1つ、セルの幅を調べる事ができる、widthを実際に使ってみましょう。
式:=CELL("width",$A$1)
A1セルの横幅は11.50なのですが、小数点以下を四捨五入した結果が返されるため、12という答えになりました。
このように、使い方事態は簡単な関数です。
今回はwidthを使ってみましたが、次は他にどういった検査の種類があるのかを紹介していきます。
検査の種類
指定できる検査の種類は下記のとおり。
address
対象範囲の左上隅にあるセルの参照を表す文字列。
=CELL("address",A1)という式にすると、$A$1のように絶対参照で結果が返ってきます。
col
対象範囲の左上隅にあるセルの列番号。
=CELL("col",A1)なら1、=CELL("col",C5)なら3が返ってきます。
color
負の数を色で表す書式がセルに設定されている場合は 1。それ以外の場合は 0 。
大抵は0ですが、マイナスを赤字にするような書式の時、1が返ってきます。
セルの色番号を調べるわけではないのでご注意。
contents
対象範囲の左上隅にあるセルの値 (数式ではない)。
A1セルが=1+1の時、他のセルに=CELL("contents",$A$1)を入れてみると、=1+1ではなく、結果の2が表示されます。
filename
ファイルネームといいつつ、ファイルのフルパスと、シート名まで返ってきます。
【例】
C:\Users\[Excelセイウチ.xlsx]実験中
新しいブックで開いて、まだ保存してないエクセルファイルでこのfilenameを使用した場合、空欄が返ってきます。
format
セルの書式設定の情報が返ってきます。
パターンが多いのでここでは紹介しません。
知りたい方はマイクロソフトサポートのページを探して調べてください。
parentheses
正の値またはすべての値をかっこで囲む書式がセルに設定されている場合は 1。それ以外の場合は 0。
書式のユーザー定義で(0)とか、(G/標準)のようにかっこで囲む書式にした時に1になるのですが、何に使うのこれ。
()で囲まれた数値だけど、これは正数であって負数じゃないんだよアピールの確認?
prefix
文字の配置位置によって結果が変わる。
左詰めは'(シングルクオーテーション)、右詰めは"(ダブルクオーテーション)、中央は^(キャレット)、両揃えは\(円)、それ以外は空欄となる。
見分けがつきにくいセルを調べる時に使えるかもですが、直接書式覗いたほうが早い気はする。
protect
セルがロックされていない場合は 0、ロックされている場合は 1。
シートが保護されてるかではなく、セル書式で保護→ロックにチェックが入っているかを調べる。
row
対象範囲の左上隅にあるセルの行番号。
=CELL("row",A1)なら1、=CELL("row",C5)なら5が返ってきます。
type
セルに含まれるデータのタイプに対応する文字列定数。
セルが空白の場合は "b" (Blank の頭文字)、文字列定数が入力されている場合は "l" (Label の頭文字)、その他の値が入力されている場合は "v" (Value の頭文字) となる。
width
セルの列幅を調べ、小数以下を四捨五入した正数が結果となる。
他の検査と違い配列とないっていて、2つ目の項目には列幅が既定値ならTRUE、いじられてたらFALSEとなる。
=INDEX(CELL("width",$A$1),2)のようにすると、2つ目の項目の方が使える。
参照は省略しない方がいい
参照(どのセルの情報を取得したいか)を省略すると、式を入力したセル自信の情報を取得してくれそうな気がしますよね。
しかしそうではなく、最後に何かしらアクションを起こした時に選択されていたセルの情報を取得してきます。
どういうことか、col(何列目かを調べる)の検査を使って試してみましょう。
まず、A1セルに参照を省略した式、=CELL("col")を入力します。
すると、1という結果が出てきます。
これだけ見ると、A1セルに式を入力したから、A1セルの情報を取得して、A1は1列目だから1という結果になったんだな!って思いますよね。
実際は違って、この時点では、最後にA1セルでアクションを起こしたから、A1の情報を取得しただけなんです。
それでは次に、D1セルで何か文字を入力してみましょう。
D1セルに文字を入力したとたん、A1セルの結果が4に変わりました。
これは、最後にアクションを起こしたのがD1セルで、D1セルは4列なので、A1セルの結果が4に変わったということになります。
このように、CELL関数は参照を使用するか、省略するかで動きが全く変わってきますので、明確な理由がなければ、参照は省略せずに入力したほうが安全というわけです。
F9で再計算処理をするば更新されるというのも1つの解答ですが、とりあえず参照に$A$1と入力しておくだけで、わざわざF9を押して更新する必要もなくなります。
また、これはバグというわけではなく、参照引数がセル範囲の場合、CELL 関数は、選択した範囲内のアクティブ セルの情報を返します。と公式が書いていますので、もうそういう仕様なのでしょう。
filenameを使って、ファイル名取得しようとしたものの、違うファイル名が表示されてしまうというのも、まずこれが原因でしょう。
ですが私の環境では、ファイル間を跨いだ操作の場合はCELL関数の結果は更新されないようになっていたので、違うファイル名が表示されてしまう問題は解決されつつあるのかもしれません。
以前はA.xlsxにCELL関数を用意して、B.xlsxで操作すると、A.xlsx上のCELL関数の結果まで変わってしまうという事象を確認していたのですが、いつのまにか起きなくなってました。なぜ・・・。
とはいえ、参照項目の省略は不安要素になりやすいので、確実な結果を返すためにも、CELL関数を使う時は参照を省略しない。忘れずに気をつけていきましょう。
コメント