Excel関数 逆引き集 | 列数を取得 → COLUMNS

Excel
スポンサーリンク

概要

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ではスピル参照(#)を活用すると柔軟なテンプレートが組めます。用途に合わせて“幅”を軸にした設計に落とすと、横コピーや列追加に強いシートになります。

タイトルとURLをコピーしました