Excel:从单个输入获取范围地址(寻找紧凑的公式)

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)

尝试 1

我能够得到这个结果,但使用以下(数组)公式非常复杂的方法。

{=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使用了四次。

尝试 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" ?
Run Code Online (Sandbox Code Playgroud)

尝试 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)}
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法(不太复杂的公式)具有相同的输出?

Gar*_*ent 5

考虑用户定义的函数:

Option Explicit

Public Function adres(rng As Range) As String
    adres = rng.Address(True, True)
End Function
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

用户定义函数 (UDF) 非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx

删除UDF:

  1. 调出如上的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从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

必须启用宏才能使其工作!


Mob*_*bus 3

这将是另一种方式:

=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)