Excel 的列号为什么过了 Z 就变成 AA?
它不是普通 26 进制:没有 0 位,所以要用「减一再取余」。
因为它不是普通的 26 进制,而是「双射 26 进制」(bijective base-26)——这种进制里没有 0 这个数字位。普通进制里每一位可以是 0,所以 26 之后要进位变成 10;而字母列号每一位最小是 A(相当于 1),于是 Z 之后自然接 AA。
换算公式别写成除以 26 取余:正确做法是先把序号减一,再用 26 取余得到字母、用整除得到的商继续下一轮。这样第 26 列是 Z、第 27 列是 AA、第 702 列是 ZZ、第 703 列是 AAA,Excel 2007 之后的最大列第 16384 列是 XFD。
在 Excel 里拖到最右边,你会发现列标是 A 一直到 Z,然后是 AA、AB……最后停在 XFD。这个序列看起来像 26 进制,但按 26 进制去写换算代码,结果总是差一位——Z 之后会算出 BA,而不是 AA。
问题出在「0」上。字母列号没有 0 这个字符,A 就代表 1,所以它是一个「双射」计数系统:每位可取 26 个字符、但映射到 1 到 26 而不是 0 到 25。把这个偏移量处理掉,换算就一步到位。
1关键对照:Z 之后是 AA,不是 BA
这几个点是换算写错时最先暴露的位置,建议直接用它们做自测。
| 列序号 | 字母列号 | 容易算错的结果 | 说明 |
|---|---|---|---|
| 26 | Z | Z(正确) | 最后一位单字母列 |
| 27 | AA | BA(错) | 普通 26 进制会算成 BA |
| 52 | AZ | BZ(错) | 第一位仍是 A,第二位到 Z |
| 702 | ZZ | ZZ(正确) | 两位字母的极限,不是 676 |
| 703 | AAA | BAA(错) | 开始用三位字母 |
| 16384 | XFD | — | Excel 2007 及以后的最大列 |
想知道某个列号对应第几列,先看它是几位字母:一位最多 26 列,两位再加 26 乘 26 正好到 702,三位则从 703 起。
2换算公式与常见坑
把「减一」这一步的位置搞对,正反两个方向都不会错。
- 序号 → 字母
- 循环:先把序号减一,对 26 取余得到当前位字符,再把序号整除 26 继续,直到序号为 0。
- 字母 → 序号
- 从左到右累加:结果 = 结果 × 26 + 当前字母的值(A 记 1、B 记 2……Z 记 26)。
- 别直接用取余
- 写成序号对 26 取余再拼字符,会在 26、52、702 这些整倍点全部错一位,这是最常见的 bug。
- 列和行不是一个体系
- 行号就是普通十进制,从 1 到 1048576,不含字母;不要拿列号的逻辑去推行号。
- 注意版本差异
- Excel 97-2003 只有 256 列(末列 IV),2007 及以后才是 16384 列(末列 XFD)。
3什么时候真的需要换算
日常拖表格用不到,但下面这些活儿绕不开它。
- 公式拼接
- 用 INDIRECT、ADDRESS 之类函数动态指定位号时,需要把列号换成字母再拼进字符串。
- 批量生成表头
- 从数据库导出上百列数据时,要按列号自动写表头,手工数到 ZZ 之后必出错。
- 跨工具转换
- 把 Excel 内容搬到代码或配置文件里,经常需要「第几列」与「哪一列字母」互相翻译。
- 核对报表范围
- 看到别人给的区域写成 A1:XFD1048576 时,能立刻判断出它是「整个工作表」的意思。
顺着这个问题往下用
全部工具总览 →相关疑问
为什么不能按普通 26 进制算?
普通 26 进制有 0 这个位,26 会进位成 10;字母列号没有 0,A 就等于 1,所以每个整 26 的位置都会错一位,「先减一再取余」正是为了补掉这个偏移。
ZZ 到底是第几列?
第 702 列,不是 676。它是 26 乘 26 再加上第二位的 26 个取值,算出 676 的人通常忽略了每位最小是 A 而不是 0。
最大列为什么是 XFD?
因为 Excel 2007 之后单表上限是 16384 列,而 16384 换算成字母正好是 XFD。老版本 .xls 的 256 列换算出来是 IV。
行号也要这样换算吗?
不用。行号是普通的十进制数字,1 到 1048576,从头到尾没有字母,只有列号才有字母这一套体系。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-09。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱