「この表って何列あるんだろう?」と数えたくなること、ありますよね。
列数が多い表だと、目的の範囲が何列分あるか数え間違えることもあります。データの列が増減するたびに数え直すのも面倒です。
スプレッドシートのCOLUMNS関数を使えば、セル範囲の列数を一発で自動カウントできます。他の関数と組み合わせれば、動的な範囲制御やデータサイズの検証にも活用できますよ。
この記事では、COLUMNS関数の基本的な書き方から、実務で使える組み合わせパターンまで紹介します。
スプレッドシートのCOLUMNS関数とは?基本の仕組みを理解しよう
COLUMNS関数(読み方: カラムズ関数)は、指定したセル範囲の列数を数値で返す関数です。「COLUMNS」は英語の「COLUMN(列)」の複数形で、列がいくつあるかを意味します。
たとえば =COLUMNS(A1:C1) と入力すると、結果は「3」です。A列からC列まで3列分あるからですね。
COLUMNS関数にできることをまとめると、次のとおりです。
- セル範囲の列数を数値で返す
- 行方向にどれだけ広がっていても、列数だけをカウントする
- 名前付き範囲や配列定数にも使える
- 他の関数と組み合わせて動的な範囲制御に使える
COLUMNS関数の基本構文
=COLUMNS(範囲)
カッコの中に、列数を調べたい範囲を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 範囲 | 必須 | 列数を調べたいセル範囲。セル参照、名前付き範囲、配列定数のいずれも指定できる |
引数は1つだけなので覚えやすい関数です。ただし、COLUMN関数と違って引数の省略はできません。=COLUMNS() と書くとエラーになるので注意してください。
COLUMN関数との違いを押さえよう
COLUMNS関数とCOLUMN関数は名前がよく似ていますが、返す情報がまったく異なります。
=COLUMN(C1) → 3(C1セルの列番号)
=COLUMNS(A1:C10) → 3(A1からC10の列数)
- COLUMN関数: セルが「何列目にあるか」を返す(位置の情報)
- COLUMNS関数: 範囲に「何列あるか」を返す(サイズの情報)
覚え方は「複数形のCOLUMNSは範囲全体の列数を数える」と考えるとわかりやすいですよ。
NOTE
COLUMNS関数はGoogleスプレッドシートの全バージョンで使えます。Excelでもまったく同じ構文で動作します。
COLUMNS関数の基本的な使い方
セル範囲の列数を調べる
=COLUMNS(A1:E1)
A1からE1までの列数「5」を返します。行方向にどれだけ広がっていても結果は同じです。=COLUMNS(A1:E10) でも「5」になります。
単一セルの列数を調べる
=COLUMNS(B5)
単一セルは1列分なので、結果は「1」です。実務で単体で使う場面は少ないですが、数式の仕組みを理解するための基本として押さえておきましょう。
名前付き範囲の列数を調べる
=COLUMNS(売上データ)
名前付き範囲「売上データ」の列数を返します。メニューの「データ」>「名前付き範囲」で設定した範囲が対象です。セル参照を直接書くよりわかりやすくなりますよ。
配列定数の列数を調べる
=COLUMNS({1,2,3;4,5,6;7,8,9})
配列定数の列数「3」を返します。カンマ(,)で区切られた要素が列に対応します。セミコロン(;)は行の区切りなので、列数には影響しません。
COLUMNS関数の実務活用パターン
パターン1: INDEX関数と組み合わせて最終列のデータを取得
データ範囲の最後の列の値を取り出したいときに便利なパターンです。
=INDEX(A1:G1, COLUMNS(A1:G1))
COLUMNS関数で範囲の列数(7)を取得し、INDEX関数の列番号に渡しています。範囲の最後の列、つまりG1の値を返します。
2次元範囲で最終列・最終行のデータを取り出す場合は、ROWS関数と組み合わせます。
=INDEX(A1:G10, ROWS(A1:G10), COLUMNS(A1:G10))
ROWS関数で行数(10)、COLUMNS関数で列数(7)を取得して、範囲の右下隅のデータを返す仕組みです。
パターン2: OFFSET関数と組み合わせて可変範囲を作る
OFFSET関数の「幅」引数にCOLUMNS関数を使うと、範囲のサイズを動的に制御できます。
=OFFSET(A1, 0, 0, 1, COLUMNS(A1:E1))
COLUMNS関数が返す列数に応じて、OFFSET関数が返す範囲の幅が変わります。グラフの参照範囲やデータ入力規則の元データを可変にしたいときに活躍するパターンです。
パターン3: INDIRECT関数と組み合わせて動的な範囲サイズを取得
文字列で組み立てた範囲の列数を調べたいときに使えます。
=COLUMNS(INDIRECT("A1:" & B1 & "1"))
セルB1に入力された列文字に応じて範囲のサイズが変わります。B1が「F」なら =COLUMNS(A1:F1) と同じ結果(6)です。ユーザーが列数を指定して範囲を制御する仕組みを作りたいときに便利ですよ。
INDIRECT関数の詳しい使い方は関連記事を参考にしてみてください。
パターン4: データ項目数の検証に使う
想定どおりの列数があるかチェックする数式です。
=IF(COLUMNS(A1:G1) = 7, "OK", "列数が違います")
COLUMNS関数で範囲の列数を調べ、期待値(7列)と比較しています。他のシートからデータを取り込んだときに、列構造が変わっていないか検証するのに使えます。
パターン5: ROWS関数と組み合わせて総セル数を計算
COLUMNS関数とROWS関数を掛け合わせると、データ範囲の総セル数がわかります。
=ROWS(A1:G10) * COLUMNS(A1:G10)
この数式は 10 * 7 = 70 を返します。想定どおりのデータサイズか確認したいときに使えるパターンです。
TIP
COLUMNS関数は「範囲の列数」を返すだけのシンプルな関数です。単体よりも、INDEX・OFFSET・INDIRECTなど他の関数と組み合わせてこそ真価を発揮します。
COLUMN関数との違い・使い分け
COLUMNS関数とCOLUMN関数は名前が似ていますが、役割がまったく異なります。混同しやすいポイントを整理しておきましょう。
比較表
| 項目 | COLUMNS関数 | COLUMN関数 |
|---|---|---|
| 返す値 | 範囲の列数(サイズ) | セルの列番号(位置) |
| 引数 | セル範囲(必須) | セル参照(省略可) |
| 構文 | =COLUMNS(A1:E1) | =COLUMN(A1) |
| 結果の例 | =COLUMNS(C1:F1) → 4 | =COLUMN(C1) → 3 |
| 主な用途 | 範囲サイズの取得、動的範囲の制御 | 連番作成、動的な列参照 |
| 引数省略 | 不可(エラーになる) | 可(自分のセルの列番号を返す) |
使い分けのポイントはシンプルです。
- 「この範囲は何列あるか」を知りたい → COLUMNS関数
- 「このセルは何列目か」を知りたい → COLUMN関数
COLUMN関数の詳しい使い方は「スプレッドシートのCOLUMN関数の使い方」で解説しています。
ROWS関数との比較
COLUMNS関数とROWS関数は、列と行の方向が違うだけの対称ペアです。
| 項目 | COLUMNS関数 | ROWS関数 |
|---|---|---|
| 返す値 | 範囲の列数 | 範囲の行数 |
| 構文 | =COLUMNS(範囲) | =ROWS(範囲) |
| 結果の例 | =COLUMNS(A1:C10) → 3 | =ROWS(A1:C10) → 10 |
| 方向 | 横方向のサイズ | 縦方向のサイズ |
構文も =COLUMNS(範囲) と =ROWS(範囲) でまったく同じ形です。セットで覚えてしまいましょう。
また、ROW関数は「何行目か」を返す関数です。4つの関数の関係を整理すると次のようになります。
| 位置(1つのセル) | サイズ(範囲) | |
|---|---|---|
| 行(縦) | ROW関数 | ROWS関数 |
| 列(横) | COLUMN関数 | COLUMNS関数 |
この4つの関係を押さえておけば、「行番号? 行数? 列番号? 列数?」で迷うことがなくなりますよ。
ROWS関数の詳しい使い方は「スプレッドシートのROWS関数の使い方」で解説しています。
よくあるエラーと対処法
COLUMNS関数自体は非常にシンプルなので、単独でエラーになることはほとんどありません。ただし、いくつか注意点があります。
| エラー | 原因 | 対処法 |
|---|---|---|
| 引数なしでエラー | =COLUMNS() と引数を省略した | COLUMNS関数は引数が必須です。列数を調べたい範囲を指定してください |
#REF! | 参照先の行や列が削除された | 参照先セルが存在するか確認してください |
#NAME? | 名前付き範囲のスペルミス | 「データ」>「名前付き範囲」から名前を確認してください |
| 期待と違う数値が返る | 列数ではなく列番号を求めていた | 列番号がほしい場合はCOLUMN関数を使ってください |
特に注意したいのが「引数省略」のケースです。COLUMN関数は =COLUMN() と引数なしで使えますが、COLUMNS関数は必ず範囲を指定する必要があります。
TIP
「期待と違う数値が返る」場合は、COLUMNS関数とCOLUMN関数を混同していることがほとんどです。COLUMNS関数は範囲の「サイズ」、COLUMN関数はセルの「位置」を返します。
=COLUMNS(C1:F1)は「4」、=COLUMN(C1)は「3」です。
まとめ
COLUMNS関数は、セル範囲の列数を取得するシンプルな関数です。他の関数と組み合わせることで、最終列データの取得や動的な範囲制御に活用できます。
この記事のポイントをおさらいしておきましょう。
- COLUMNS関数は
=COLUMNS(範囲)で、範囲の列数を数値で返す(引数の省略は不可) - COLUMN関数は「何列目か(位置)」、COLUMNS関数は「何列あるか(サイズ)」を返す
- INDEX関数と組み合わせれば、最終列のデータを簡単に取得できる
- OFFSET関数と組み合わせれば、動的に伸縮する範囲を作れる
- ROWS関数とは行・列の方向が違うだけの対称ペア
まずは =COLUMNS(A1:E1) のシンプルな使い方から試してみてください。INDEX関数やOFFSET関数との組み合わせを覚えれば、データ管理がグッとラクになりますよ。
