在Excel中检索单元格名称

在Excel中检索单元格名称,excel,Excel,有没有办法在另一个单元格中显示特定单元格的单元格名称?我想在相邻的单元格中显示单元格名称,这样用户就可以不用单击它就可以识别单元格名称。这似乎是不可能的,这很奇怪。您可能认为函数应该提供一种获取名称的方法,但它没有。糟糕。这将在非常基本的情况下起作用: Public Function CellName(cel As Range) As Variant Dim nm As Name For Each nm In Names If nm.RefersTo = "=" &

有没有办法在另一个单元格中显示特定单元格的单元格名称?我想在相邻的单元格中显示单元格名称,这样用户就可以不用单击它就可以识别单元格名称。

这似乎是不可能的,这很奇怪。您可能认为
函数应该提供一种获取名称的方法,但它没有。糟糕。

这将在非常基本的情况下起作用:

Public Function CellName(cel As Range) As Variant
Dim nm As Name
    For Each nm In Names
        If nm.RefersTo = "=" & cel.Parent.Name & "!" & cel.Address Then
            CellName = nm.Name
            Exit Function
        End If
    Next
    CellName = CVErr(xlErrNA)
End Function
如果单元格是命名范围的一部分,它将不起作用,它将不会显示单元格的多个名称,它将不适用于命名公式中包含的单元格(例如
=OFFSET()
范围)


这东西也很笨重。也许有更好的方法来检查。从referesto创建范围对象并使用Intersect()可能会起作用。

Excel确实有一个函数“Cell()”,您可以从中获取某些属性


您可以使用=Cell(“row”,K9)返回第9行,其中有一个等效的“col”参数,但它返回的是列号(11),而不是字母。

此函数将给出单元格所属的名称区域的名称:

公共函数CellName(oCell作为范围)作为变量
以名字命名
用于此工作簿中的每个oName。名称
如果oName.referestorange.Parent是oCell.Parent,则
如果不相交(oCell、oName.referestorange),则什么都不是
CellName=oName.Name
退出功能
如果结束
如果结束
下一个
CellName=CVErr(xlErrNA)
端函数
它循环遍历工作簿中的所有名称,然后针对每个名称检查是否引用了此工作表输入参数中的任何内容。如果是,则检查输入单元格和名称所指的区域是否相交。如果他们这样做,则返回范围的名称。

地址(行(),列())
将为您提供地址,例如当前单元格的$A$1。从行/列值(数字)中添加/减去以引用要查找的单元格


如果你不想要美元,那么你可以找到并用替换(地址(行(),列()),“$”,“)替换它,然后只得到A1,例如,

我从上面的回答中从Adarsha那里得到了一些“建议”。我得到了与下面代码类似的结果,使用了该循环和一些改进。不过,我的“excel提示”宏是让调试器成为您最好的朋友

函数名(clls) ' name_of=“” ' 将nam作为字符串 变暗rg As范围 设置rg=clls ' nam=rg.Name.Name ' 名称=nam ' 结束函数的名称\u 一点点耐心和毅力,给了我想要的东西——一个用户定义的函数,给了我定义的单元格名称。如果同一单元格有多个名称,会发生什么情况?试试看。这是一个简单的测试,所以我想把它留给你们去实验、学习和传授你们的新知识。

ActiveWorkbook.Sheets.Item(1).Cells(row,col).Name.Name

在另一个单元格(本例中为E12)中引用命名单元格,然后使用以下公式:=“'”和FORMULATEXT(E12)。这会在前面加一个撇号,以便将名称或公式显示为文本。

您可以将光标放在空单元格中,键入=然后单击命名单元格。它将显示单元格内容。然后将单元格的格式更改为文本,它将在Excel 2013中显示=

,也可能在一些旧版本中,ADDRESS()接受第三个参数,该参数定义要返回的地址格式,并带有以下值:

1-绝对值(默认值)

2-绝对行/相对列

3-相对行/绝对列

4-相对的

比如说在A1单元

ADDRESS(ROW();COLUMN()) //outputs $A$1
ADDRESS(ROW();COLUMN();1) //outputs $A$1
ADDRESS(ROW();COLUMN();2) //outputs A$1
ADDRESS(ROW();COLUMN();3) //outputs $A1
ADDRESS(ROW();COLUMN();4) //outputs A1
如果要在单元格A1类型中显示单元格D3的名称:

ADDERSS(ROW(D3);COLUMN(D3);4) //outputs text D3 in cell A1

从技术上讲,如果您不介意在工作表中添加一个隐藏列,您可以将SUBSTITUTE()和new FORMULATEXT()函数组合起来来实现这一点

假设单元格A1命名为FOO 将B1中的简单参考公式添加到命名单元格=FOO 在C1=替换中添加公式(公式文本(B2),“=”,”) 隐藏列B

单元格C1将包含值FOO(或未命名单元格的RC引用)


根据需要进行调整,您的里程(或公里数)可能会有所不同。

如果名称引用了一个范围,该怎么办?或者是一个公式(比如偏移量),它有时包含单元格,但有时不包含?我想微软只是宣称这个问题“太难了”,然后做了一些简单的事情说得好。。。我想如果单元格在命名范围内,我会希望得到“覆盖”单元格的名称。当然,可能还有其他功能可以帮助解决任何此类问题,我很惊讶没有。我怀疑这是80%的人不知道该功能的领域之一,而那些知道的领域中,只有20%的人关心该功能。因此,没有太大的压力来提出解决方案。重新设计用户界面要好得多。我很失望。仅当单元格已定义名称时,此选项才起作用。看起来唯一可靠的方法是扫描所有名称,并返回第一个或最后一个匹配项。在我使用函数时,引用它可能有助于在函数声明之后添加
应用程序。Volatile
。我根本不知道此设置。。今天学习!!太棒了,很明显,我所寻找的+1在我尝试时不起作用-只是显示了计算公式的结果,尽管是左对齐的。对此我感激不尽。处理看不见的变量一直都是地狱。
ADDERSS(ROW(D3);COLUMN(D3);4) //outputs text D3 in cell A1