在excel中生成列标签的文本a,b,c,...,iv,并转化为数字序号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel中生成列标签的文本a,b,c,...,iv,并转化为数字序号相关的知识,希望对你有一定的参考价值。

在a1输入公式:
=ADDRESS(1,COLUMN(),4),
然后选中整行,ctrl_R,这样便得到了列代号A1,B1,...,IV1.
我的要求是,如何直接得到A,B,C,...,IV?方法一:
使用公式:=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
但是觉得很烦。
可恨的是,excel不能在公式内部引用本公式的子函数;
同时,如果支持使用符号参数end表示字符串的长度值,公式就可以((类似matlab))简化为:'=LEFT(ADDRESS(1,COLUMN(),4),end-1)

利用数学转换,将列号数字1,2,3,...,256转化为26进制的代码a,b,c,...,z,aa,iv,也是个办法。但是如何用简单的公式实现?
同时推广,将任意较大的10进制数字转化为这样的26进制字符序列?
反过来,将这样的26进制字符序列转化为10进制数字?

在matlab中,这个问题很简单。可是在excel中,怕是小看它了。
注意这样的数制是没有0的数制系统,我称为无0计数制。
a~Z对应1~26,而aa则对应于1*26+1=27,az对应于1*26+26=52
外一则:这样的无0二进制形式为:
1,2,11,12,21,22,111,112,121,122,211,212,221,222,...
更多补充和严格的说明,请见:
http://hi.baidu.com/wsktuuytyh/blog/item/c75b6c7ee166732e0dd7da21.html?timeStamp=1302463674953

参考技术A 简单点的公式 =SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")追问

您回答了其中一部分。谢谢回答。

追答

若想根据列标求列号,如A1输入“DD”,A2得到数字列号“108”,则可在A2输入公式:=COLUMN(INDIRECT(A1&1))
根据列数求列标,如B1输入“100”,B2得到列标“CV”,则可在B2输入公式:
=SUBSTITUTE(ADDRESS(1,B1,4),"1","")

追问

谢谢您的进一步回答。我期待的是,对推广的情况作出一些方案。
例如,A1为ZYXWVUTSRQPO
A3中填入公式:
=IF(OR(A$1="",A$2""),"首行:字母序列;次行:空",TEXT(A2*26+MOD(CODE(MID(A$1,ROW(A1),1)),32),"###############"))
向下拖放得到:
26
701
...
这样是使用了一个公式序列。不知道有没有一个公式得到结果,并且较为简洁的方法。
若用嵌套计算,那样我就不考虑用excel来实现了。
字数限制,更多内容见文后留言.

追答

相当于是一个任意的26进制数转化为10进制数的问题,应该从数学的角度来研究进制数之间的转化规律,可能较复杂。我只写过10进制数转化为10以内进制的公式,10以上进制转化可能完全不同。象“ZYXWVUTSRQPO"这样大的数转化成10进制数也只能以文本形式显示了。

追问

我在 hi.baidu.com/wsktuuytyh/blog/item/c75b6c7ee166732e0dd7da21.html
后7楼留言给出了这种特殊的26进制(我称为无零26进制)转10进数字的方法。
数组公式:
=SUMPRODUCT(IF(ROW(A:A)>LEN(A$1),"",MOD(CODE(MID(A$1,ROW(A:A),1)),32)),IF(ROW(A:A)>LEN(A$1),"",26^(LEN(A$1)-ROW(A:A))))
剩下的问题是,如何打破14位有效数字精确(第15位即末位可能有舍入)

十进制转无零26进制,我还没有妥善解决。
请您留言探讨一下。

追答

我也思考了一个字母转化为10进制序号的公式:=SUM(SEARCH(MID($A$1,ROW(INDIRECT("A1:A"&LEN($A$1))),1),"ABCDEFGHIJKLMNOPQRSTUVWXYZ")*26^(LEN($A$1)-ROW(INDIRECT("A1:A"&LEN($A$1)))))试过和他的公式结果相同。精度问题可能是受EXCEL应用程序本身计算精度限制的,没有办法。十进制转无零26进制,再考虑吧。

追问

谢谢您给出了一个新思路。虽然我现在文库积分欠缺,我还是加一些分数。有空的话,考虑一下十进制转无零26进制的问题。
您的公式是用查找函数得到A与1的对应。我的那个公式用sum写的话是如下形式:
=SUM(IF(ROW(A:A)>LEN(A$1),"0",MOD(CODE(MID(A$1,ROW(A:A),1)),32))*IF(ROW(A:A)>LEN(A$1),"0",26^(LEN(A$1)-ROW(A:A))))
还可以简化,见文件后留言。
有心的朋友们请在文后留言。我此外先采纳答案了。

本回答被提问者采纳

以上是关于在excel中生成列标签的文本a,b,c,...,iv,并转化为数字序号的主要内容,如果未能解决你的问题,请参考以下文章

如何将帆软中生成的图表与自己写的.net程序进行集成?

使用 SVM 对文本数据进行多标签分类

python 在Excel 表格中生成 九九乘法表

在excel表格中设置啥公式能按类别自动求和

Matlab两个一维数组合并为一个数组?

单元格格式为文本或前面有撇号,SAP Webi 中生成的 Excel 文件