我正在寻找一个简单通用的公式,可以对列位置进行简单的数学运算,返回适当的列信代码。例如:
- 给定 A 列,设置为 +1,它应该返回乙
- 给定 E 列,设置为 -2,它应该返回C
- 给定 Y 列,设置为 +3,它应该返回AB
- 给定列 BAA,设置为 -1,它应该返回亚兹
- 给定 C 列,设置为 * 2,它应该返回F
它应该很容易修改,要么相对于它所在的列,要么采用硬编码的列字母,或者从公式中获取列字母
请注意,流行的公式=CHAR(CODE(A1)+1)
在超出范围时不再起作用Z
。
答案1
这是迄今为止我发现的最好的:
=SUBSTITUTE(地址(1,(列() + 1),4),1,””)
中间以粗体标记的部分是唯一发生变化的部分。
在这个例子中,它取当前列并加 1,因此B
如果它在列中则返回A
,AA
如果它在列中则返回Z
。
示例变体
添加到固定列的示例(向 Z 列添加 2,返回“AB”):
=SUBSTITUTE(地址(1,(列(Z1) + 2),4),1,””)
示例:读取包含字母的单元格A1
作为文本并将其视为列字母:
=SUBSTITUTE(地址(1,(列(间接(A1&1))+ 1),4),1,””)
A1
示例读取包含以下内容的单元格数字被视为一列数字(例如,如果它包含 25,它将返回 AB):
=SUBSTITUTE(地址(1,(列(间接(A1&1))+ 1),4),1,””)
使用以下方式查找单元格indirect()
如果你的目标是查找单元格例如,使用indirect()
,您可以跳过 ,substitute()
只需输入行号即可。例如,如果您想查找当前单元格右侧的单元格(因此将单元格字母增加一个,并保持行不变):
=INDIRECT( ADDRESS( ROW(), ( COLUMN() + 1 ),4) )
基于部分原因是它有一个方便的公式,用于转置以获得一列列字母,每行递增。
答案2
最简单的方法是使用INDIRECT
ANDR1C1
引用样式
例如
=INDIRECT("R[1]C[1]",0)
将引用+1 row
并+1 column
来自当前单元格。
=INDIRECT("RC[3]",0)
将向右移动三列,-3
向左移动三列。
如果您愿意,可以使用一些concatenate
或引用单元格来开始或增加:&
A1=INDIRECT("RC["&A2&"]",0)
A2 =1
B1 =x
那么 A1 =x
一旦你加入一些cell
,它row
就会变得更加复杂,但效果是一样的。column
address