对当前单元格的引用

如何获得对当前单元格的引用?

例如,如果要显示列 A 的宽度,可以使用以下方法:

=CELL("width", A2)

然而,我希望公式是这样的:

=CELL("width", THIS_CELL)
319308 次浏览

A2已经是一个相对引用,在移动单元格或复制公式时将发生更改。

你可以用

=CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))

编辑: 下面是错误的,因为单元格(“宽度”)返回 最后修饰的细胞的宽度。

Cell("width")返回当前单元格的宽度,因此不需要对当前单元格的引用。但是,如果需要一个单元格,则 cell("address")返回当前单元格的地址,因此,如果需要对当前单元格的引用,则使用 indirect(cell("address"))。请参阅文档: http://www.techonthenet.com/excel/formulas/cell.php

在表内部,你可以使用 [@](不幸的是) Excel 自动扩展到 Table1[@],但它确实工作。(我正在使用 Excel2010)

例如,当有两列 [Change][Balance]时,将其放在 [Balance]列中:

=OFFSET([@], -1, 0) + [Change]

当然要注意,这取决于行的顺序(就像大多数其他解决方案一样) ,因此有点脆弱。

=ADDRESS(ROW(),COLUMN(),4)将提供当前单元的相对地址。 =INDIRECT(ADDRESS(ROW(),COLUMN()-1,4))将提供当前单元格左侧单元格的内容 =INDIRECT(ADDRESS(ROW()-1,COLUMN(),4))将为我们提供当前单元格上方单元格的内容(非常适合计算运行总数)

使用 CELL ()函数返回有关上次更改的单元格的信息。因此,如果我们输入一个新的行或列,CELL ()引用将受到影响,不再是当前单元格的引用。

我发现(对我来说)处理这个问题的最好方法是使用以下方法:

Dim MyString as String
MyString = Application.ThisCell.Address
Range(MyString).Select

希望这个能帮上忙。

=ADDRESS(ROW(),COLUMN())
=ADDRESS(ROW(),COLUMN(),1)
=ADDRESS(ROW(),COLUMN(),2)
=ADDRESS(ROW(),COLUMN(),3)
=ADDRESS(ROW(),COLUMN(),4)

创建一个命名公式,命名为 THE _ CELL

  1. 在当前工作表中,选择单元格 A1(这很重要!)

  2. 打开 Name Manager(Ctl + F3)

  3. New...

  4. Name:中输入“ THIS _ CELL”(或者只输入“ THIS”,这是我的首选)

  5. Refers to:中输入以下公式

    =!A1

    注意: 确保选择了单元格 A1。此公式是相对于 ActiveCell 的。

  6. Scope:下选择 Workbook

  7. 单击 OK并关闭 Name Manager

完全按照您的需要在工作表中使用公式

=CELL("width",THIS_CELL)

编辑: 比使用 INDIRECT()更好的解决方案

值得注意的是,我给出的解决方案应该优先于使用 INDIRECT()函数的任何解决方案,原因有二:

  1. 它是非易失性的,而 INDIRECT()是易失性的 Excel 函数,因此当工作簿计算被大量使用时,它会显著地降低计算速度。
  2. 它要简单得多,而且不需要将地址(以 ROW() COLUMN()的形式)转换为地址的范围引用,然后再转换回范围引用。

编辑: 另请参阅 这个问题以获得更多关于工作簿范围的、与工作表相关的命名范围的信息。

编辑: 也请参阅下面的 @ imix 的回答了解这个想法的变体(使用 RC 风格参考)。在这种情况下,您可以使用 =!RC作为 THIS_CELL命名范围公式,或者直接使用 RC

有一种更好的方法更安全,而且不会降低应用程序的速度。如何设置 Excel,则单元格可以具有值或公式; 公式不能引用自己的单元格。最终得到的是一个无限循环,因为新值将导致另一次计算... ..。使用帮助器列根据放在另一个单元格中的内容计算值。例如:

列 A 是真或假,列 B 包含货币值,列 C 包含以下公式: = B1

现在,要计算只有当列 A 为 True 且列 B 大于0时,列 B 才会以条件格式突出显示为黄色..。

= AND (A1 = True,C1 > 0)

然后可以选择隐藏 C 列

没有间接() : =CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )

几年后:

为了完整起见,我想给出另一个答案:

首先,转到 Excel-选项-> 配方并启用 R1C1参考文献,然后使用

  =CELL("width", RC)

RC始终引用当前的 Row,current Column,即“ this cell”。

里克 · 蒂奇的解决方案 基本上是一个调整,使同样的可能在 A1参考风格(也见 GSerg 的评论乔伊的答案和注意 他的评论麦当劳帕特里克的答案)。

干杯
:-)

完全归功于@rick-each 的最佳答案,但是您可以将这种方法扩展到使用条件格式。为了使这个答案完整,我将以摘要的形式复制里克的答案,然后扩展它:

  1. 在任何工作表中选择单元格 A1
  2. 创建一个名为 THIS的命名范围,并将 Refers to:设置为 =!A1

尝试在条件格式公式中使用 THIS将导致错误:

You may not use references to other workbooks for Conditional Formatting criteria

如果希望 THIS在条件格式公式中工作:

  1. 创建另一个名为 THIS_CF的命名范围,并将 Refers to:设置为 =THIS

现在可以使用 THIS_CF引用“条件格式”公式中的当前单元格。

您还可以使用此方法创建其他相对命名范围,如 THIS_COLUMNTHIS_ROWROW_ABOVECOLUMN_LEFT等。

对包含此公式的单元格的引用(自引用) : 地址(row () ; column ())

例如,得到上面单元格的值: 间接地址(address (row ()-1; column ()))

或者是观察员问的: = 单元格(宽度; 地址(行() ; 列()))