我正在尝试从单个输入中获取绝对范围地址。像这样的东西。
Formula
=SOME.MAGIC(A1:B10)
Output (string)
"$A$1:$B$10"
尝试 1
我能够得到这个结果,但是使用以下(数组)公式非常复杂的方法。
{=ADDRESS(MIN(ROW(A1:B10)),MIN(COLUMN(A1:B10)),1,1)&":"&ADDRESS(MAX(ROW(A1:B10)),MAX(COLUMN(A1:B10)),1,1)}
其中(如您所见)字符串A1:B10
使用了四次。
尝试 2
我的另一个尝试是使用 function FORMULATEXT
。一个范围的链接只存在一次,但是使用一个更多的单元格是令人讨厌的解决方法,并且仅适用于相对地址相对较好。它不适用于命名范围。
C1=$A$1:$B$10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "$A$1:$B$10" ✓
But
C1=A1:B10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "A1:B10" ✘
And
C1=Named_range
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1) //Returns string "Named_range" ✘
尝试 3
下一步是尝试 1+2 的组合。它有效,但我对此不满意。
C1=A1:B10
C2=MID(FORMULATEXT(C1),2,LEN(FORMULATEXT(C1))-1)
C3{=ADDRESS(MIN(ROW(INDIRECT(C2))),MIN(COLUMN(INDIRECT(C2))),1,1)&":"&ADDRESS(MAX(ROW(INDIRECT(C2))),MAX(COLUMN(INDIRECT(C2))),1,1)}
是否有更简单的方法(不太复杂的公式)具有相同的输出?
考虑用户定义的函数:
用户定义函数 (UDF) 非常易于安装和使用:
如果您保存工作簿,UDF 将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx
要删除UDF:
要使用Excel 单元格中的 UDF:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其正常工作!
这将是另一种方式:
如果您有 Office 365,请使用 LET 仅引用一次范围
实际上,您的尝试#1 正是这样做的方法。如果您正在寻找一种使其看起来更像函数的方法(较少重复引用/“参数”地址的单次使用),最好的方法是在 Office 365 中使用 LAMBDA。使用 LAMDA,您可以为一个命名范围,将 MAGIC 定义为
然后在工作表中使用 =MAGIC(A1:B10) 。