Llu*_*ser 5 worksheet-function microsoft-excel microsoft-excel-2013
我正在尝试从单个输入中获取绝对范围地址。像这样的东西。
Formula
=SOME.MAGIC(A1:B10)
Output (string)
"$A$1:$B$10"
Run Code Online (Sandbox Code Playgroud)
我能够得到这个结果,但使用以下(数组)公式非常复杂的方法。
{=ADDRESS(MIN(ROW(A1:B10)),MIN(COLUMN(A1:B10)),1,1)&":"&ADDRESS(MAX(ROW(A1:B10)),MAX(COLUMN(A1:B10)),1,1)}
Run Code Online (Sandbox Code Playgroud)
其中(如您所见)字符串A1:B10
使用了四次。
我的另一个尝试是使用 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" ?
Run Code Online (Sandbox Code Playgroud)
下一步是尝试 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)}
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法(不太复杂的公式)具有相同的输出?
考虑用户定义的函数:
Option Explicit
Public Function adres(rng As Range) As String
adres = rng.Address(True, True)
End Function
Run Code Online (Sandbox Code Playgroud)
用户定义函数 (UDF) 非常易于安装和使用:
如果您保存工作簿,UDF 将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx
要删除UDF:
要从Excel 单元格使用UDF:
=adres(A1:B10)
Run Code Online (Sandbox Code Playgroud)
要了解有关一般宏的更多信息,请参阅:
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
必须启用宏才能使其工作!
这将是另一种方式:
=CELL("address",A1:B10)&":"&CELL("address",INDEX(A1:B10,ROWS(A1:B10),COLUMNS(A1:B10)))
Run Code Online (Sandbox Code Playgroud)
如果您有 Office 365,请使用 LET 仅引用该范围一次
=LET(ref, A1:B10, CELL("address",ref)&":"&CELL("address",INDEX(ref,ROWS(ref),COLUMNS(ref)))
Run Code Online (Sandbox Code Playgroud)