Excel 的列号为什么过了 Z 就变成 AA?

3 个讲解板块 · 关联 1 款站内工具 · 内容最后核对 2026-10-09

它不是普通 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

这几个点是换算写错时最先暴露的位置,建议直接用它们做自测。

列序号字母列号容易算错的结果说明
26ZZ(正确)最后一位单字母列
27AABA(错)普通 26 进制会算成 BA
52AZBZ(错)第一位仍是 A,第二位到 Z
702ZZZZ(正确)两位字母的极限,不是 676
703AAABAA(错)开始用三位字母
16384XFD—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。若发现错误,欢迎通过页脚反馈入口告知。