如何获取对当前单元格的引用?
例如,如果我想显示 A 列的宽度,我可以使用以下内容:
=CELL("width", A2)
但是,我希望公式是这样的:
=CELL("width", THIS_CELL)
如何获取对当前单元格的引用?
例如,如果我想显示 A 列的宽度,我可以使用以下内容:
=CELL("width", A2)
但是,我希望公式是这样的:
=CELL("width", THIS_CELL)
迟了几年:
为了完整起见,我想再给出一个答案:
首先,转到Excel-Options -> Formulas并启用R1C1 references。然后使用
=CELL("width", RC)
RC
总是指当前行、当前列,即“此单元格”。
Rick Teachey 的解决方案基本上是一个调整,以使A1 参考样式中的相同成为可能(另请参阅GSerg对 Joey 的回答的评论,并注意他对 Patrick McDonald 的回答的评论)。
干杯
:-)
In the current worksheet, select cell A1 (this is important!)
Open Name Manager
(Ctl+F3)
Click New...
Enter "THIS_CELL" (or just "THIS", which is my preference) into Name:
Enter the following formula into Refers to:
=!A1
NOTE: Be sure cell A1 is selected. This formula is relative to the ActiveCell.
Under Scope:
select Workbook
.
Click OK
and close the Name Manager
=CELL("width",THIS_CELL)
EDIT: Better solution than using INDIRECT()
It's worth noting that the solution I've given should be preferred over any solution using the INDIRECT()
function for two reasons:
INDIRECT()
is a volatile Excel function, and as a result will dramatically slow down workbook calculation when it is used a lot.ROW()
COLUMN()
) to a range reference to an address and back to a range reference again.EDIT: Also see this question for more information on workbook-scoped, sheet dependent named ranges.
EDIT: Also see @imix's answer below for a variation on this idea (using RC style references). In that case, you could use =!RC
for the THIS_CELL
named range formula, or just use RC
directly.
你可以使用
=CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))
=ADDRESS(ROW(),COLUMN(),4)
会给我们当前单元格的相对地址。
=INDIRECT(ADDRESS(ROW(),COLUMN()-1,4))
将为我们提供当前单元格左侧的单元格
=INDIRECT(ADDRESS(ROW()-1,COLUMN(),4))
内容 将为我们提供当前单元格上方单元格的内容(非常适合计算运行总数)
使用CELL()函数返回有关最后一个已更改单元格的信息。因此,如果我们输入新的行或列,CELL()引用将受到影响,并且不再是当前单元格的引用。
A2
已经是相对引用,并且会在您移动单元格或复制公式时发生变化。
=ADDRESS(ROW(),COLUMN())
=ADDRESS(ROW(),COLUMN(),1)
=ADDRESS(ROW(),COLUMN(),2)
=ADDRESS(ROW(),COLUMN(),3)
=ADDRESS(ROW(),COLUMN(),4)
没有间接():=CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )
我发现(对我而言)处理此问题的最佳方法是使用以下内容:
Dim MyString as String
MyString = Application.ThisCell.Address
Range(MyString).Select
希望这可以帮助。
在表格中,您可以使用[@]
(不幸的是)Excel 自动扩展到的表格,Table1[@]
但它确实有效。(我使用的是 Excel 2010)
例如,当有两列时[Change]
,[Balance]
将其放入[Balance]
列中:
=OFFSET([@], -1, 0) + [Change]
当然请注意,这取决于行的顺序(就像大多数其他解决方案一样),所以它有点脆弱。
有一种更好的方法更安全,不会减慢您的应用程序。Excel是如何设置的,一个单元格可以有一个值或一个公式;公式不能引用自己的单元格。你最终会出现一个无限循环,因为新值会导致另一个计算...... 使用辅助列根据您在另一个单元格中输入的内容计算值。例如:
A 列是 True 或 False,B 列包含货币值,C 列包含以下公式:=B1
现在,要计算只有当 A 列为真且 B 列大于零时,B 列才会以条件格式突出显示为黄色......
=AND(A1=真,C1>0)
然后您可以选择隐藏 C 列
完全归功于@rick-teachey 的最佳答案,但您可以扩展该方法以使用条件格式。为了使这个答案完整,我将以摘要形式复制 Rick 的答案,然后对其进行扩展:
A1
。THIS
并将其设置Refers to:
为=!A1
.尝试THIS
在条件格式公式中使用将导致错误:
You may not use references to other workbooks for Conditional Formatting criteria
如果您想THIS
使用条件格式公式:
THIS_CF
并将其设置Refers to:
为=THIS
.您现在可以使用THIS_CF
来引用条件格式公式中的当前单元格。
您还可以使用此方法创建其他相关的命名范围,例如THIS_COLUMN
, THIS_ROW
, ROW_ABOVE
,COLUMN_LEFT
等。
编辑:以下是错误的,因为 Cell("width") 返回最后修改单元格的宽度。
Cell("width")
返回当前单元格的宽度,因此您不需要对当前单元格的引用。但是,如果您需要一个,cell("address")
则返回当前单元格的地址,因此如果您需要对当前单元格的引用,请使用indirect(cell("address"))
. 请参阅文档:http ://www.techonthenet.com/excel/formulas/cell.php
引用包含此公式的单元格(自引用): address(row();column())
例如获取上面单元格的值: indirect(address(row()-1;column()))
或者OP问什么: =Cell(width;address(row();column()))