AA は27番目の列、Excel の最後の列 XFD は16,384番目の列です
Excel の列は A から Z までの26文字で始まり、Z の次は AA、AB と2文字に、ZZ の次は AAA と3文字に増えていきます。そのため A は1番目、Z は26番目、AA は27番目、ZZ は702番目、AAA は703番目の列です。Microsoft の仕様表では、Excel のワークシートの大きさは 1,048,576 行 × 16,384 列とされているので、最後の列 XFD が16,384番目の列になります。
上の変換ツールは、列のアルファベットの欄と列番号の欄が連動して変わります。AA10 や $AA$10 のようなセル番地、R10C27 のような R1C1 形式の番地を入れても、列を読み取って番号にし、行番号と R1C1 形式の表記もあわせて表示します。全角の AA も読み取れます。シートの列見出しの帯で前後の列を見ながら移動でき、表の範囲を入れれば VLOOKUP に入れる範囲内の列番号を、その下の欄では今の列で埋めた数式と VBA・Python のコードを確認できます。リストはまとめて変換の欄で、同じ順序のまま一度に変換します。
列のアルファベットと番号を行き来する場面
- VLOOKUP や INDEX に列番号を入れるとき: VLOOKUP の3番目の引数は、シート全体ではなく、選んだ範囲の左端の列を1として数えた番号です。範囲が C 列から始まる場合、F 列は6番目ではなく4番目になるので、シート上の列番号と範囲内の列番号を分けて確認する必要があります。
- マクロ(VBA)でセルを指定するとき: VBA の Cells(行, 列) は列を数値で受け取ります。AA10 セルを指すなら Cells(10, 27) と書き、逆にマクロが返した列番号を人が読める列見出しに直したい場面もよくあります。
- 列見出しが数字になったブックを受け取ったとき: R1C1 参照スタイルがオンの Excel では、列見出しが 1、2、3 と表示され、数式の番地も R10C27 のように書かれます。同僚から「27列目」と言われたり、こうした番地が書かれた資料を受け取ったりしたら、AA 列に読み替える必要があります。
- プログラムから Excel ファイルを扱うとき: Python の openpyxl は列を1から数えますが、pandas の iloc や配列の添字は0から数えます。同じ AA 列がライブラリによって27にも26にもなるため、どちらの基準かをそろえないと1列隣を読んでしまいます。
- 古い .xls 形式で保存・受け渡しするとき: Excel 97-2003 形式は256番目の列である IV 列までしか扱えません。使っている列が IV を超えるかどうかを事前に確かめておかないと、.xls で保存したときにその右側のデータが失われます。
使い方
- 列のアルファベットがわかっていれば左の欄に、番号がわかっていれば右の欄に入れます。小文字の aa や全角の AA も AA として読みます。最後に入力した欄が基準になり、もう一方の欄はその値に合わせて変わります。
- セル番地をそのまま貼り付けても使えます。AA10 や $AA$10 は AA 列の10行目として、R10C27 は10行目・27番目の列として読み、結果の行に反対側の表記を表示します。
- 「シートの列見出し」の帯には、選んだ列とその前後の列が Excel の画面のように並びます。上段は通常の見出し(A1 形式)、下段は R1C1 スタイルで表示される番号です。見出しをクリックするか、帯を選んで ← → キーを押すと1列ずつ、PageUp・PageDown では26列ずつ移動します。
- 「表の範囲」の欄に B:F や B2:F100 の形で範囲を入れると、帯に範囲が斜線で示され、選んだ列がその範囲の何列目かと VLOOKUP の式が表示されます。
- 「数式・コードで変換」で Excel・Googleスプレッドシート、VBA、Python のタブを選ぶと、今の列で埋めた式が出ます。右のボタンで式だけをコピーできます。
- リストが複数あるときは「まとめて変換」の欄に貼り付けます。1行に1つでも、Excel からコピーしたタブ区切りの行でも、同じ位置・同じ順序で変換されます。変換できない値は ? のまま残り、何行目かも知らせます。「2列でコピー」を使うと、元の値と変換後の値がタブでつながるので、Excel の2列にそのまま貼り付けられます。
計算のしくみ: 0 がない26進法
- 文字の値: A = 1、B = 2、…、Z = 26 とします。ふつうの26進法は0から25までを使いますが、列のアルファベットには0にあたる文字がありません。
- 列のアルファベット → 番号: 左の文字から順に「これまでの値 × 26 + 次の文字の値」を繰り返します。XFD は X = 24、F = 6、D = 4 なので (24 × 26 + 6) × 26 + 4 = 16,384 です。桁ごとに展開すると 24 × 676 + 6 × 26 + 4 × 1 = 16,224 + 156 + 4 になります。
- 番号 → 列のアルファベット: 番号から1を引いて26で割った余りが、いちばん右の文字です(余り0 = A、25 = Z)。商に対して同じ操作を繰り返し、商が0になったら終わります。703 の場合は、702 ÷ 26 = 27 余り0 → A、27 − 1 = 26 ÷ 26 = 1 余り0 → A、1 − 1 = 0 → A となり、AAA です。
- 1を引く理由: 0がないので、Z(26)は「10」のように2桁にならず1文字のまま残ります。その代わり次の列で桁が1つ増え、AA(1 × 26 + 1 = 27)になります。1を引かずに割ると、26 を「A@」のような誤った文字にしてしまいます。
- 文字数ごとの列の数: 1文字の列は26個、2文字の列は 26 × 26 = 676個(27~702番目)、3文字の列は 26³ = 17,576個まで作れますが、Excel は XFD までなので、703~16,384番目の15,682個だけが使われます。上の「シート上の位置」の目盛りが、この3つの区間を対数目盛りで示します。
列番号 アルファベット 対応表(一覧)
A から XFD までの全部を1枚に並べると16,384行になるため、ここでは覚えておくと役に立つ列に絞っています。表にない列は、上の変換ツールに入れれば確認できます。
| 列 | 番号 | 列 | 番号 | 列 | 番号 | 列 | 番号 |
|---|---|---|---|---|---|---|---|
| A | 1 | H | 8 | O | 15 | V | 22 |
| B | 2 | I | 9 | P | 16 | W | 23 |
| C | 3 | J | 10 | Q | 17 | X | 24 |
| D | 4 | K | 11 | R | 18 | Y | 25 |
| E | 5 | L | 12 | S | 19 | Z | 26 |
| F | 6 | M | 13 | T | 20 | ||
| G | 7 | N | 14 | U | 21 |
| 列 | 番号 | 列 | 番号 | 列 | 番号 | 列 | 番号 |
|---|---|---|---|---|---|---|---|
| AA | 27 | HA | 209 | OA | 391 | VA | 573 |
| BA | 53 | IA | 235 | PA | 417 | WA | 599 |
| CA | 79 | JA | 261 | QA | 443 | XA | 625 |
| DA | 105 | KA | 287 | RA | 469 | YA | 651 |
| EA | 131 | LA | 313 | SA | 495 | ZA | 677 |
| FA | 157 | MA | 339 | TA | 521 | ||
| GA | 183 | NA | 365 | UA | 547 |
| 列 | 番号 | 説明 |
|---|---|---|
| Z | 26 | 1文字の列の最後 |
| AZ | 52 | A で始まる2文字の列の最後 |
| CV | 100 | 100番目の列 |
| IV | 256 | Excel 97-2003(.xls)の最後の列 |
| IW | 257 | .xls にはない最初の列 |
| ZZ | 702 | 2文字の列の最後 |
| AAA | 703 | 3文字の列の最初 |
| ALL | 1,000 | 1,000番目の列 |
| NTP | 10,000 | 10,000番目の列 |
| XFD | 16,384 | Excel 2007 以降の形式の最後の列 |
列が数字になったときは: R1C1 参照スタイル
Excel を開いたら列見出しが A、B、C ではなく 1、2、3 になり、数式も =R2C3 のように見える場合は、R1C1 参照スタイルがオンになっています。このスタイルは行も列も数字で書き、R の後ろに行番号、C の後ろに列番号を置きます。Microsoft の説明では、マクロで行や列の位置を計算するときに便利な形式で、マクロを記録すると一部のコマンドはこの形式で記録されるとのことです。
- Windows の Excel でオフにする: [ファイル] タブ → [オプション] → [数式] を開き、[数式の操作] の [R1C1 参照スタイル] のチェックボックスをオフにします。
- Mac の Excel でオフにする: [Excel] メニュー → [環境設定] → [数式とリスト] の [計算] を開き、[R1C1 参照スタイルを使用] のチェックボックスをオフにします。
- 変わるのは表示だけ: オンにしてもオフにしても、セルの値や数式が指すセルは同じままで、列見出しと数式の番地の書き方だけが変わります。
| A1 形式 | R1C1 形式 | 意味 |
|---|---|---|
| $AA$10 | R10C27 | 10行目・27番目の列(AA)のセル、絶対参照 |
| $B$2 | R2C2 | 2行目・2番目の列のセル、絶対参照 |
| $C:$C | C3 | 3番目の列全体 |
| (今のセル基準) | R[-2]C | 2行上の同じ列のセル(相対参照) |
| (今のセル基準) | R[2]C[2] | 2行下で2列右のセル(相対参照) |
R[-2]C のように角かっこが付く相対参照は、数式が入っているセルを基準に決まるため、基準のセルがないと A1 形式の番地に直せません。この変換ツールが変換するのは、R10C27 のように数字が決まっている絶対参照の番地だけです。
Excel・Googleスプレッドシート・VBA・Python での変換式
| やりたいこと | 式 | 結果 |
|---|---|---|
| 列のアルファベット → 番号 | =COLUMN(AA1) | 27 |
| A2 セルの文字の列 → 番号 | =COLUMN(INDIRECT(A2&"1")) | 27 |
| 番号 → 列のアルファベット | =SUBSTITUTE(ADDRESS(1,27,4),"1","") | AA |
| 行・列番号 → A1 形式の番地 | =ADDRESS(10,27,4) | AA10 |
| 行・列番号 → R1C1 形式の番地 | =ADDRESS(10,27,1,FALSE) | R10C27 |
| VBA: 列のアルファベット → 番号 | Range("AA1").Column | 27 |
| VBA: 番号 → 列のアルファベット | Split(Cells(1, 27).Address, "$")(1) | AA |
| Python(openpyxl): 列のアルファベット → 番号 | column_index_from_string("AA") | 27 |
| Python(openpyxl): 番号 → 列のアルファベット | get_column_letter(27) | AA |
- COLUMN 関数は、参照したセルの列番号を返します。後ろの行番号は結果に関係しないので、=COLUMN(AA100) も27です。かっこを空にした =COLUMN() は、数式が入っているセル自身の列番号になります。日本語版の Excel でも関数名は COLUMN のままで、引数の区切りはカンマです。
- ADDRESS 関数の3番目の引数 4 は、行・列ともに相対参照という意味で、$ なしの「AA1」を作ります。4番目の引数を FALSE にすると R1C1 形式で作ります。Googleスプレッドシートの ADDRESS も同じ順序・同じ値(4 = 行・列とも相対、FALSE = R1C1)です。
- SUBSTITUTE で 1 を消す式は、行を 1 に固定しているから正しく動きます。=SUBSTITUTE(ADDRESS(21,27,4),"1","") のように別の行にすると、「AA21」から 1 だけが消えて「AA2」になるので、行の引数は必ず 1 にしてください。
- VBA の Range.Address は、指定しなければ「$AA$1」のように行も列も絶対参照で返すので、$ で区切った2番目の要素が列のアルファベットです。Address(ReferenceStyle:=xlR1C1) と呼ぶと R1C1 形式で受け取れます。
- openpyxl の2つの関数は1から数えます。pandas の iloc のように0から数える位置が必要なら、結果から1を引くと AA 列は26になります。
表の範囲の中で何列目かを数える(VLOOKUP・INDEX)
VLOOKUP の3番目の引数(列番号)は、選んだ範囲の左端の列を1として数えた番号です。Microsoft の説明にある例のとおり、範囲が B2:D11 なら B 列が1、C 列が2になります。したがって列番号は「探す列の番号 − 範囲の先頭列の番号 + 1」で求められ、Excel の中では =COLUMN(F1)-COLUMN(C1)+1 のように計算できます。INDEX の列番号も同じ数え方です。
| 表の範囲 | 探す列 | 計算 | 列番号 |
|---|---|---|---|
| C:F | F | 6 − 3 + 1 | 4 |
| B2:D11 | C | 3 − 2 + 1 | 2 |
| Y:AD | AA | 27 − 25 + 1 | 3 |
| A:Z | Z | 26 − 1 + 1 | 26 |
| H:AK | AF | 32 − 8 + 1 | 25 |
範囲が A 列から始まるときだけ、範囲内の列番号とシート上の列番号が一致します。範囲に列を挿入したり削除したりしても、VLOOKUP に数字で書いた列番号は自動では変わらないので、列番号を COLUMN の式で計算しておくほうが安全です。
プログラム・ファイル形式ごとの最後の列
| プログラム・形式 | 最後の列 | 列数 | 行数 |
|---|---|---|---|
| Excel 2007 以降(.xlsx・.xlsm・.xlsb) | XFD | 16,384 | 1,048,576 |
| Excel 97-2003(.xls) | IV | 256 | 65,536 |
| Googleスプレッドシート | ヘルプに列数の上限の記載なし | — | — |
Microsoft の互換性に関する説明では、Excel 97-2003 の形式は 65,536 行 × 256 列で、その範囲の外にあるデータは保存されず、範囲外のデータを参照している数式は #REF! エラーを返すとされています。Google ドライブのヘルプは、Googleスプレッドシートで作成した、または変換したスプレッドシートの上限を 2,000 万セルまたは 100 MB と定めていますが、列数の上限は書いていません。この変換ツールは Excel の基準である XFD(16,384番目)まで変換します。
基準日: Microsoft「Excel の仕様と制限」「ワークシートの互換性に関する問題」と、Google ドライブの保管上限のヘルプを2026年10月21日に確認しました(2026-10-21 確認)。列のアルファベットと番号の対応そのものは決まった計算なので、変わりません。
よくある間違い
- Z の次を BA と考える: 10進法の「9の次は10」を思い浮かべると Z の次を BA にしてしまいがちですが、実際は AA です。BA は53番目の列です。
- シート上の列番号をそのまま VLOOKUP の列番号にする: 範囲が C:F なのに F 列の番号6を入れると、範囲の列数(4列)より大きいため #REF! エラーになります。範囲がもっと広ければエラーにならず別の列の値を返すので、かえって気づきにくくなります。正しい列番号は4です。
- 0 から数える添字と混ぜる: プログラムで受け取った26が、実際には AA(27番目)の列だったということがあります。この変換ツールは、結果の行に「0 から数えると」の値も一緒に表示します。
- SUBSTITUTE の式の行を変える: 番号 → アルファベットの式で ADDRESS の最初の引数を 1 以外の行にすると、行番号に含まれる 1 が消えて、意図しない文字が残ります。
- 英字の O・I と数字の 0・1 を取り違える: 列名には O や I も使われます(IO は249番目の列)。数字の 0 や 1 を代わりに入力すると別の列になったり、「I0」のように0行目の番地になってエラーになったりします。
- IME がオンのまま入力する: 日本語入力がオンだと aa が「ああ」になります。この変換ツールは、ひらがな・カタカナが入ると変換せずに、IME をオフにして入力し直すよう知らせます。全角英数字の AA や XFD は半角に直して読むので、そのまま入力して構いません。
制限事項
- 変換できるのは Excel のワークシートの範囲、つまり A~XFD 列(1~16,384番目)と 1~1,048,576 行だけです。XFE のように範囲の外にある文字は、何番目にあたるかを知らせるだけで、結果としては使いません。
- R[-2]C のような相対の R1C1 参照、名前の定義、'Sheet1'!A1 のような別シートの参照は読み取りません。表の範囲の欄は列だけを使い、行番号は無視します。
- 「まとめて変換」は、語ごとに列だけを変換します。AA10 のようなセル番地は列番号27に、R10C27 は列のアルファベット AA に変換し、行は残しません。
- 数式の欄の式は、引数をカンマで区切る Excel・Googleスプレッドシートを基準に書いています。リストの区切り記号がセミコロンの環境では、カンマを ; に置き換えて入力してください。
- 入力した値はお使いの端末のブラウザの中だけで計算し、どこにも送信しません。「リンクをコピー」を押すと、今の値がアドレスに入ります。
出典
- 01Microsoft サポート — Excel の仕様と制限ワークシートの行数と列数 1,048,576 行、16,384 列 — 2026-10-21 確認
- 02Microsoft サポート — ワークシートの互換性に関する問題Excel 97-2003 は 65,536 行・256 列、範囲外のデータは保存されない
- 03Microsoft サポート — Excel の数式の概要R1C1 参照スタイル: オプション → 数式 → 数式の操作、R[-2]C・R2C2 の表、マクロの記録
- 04Microsoft サポート — Excel for Mac の列見出しに文字ではなく数字のラベルが表示される環境設定 → 数式とリスト → 計算 → R1C1 参照スタイルを使用 をオフにする
- 05Microsoft サポート — COLUMN 関数参照したセルの列番号を返す
- 06Microsoft サポート — ADDRESS 関数abs_num 4 = 相対参照、a1 引数 FALSE = R1C1 形式(=ADDRESS(2,3,1,FALSE,…) → R2C3)
- 07Microsoft サポート — SUBSTITUTE 関数文字列の中の文字を別の文字に置き換える
- 08Microsoft サポート — INDIRECT 関数文字列で書いた参照を実際の参照にする
- 09Microsoft サポート — VLOOKUP 関数列番号は範囲の左端の列を1として数えた番号
- 10Microsoft Learn — Range.Address プロパティ (VBA)RowAbsolute・ColumnAbsolute の既定値 True($A$1)、ReferenceStyle xlR1C1
- 11Microsoft Learn — Range.Column プロパティ (VBA)範囲の最初の列の番号を返す
- 12Google ドキュメント エディタ ヘルプ — ADDRESSabsolute_relative_mode 4 = 行・列とも相対、use_a1_notation FALSE = R1C1
- 13Google ドライブ ヘルプ — Google ドライブに保管可能なファイルスプレッドシートは 2,000 万セルまたは 100 MB まで
- 14openpyxl — openpyxl.utils.cellget_column_letter・column_index_from_string(1から数える)
よくある質問
Excel で AA 列は何番目の列ですか?
27番目の列です。A~Z が1~26番目で、Z の次が2文字で始まる AA なので、26 + 1 = 27 になります。AZ は52番目、BA は53番目、ZZ は702番目の列です。
Excel の最後の列は何列目で、アルファベットでは何ですか?
Excel 2007 以降の形式(.xlsx など)の最後の列は XFD で、16,384番目です。Microsoft の仕様表では、ワークシートの大きさは 1,048,576 行 × 16,384 列です。Excel 97-2003 形式(.xls)は256番目の IV 列までしかなく、それより右のデータは .xls で保存すると残りません。
列番号をアルファベットに変換する関数はありますか?
専用の関数はありませんが、=SUBSTITUTE(ADDRESS(1,27,4),"1","") のように組み合わせると変換できます。ADDRESS(1, 27, 4) が1行目の相対参照「AA1」を作り、SUBSTITUTE が行番号の 1 を消して「AA」だけを残します。行は必ず 1 にしてください。21行目で作ると「AA21」から 1 だけが消えて「AA2」になります。
列のアルファベットを列番号に変換する数式は?
=COLUMN(AA1) のように、その列のセル参照を COLUMN 関数に入れると27が返ります。後ろの行番号は結果に影響しません。列のアルファベットが A2 セルに文字として入力されている場合は、=COLUMN(INDIRECT(A2&"1")) で変換できます。
Excel の列見出しが A、B、C ではなく 1、2、3 になりました。
R1C1 参照スタイルがオンになっています。Windows の Excel では、[ファイル] → [オプション] → [数式] の [数式の操作] にある [R1C1 参照スタイル] のチェックボックスをオフにすると、A、B、C の表示に戻ります。Mac では [Excel] メニュー → [環境設定] → [数式とリスト] の [計算] で [R1C1 参照スタイルを使用] をオフにします。この状態で R10C27 と表示される番地は AA10 セルです。
なぜ Z の次は BA ではなく AA なのですか?
列のアルファベットには0にあたる文字がないからです。A~Z が1~26を表すので、10進法で9の次が10になるように 1 と 0 を使う代わりに、桁が増えて AA(1 × 26 + 1 = 27)になります。番号を文字にするときは、1回ごとに1を引いて26で割ります。
VLOOKUP の列番号と、この変換ツールの列番号は同じですか?
範囲が A 列から始まるときだけ同じです。VLOOKUP の列番号は選んだ範囲の左端の列を1として数えた番号で、この変換ツールの番号はシート全体で数えた位置です。C:F の範囲なら F 列は 6 − 3 + 1 = 4番目です。「表の範囲」の欄に範囲を入れると、この番号をそのまま数えます。
VBA や Python ではどう変換しますか?
VBA では Range("AA1").Column が27を、Split(Cells(1, 27).Address, "$")(1) が「AA」を返します。Python の openpyxl では、column_index_from_string("AA") が27、get_column_letter(27) が 'AA' です。pandas の iloc のように0から数える位置が必要なときは、1を引いて26にします。