您如何确定Excel中第n列的列名(例如"AQ"或"BH")?
编辑:一种语言无关的算法,以确定这是这里的主要目标.
我曾经写过这个函数来执行那个确切的任务:
public static string Column(int column) { column--; if (column >= 0 && column < 26) return ((char)('A' + column)).ToString(); else if (column > 25) return Column(column / 26) + Column(column % 26 + 1); else throw new Exception("Invalid Column #" + (column + 1).ToString()); }
这是我能提出的最清晰的正确解决方案(用Java编写,但随意使用您喜欢的语言):
String getNthColumnName(int n) { String name = ""; while (n > 0) { n--; name = (char)('A' + n%26) + name; n /= 26; } return name; }
但如果您在此代码中发现错误,请告诉我,谢谢.
语言无关的算法如下:
function getNthColumnName(int n) { let curPower = 1 while curPower < n { set curPower = curPower * 26 } let result = "" while n > 0 { let temp = n / curPower let result = result + char(temp) set n = n - (curPower * temp) set curPower = curPower / 26 } return result
此算法还会考虑Excel是否再次升级以处理超过16k列.如果你真的想要超越,你可以传递一个额外的值,并用另一个数字替换26的实例,以容纳替代字母表
谢谢你,Joseph Sturtevant!你的代码完美无缺 - 我需要在vbscript中使用它,所以我想分享我的版本:
Function ColumnLetter(ByVal intColumnNumber) Dim sResult intColumnNumber = intColumnNumber - 1 If (intColumnNumber >= 0 And intColumnNumber < 26) Then sResult = Chr(65 + intColumnNumber) ElseIf (intColumnNumber >= 26) Then sResult = ColumnLetter(CLng(intColumnNumber \ 26)) _ & ColumnLetter(CLng(intColumnNumber Mod 26 + 1)) Else err.Raise 8, "Column()", "Invalid Column #" & CStr(intColumnNumber + 1) End If ColumnLetter = sResult End Function
约瑟夫的代码很好但是,如果你不想或不需要使用VBA函数,试试这个.
假设n的值在单元格中A2
使用此函数:
=MID(ADDRESS(1,A2),2,LEN(ADDRESS(1,A2))-3)