「スプレッドシートで列の番号を調べたいけど、A列が1でB列が2で…と数えるのは面倒」そんな経験はありませんか?
列数が多い表だと、目的の列が何番目か数え間違えることもあります。手作業で数えていると時間もかかりますよね。
スプレッドシートのCOLUMN関数を使えば、列番号を一発で取得できます。横方向の連番作成やINDEX関数との組み合わせにも活用できますよ。
この記事では、COLUMN関数の基本から応用技まで紹介します。
スプレッドシートのCOLUMN関数とは?基本の仕組みを理解しよう
COLUMN関数(読み方: カラム関数)は、セルの列番号を数値で返す関数です。「COLUMN」は英語で「列」を意味します。
たとえばセルC1にCOLUMN関数を入力すると、結果は「3」です。C列は左から3番目なので、その位置を数値で教えてくれます。
COLUMN関数にできることをまとめると、次のとおりです。
- セルの列番号を数値で返す
- 引数を省略すると、数式が入っているセル自身の列番号を返す
- 横方向の連番作成に使える
- 他の関数と組み合わせて動的な参照を作れる
COLUMN関数の基本構文
=COLUMN([セル参照])
カッコの中に、列番号を知りたいセルを指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| セル参照 | 任意 | 列番号を調べたいセル。省略すると数式のあるセル自身の列番号を返す |
引数は1つだけで、しかも省略できます。ROW関数と同じく、とてもシンプルな構文ですね。
COLUMN()引数なしとCOLUMN(A1)の違い
COLUMN関数の使い方は大きく2つあります。
=COLUMN()
引数なしで使うと、数式が入っているセルの列番号を返します。セルD3に入力すれば結果は「4」です。D列は左から4番目ですね。
=COLUMN(A1)
セル参照を指定すると、そのセルの列番号を返します。どのセルに入力しても結果は「1」です。A列は常に1番目だからです。
範囲を指定した場合は、先頭列の番号だけが返ります。
=COLUMN(C3:F10)
この結果は「3」です。C列からF列の範囲のうち、先頭のC列の列番号が返る仕組みです。
NOTE
COLUMN関数はGoogleスプレッドシートの全バージョンで使えます。Excelでもまったく同じ構文で動作しますよ。
COLUMN関数で横方向の連番を作る方法
COLUMN関数の最も実用的な使い方が、横方向に並ぶ連番の作成です。
月別・日別のヘッダーを自動で作る
たとえば、B1セルから右方向に「1, 2, 3…」と月番号を振りたい場合です。
=COLUMN()-1
B1セルに入力すると 2-1=1、C1セルなら 3-1=2 になります。数式を右にコピーするだけで連番が完成します。
列の挿入・削除にも自動で対応するので、手入力の番号より管理がラクです。
表の開始列がA列でない場合の対処法
実務では、表の左側にラベル列があるケースが多いですよね。たとえばデータがD列から始まる場合を考えてみましょう。
=COLUMN()-1 だとD列のセルは「3」になってしまいます。こんなときは次の数式を使います。
=COLUMN()-COLUMN($D$1)+1
$D$1 はデータ開始列のセルです。絶対参照にするのがポイントです。
| セル位置 | 計算内容 | 結果 |
|---|---|---|
| D列 | 4 – 4 + 1 | 1 |
| E列 | 5 – 4 + 1 | 2 |
| F列 | 6 – 4 + 1 | 3 |
この方法なら、表がどの列から始まっても正しい連番になります。列を挿入・削除しても自動で振り直されるので安心ですよ。
TEXT関数と組み合わせて月名を自動生成する
COLUMN関数で作った連番を月名に変換するテクニックです。
=TEXT(DATE(2026,COLUMN()-1,1),"M月")
B1セルに入力して右にコピーすると、「1月, 2月, 3月…」と月名ヘッダーが自動で並びます。
DATE関数で各月の1日を作り、TEXT関数で月名に整形する流れです。COLUMN()-1 の部分が月番号になっています。
TIP
縦方向の連番にはROW関数、横方向の連番にはCOLUMN関数と覚えておくと迷いません。ROW関数の詳しい使い方は「スプレッドシートのROW関数の使い方」で解説しています。
INDEX+COLUMNの組み合わせ技
INDEX関数と組み合わせて動的に列を切り替える
INDEX関数(指定した範囲から行番号・列番号で値を取り出す関数)と組み合わせると、列の位置に連動して参照先が自動的に変わる数式を作れます。
たとえば、A1:E10に売上データが入っているとします。2行目以降のデータを、列番号に連動して取り出すケースです。
=INDEX($A$1:$E$10, 2, COLUMN())
A列に入力すると1列目、B列なら2列目の値が取り出されます。数式を右にコピーするだけで、各列のデータを横に並べられます。
データの開始列がずれている場合は、オフセットを加えます。
=INDEX($A$1:$E$10, 2, COLUMN()-COLUMN($C$1)+1)
C1セルから数式を入力し始める場合の例です。COLUMN()-COLUMN($C$1)+1 で常に1から始まる連番を作り、INDEXの列番号に渡しています。
この組み合わせが活きる場面は次のとおりです。
- 元データの列順を変えずに、別の場所で並び替えた表を作りたいとき
- ダッシュボードで表示項目を切り替えたいとき
- 複数シートから同じ列位置のデータを集約したいとき
INDEX関数の詳しい使い方は「スプレッドシートのINDEX関数の使い方」で解説しています。
ADDRESS+COLUMNの組み合わせ技
ADDRESS関数と組み合わせてセル番地を自動生成する
ADDRESS関数(行番号と列番号からセル番地の文字列を作る関数)にCOLUMN関数の結果を渡すと、セル番地を動的に生成できます。
=ADDRESS(1, COLUMN())
A列に入力すると「$A$1」、B列なら「$B$1」が返ります。列の位置に応じてセル番地が自動で変わる仕組みです。
INDIRECT関数と組み合わせれば、生成したセル番地をそのまま参照に変換できます。
=INDIRECT(ADDRESS(ROW(), COLUMN()-1))
この数式は「自分の1つ左のセルの値」を返します。ROW関数で行番号、COLUMN()-1 で1つ左の列番号を取得し、ADDRESS関数でセル番地を組み立てています。
こうした動的参照は、次のような場面で便利です。
- 累計計算で「1つ前のセルの値を足す」パターン
- 条件によって参照先の列を切り替えたいとき
- マクロを使わずに柔軟なセル参照を実現したいとき
ADDRESS関数の詳しい使い方は「スプレッドシートのADDRESS関数の使い方」を参考にしてみてください。
COLUMN関数とROW関数の違い・使い分け
COLUMN関数とROW関数は、どちらもセルの位置を数値で返す関数です。取得する方向が異なります。
比較表
| 項目 | COLUMN関数 | ROW関数 |
|---|---|---|
| 返す値 | 列番号(横方向の位置) | 行番号(縦方向の位置) |
| 構文 | =COLUMN([セル参照]) | =ROW([セル参照]) |
| 使用例 | =COLUMN(C1) → 3 | =ROW(A3) → 3 |
| 連番の方向 | 横方向(右にコピー) | 縦方向(下にコピー) |
| よくある用途 | 横の連番、列ベースの動的参照 | 縦の連番、行ベースの動的参照 |
使い分けのポイントはシンプルです。
- 横方向の連番やヘッダー → COLUMN関数
- 縦方向の連番やナンバリング → ROW関数
また、COLUMNS関数(範囲の列数を数える関数)との混同に注意してください。COLUMN関数は「何列目か」、COLUMNS関数は「何列あるか」を返す別の関数です。
=COLUMN(C3:F10) → 3(先頭列の列番号)
=COLUMNS(C3:F10) → 4(範囲の列数)
ROW関数の詳しい使い方は「スプレッドシートのROW関数の使い方」で解説しています。
よくあるエラーと対処法
COLUMN関数自体は非常にシンプルなので、単独でエラーになることはほとんどありません。ただし、他の関数と組み合わせたときにエラーが出るケースがあります。
| エラー | 原因 | 対処法 |
|---|---|---|
#REF! | 参照先のセルや列が削除された | 数式内のセル参照を確認し、有効な範囲に修正する |
#VALUE! | COLUMN関数に文字列を渡した | 引数にはセル参照のみ指定する。"A1" のような文字列は不可 |
#REF!(INDIRECT併用時) | INDIRECT関数の参照先が存在しない | シート名やセルアドレスの文字列を確認する |
| 連番がずれる | 列の挿入・削除でオフセットが変わった | =COLUMN()-COLUMN($開始セル)+1 の形式で、開始セルを絶対参照にする |
特に注意したいのが「連番がずれる」ケースです。単純な =COLUMN()-1 だと、列を挿入したときにオフセット値が合わなくなります。
安全に連番を作りたい場合は、=COLUMN()-COLUMN($開始セル)+1 のパターンを使ってください。開始セルを絶対参照にしておけば、列の挿入・削除に強くなりますよ。
TIP
COLUMN関数の引数にセルアドレスの文字列を渡すのはよくある間違いです。
=COLUMN("C1")はエラーになります。文字列をセル参照に変換したい場合は、INDIRECT関数を使いましょう。=COLUMN(INDIRECT("C1"))のように書けばOKです。
まとめ
COLUMN関数は、セルの列番号を返すシンプルな関数です。単体で使うだけでなく、横方向の連番や動的参照の土台として幅広く活用できます。
この記事のポイントをおさらいしておきましょう。
- COLUMN関数は引数なしで自分のセルの列番号、セル参照指定でそのセルの列番号を返す
=COLUMN()-COLUMN($開始セル)+1で、表がどの列から始まっても正しい横方向の連番を作れる- 列の挿入・削除にも自動対応するので、手入力の番号より管理がラク
- INDEX関数と組み合わせれば、列位置に連動する動的な値の取得ができる
- ADDRESS関数と組み合わせれば、セル番地の動的生成もできる
- COLUMN関数は「何列目か」、ROW関数は「何行目か」、COLUMNS関数は「何列あるか」
まずは =COLUMN()-COLUMN($A$1)+1 の横方向連番パターンから試してみてください。月別ヘッダーや日別の集計表で、すぐに効果を実感できますよ。
