概要
COLUMNは「セルや範囲の“列番号”」を返す関数です。A列は1、B列は2…Z列は26のように、シート上の列番号で返します。範囲を渡すと、範囲内の各列番号(横方向の配列)を返します。式の横展開、汎用テンプレート、動的列参照の作成などで役立ちます。
基本の使い方
書式
=COLUMN([参照])
- 参照を省略すると「この式があるセルの列番号」を返します。
- セルや範囲を渡すと、その“左端の列番号”か、動的配列(Microsoft 365)では範囲内の列番号が並びます。
例
=COLUMN() // そのセルの列番号
=COLUMN(A1) // 1(A列)
=COLUMN(Z10) // 26(Z列)
=COLUMN(B2:D2) // {2,3,4}(Microsoft 365で横方向に返る)
具体例
横方向に1,2,3…と連番を作る(動的配列)
=COLUMN(B1:D1)
B〜D列の位置に合わせて {2,3,4} を返します。列ベースの連番やオフセット計算に使えます。
指定開始列からの“相対列インデックス”を作る
開始列をB(列2)として、C列なら1、D列なら2…と相対化します。
=COLUMN()-COLUMN($B$1)+1
横にコピーしても“開始列からの位置”で動きます。
INDEXと組み合わせて“n列目”を可変取得
範囲のn列目を取得(nは列インデックス)
=INDEX($B$2:$F$20, 1, COLUMN($B:$F)-COLUMN($B:$B)+1)
またはシンプルに
=INDEX($B$2:$F$20, 行番号, 列番号)
列番号部分をCOLUMNで生成すると、横コピーで自動的に列がずれます。
応用テンプレート
見出し位置に合わせた自動番号付け
見出しがB1:D1にあるとき、その真下で列番号を表示
=COLUMN(B1:D1)
レポートの列管理に使えます。
列シフトでデータを参照(横コピーに強い)
基準列Bを0として、右に1列進むごとに列をずらす
=INDEX($B$2:$Z$2, COLUMN()-COLUMN($B$1)+1)
関数だけで“横方向のオフセット”が実現できます。
列番号から列記号への変換(ADDRESS+SUBSTITUTE)
列番号nを列記号に変換したいとき
=SUBSTITUTE(ADDRESS(1, n, 4), "1", "")
例:n=27 → AA
範囲の“列数”を知りたいとき(COLUMNSとの違い)
列数が欲しいならCOLUMNSを使います(COLUMNは“番号”、COLUMNSは“個数”)。
=COLUMNS(B2:F20) // 5
よくあるつまずきと対策
範囲を渡したのに1つしか返らない
古いExcelでは範囲にCOLUMNをかけても“左端の列番号”だけになります。Microsoft 365の動的配列なら配列で返る点に注意してください。
絶対参照を忘れて相対化がズレる
開始列の基準セルに絶対参照($)を付けるのを忘れると、コピー時に基準が動きます。
=COLUMN()-COLUMN($B$1)+1 // $ を必ず付ける
列数と列番号の取り違え
“列数”はCOLUMNS、“列番号”はCOLUMN。用途に応じて正しく使い分けます。
テーブル(構造化参照)との併用
テーブル見出しの列番号は分かりづらいことがあります。構造化参照では“列名”を直接使えるため、COLUMNに頼らず可読性を優先するのも実務的です。
=INDEX(売上[金額], 行番号)
例題
問題1: この式のあるセルの列番号をB2に表示してください。
解答例:
=COLUMN()
問題2: セルA2の列番号をC2に表示してください。
解答例:
=COLUMN(A2)
問題3: 範囲B2:D2の各列番号をE2から横に表示してください(Microsoft 365)。
解答例:
=COLUMN(B2:D2)
問題4: 開始列Bを基準として“相対列インデックス”をF2に表示(C列なら1、D列なら2)。
解答例:
=COLUMN()-COLUMN($B$1)+1
問題5: 列番号27の列記号(AA)をG2に表示してください。
解答例:
=SUBSTITUTE(ADDRESS(1, 27, 4), "1", "")
まとめ
COLUMNは「列番号」を取得する基本関数で、横コピーに強い式設計、相対インデックス、動的配列の横連番などに向いています。列“個数”はCOLUMNS、列“記号”はADDRESS+SUBSTITUTEが便利。絶対参照で基準を固定し、範囲に対しては動的配列の挙動を理解すると、テンプレートが安定します。
