概要
COLUMNSは「範囲に含まれる列の“個数”」を返す関数です。例えばB2:F10なら5列、A1なら1列。列番号(A=1, B=2…)を返すCOLUMNとは役割が異なり、「何列あるか」を知りたいときに使います。横方向の連番、最後の列位置の算出、スピル(動的配列)の横幅取得、入力検証などで重宝します。
基本の使い方
書式
=COLUMNS(範囲)
範囲に含まれる列数(横幅)を返します。セル1つなら1、B2:F10なら5です。
例
=COLUMNS(A1) // 1
=COLUMNS(B2:F10) // 5
=COLUMNS($C:$Z) // 24
=COLUMNS(C2#) // スピル範囲の横幅(Microsoft 365)
具体例
範囲の横幅を取得して可変ロジックに
=COLUMNS(B2:F20) // 5列
レポートの列数に応じて、合計や平均の繰り返し処理を動的に設計できます。
最後の列インデックス(相対位置)を求める
開始列B(列2)から範囲B:Fの最後の列までの相対位置(=5列):
=COLUMNS($B:$F) // 5
あるいは列番号の差から求める場合:
=COLUMN($F$1)-COLUMN($B$1)+1 // 5
スピル(動的配列)の横幅を取得
動的に出力される範囲の列数を取りたいときは、スピル参照「#」が便利です。
=COLUMNS(D2#)
D2からスピルした配列の“現在の横幅”を返します。
応用テンプレート
横方向に1,2,3…を自動生成(範囲幅に合わせる)
開始セルH2に、指定範囲の列数だけ連番を出したい例(Microsoft 365):
=SEQUENCE(1, COLUMNS(B2:F2))
1行・“列数ぶん”の連番が横に展開します。
INDEXで“最後の列”を可変取得
範囲の最後の列をINDEXで抜き出す(行はn、列は最後):
=INDEX($B$2:$F$20, n, COLUMNS($B$2:$F$20))
列数を列引数として渡すことで、範囲の右端を常に参照します。
オフセット抽出(列数ぶんだけ切り出す)
開始セルから列数に応じて、取り出す長さを可変化:
=TAKE($B$2:$Z$20, , COLUMNS($B$2:$F$20))
Microsoft 365で右方向の取り出し幅を範囲の列数に合わせます。
入力検証:範囲が“十分な列数”か判定
最低3列必要な設定のチェック:
=IF(COLUMNS($B$2:$E$20)>=3, "OK", "列が不足")
よくあるつまずきと対策
列“番号”と列“個数”の取り違え
- 列番号が欲しい→COLUMN
- 列の個数が欲しい→COLUMNS
役割が違います。設計時に混同しないように。
非連続範囲の列数を数えたい
カンマで分けた非連続参照はうまく数えられません。必要なら列ごとにCOLUMNSを合算するか、CHOOSEでまとめます。
=COLUMNS(B2:D10)+COLUMNS(F2:H10)
テキストや数値の有無は関係ない
COLUMNSは「範囲の幅」を返すだけで、セルの中身は見ません。データの有無で列数を可変にしたければ、COUNTAやBYCOLと組み合わせて判定を作ります(Microsoft 365)。
=SUM(--(BYCOL(B2:F20, LAMBDA(col, COUNTA(col)>0))))
スピル参照が使えない環境
C2# のようなスピル参照はMicrosoft 365専用です。従来版では固定範囲を渡すか、配列数式を使用します。
例題
問題1: 範囲B2:F10の列数をG2に表示してください。
解答例:
=COLUMNS(B2:F10)
問題2: 単一セルA5の列数(常に1)をH2に表示してください。
解答例:
=COLUMNS(A5)
問題3: スピル出力D2#の“横幅”をI2に表示してください(Microsoft 365)。
解答例:
=COLUMNS(D2#)
問題4: 範囲B2:F20の“最後の列”をINDEXで取り、J2に表示してください(行番号は3)。
解答例:
=INDEX($B$2:$F$20, 3, COLUMNS($B$2:$F$20))
問題5: 範囲B2:H20が3列以上あるとき「OK」、未満なら「列が不足」とK2に表示してください。
解答例:
=IF(COLUMNS(B2:H20)>=3, "OK", "列が不足")
まとめ
COLUMNSは「範囲の横幅(列数)」を返すシンプルな関数で、可変参照、最後の列取得、スピル幅判定、入力検証に向いています。列番号ならCOLUMN、行数ならROWSと使い分けるのがポイント。非連続範囲は合算で対処し、Microsoft 365ではスピル参照(#)を活用すると柔軟なテンプレートが組めます。用途に合わせて“幅”を軸にした設計に落とすと、横コピーや列追加に強いシートになります。
