Excel 公式引用“向左的单元格”
Posted
技术标签:
【中文标题】Excel 公式引用“向左的单元格”【英文标题】:Excel formula to reference 'CELL TO THE LEFT' 【发布时间】:2010-10-05 04:03:18 【问题描述】:我正在尝试进行条件格式设置,以便如果值与其左侧单元格中的值不同,单元格颜色会发生变化(每列是一个月,每行是某个对象的费用。我想要轻松监控几个月内的价格变化。)
我可以对每个单元格进行格式化并拖动它,但我想要一个通用公式来应用到整个工作表。
谢谢!
【问题讨论】:
...如果有人在寻找它...将列移到右侧:=INDIRECT("RC[1]",0)
这是一个非常好的问题。不幸的是,我不确定我是否正确理解这一点,原始海报希望他的单元格更改而不必进行条件格式化,然后将格式刷粘贴到每个单元格。假设我们在行中有月份,在列中有香蕉、苹果和橙子。矩阵中是价格。如果从上个月到本月的价格发生变化,我们如何能够自动将 CELL A CELLOR RED 着色?如果还有一种自动方法,如果价格下跌,则将单元格着色为绿色,如果价格下降则为红色
【参考方案1】:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
【讨论】:
使用五个很少使用的需要查找使用功能而不是简单的 A1 或 RC[-1] 相对参考?这就像从布鲁克林旅行到布朗克斯,并在 Walla Walla WA 中途停留! 为什么不改为 =INDIRECT(ADDRESS(ROW(),COLUMN()-1)) “间接”有很多问题,包括(但不限于)是(1)单线程和(2)易失性(可能级联迫使您的整个工作簿随着每次更改而重新计算。如果性能很重要,请不要使用它。 在条件格式中,我将规则设置为="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
,但单元格未格式化。怎么了?【参考方案2】:
最短最兼容的版本是:
=INDIRECT("RC[-1]",0)
“RC[-1]”表示左边一列。 “R[1]C[-1]”在左下角。
第二个参数0表示第一个参数使用R1C1符号解释。
其他选项:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
在我看来太长了。但如果相对值是动态的/从另一个单元格派生的,则很有用。例如:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)
最简单的选择:
= RC[-1]
缺点是需要使用选项打开R1C1符号,当其他人必须使用excel时这是不行的。
【讨论】:
【参考方案3】:在创建条件格式时,将它应用到的范围设置为您想要的(整个工作表),然后输入一个 相对 公式(删除 $
符号),就像您是只格式化左上角。
Excel 会相应地将格式应用到其余单元格。
在此示例中,从 B1 开始,left 单元格将是 A1。只需使用它 - 不需要高级公式。
如果您正在寻找更高级的东西,可以使用column()
、row()
和indirect(...)
。
【讨论】:
【参考方案4】:如果您将单元格引用更改为使用 R1C1 表示法(工具|选项,常规选项卡),那么您可以使用简单的表示法并将其粘贴到任何单元格中。
现在你的公式很简单:
=RC[-1]
【讨论】:
【参考方案5】:而不是写很长:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
你可以简单地写:
=OFFSET(*Name of your Cell*,0,-1)
例如,您可以写入 Cell B2:
=OFFSET(B2,0,-1)
引用单元格B1
仍然感谢 Jason Young!如果没有你的回答,我永远不会想出这个解决方案!
【讨论】:
这没用。如果你已经知道你的单元格是 B2,你可以只为左边的单元格写 B1 而根本不使用偏移量。重点是做一些完全通用的事情。 如果你知道你从哪个单元格开始,那就很方便了,只有你想要做的偏移量是动态的,比如=OFFSET(B2,0,A2)。这是我使用它的上下文。 这就是我一直在寻找的答案!我希望有人能够选择代表一整行的单个单元格,并让所有内容自动更改以使用该行中的参数。谢谢!【参考方案6】:填充 A1 单元格,使用以下公式:
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
然后自动向右延伸,你得到
1| A | B | C | ect ect
2| 1| 11| 111| ect ect
如果偏移量超出可用单元格的范围,您将获得#REF!错误。
希望你喜欢。
【讨论】:
【参考方案7】:更简单:
=indirect(address(row(), column() - 1))
OFFSET 返回一个相对于当前引用的引用,因此如果间接返回正确的引用,则不需要它。
【讨论】:
永远不要这样做。 INDIRECT 会破坏依赖关系树 - 这是一场灾难。 我刚刚发现了这个函数,我认为它对根据列的第一行进行条件格式化很有用。不确定 RC[] 表示法是否适用【参考方案8】:在创建用户定义函数时,发现其他涉及OFFSET
和INDIRECT
函数的答案无法应用。
相反,您必须使用 Application.Caller
来引用已使用用户定义函数 (UDF) 的单元格。在第二步中,您将列的索引转换为相应列的名称。
最后,您可以使用活动工作表的Range function 引用左侧单元格。
Function my_user_defined_function(argument1, argument2)
' Way to convert a column number to its name copied from ***
' http://***.com/a/10107264
' Answer by Siddarth Rout (http://***.com/users/1140579/siddharth-rout)
' License (if applicable due to the small amount of code): CC BY-SA 3.0
colName = Split(Cells(, (Application.Caller(1).Column - 1)).Address, "$")(1)
rowNumber = Application.Caller(1).Row
left_cell_value = ActiveSheet.Range(colName & rowNumber).Value
' Now do something with left_cell_value
【讨论】:
【参考方案9】:为什么不直接使用:
=ADDRESS(ROW(),COLUMN()-1)
【讨论】:
【参考方案10】:您可以使用 VBA 脚本来更改选择的条件格式(您可能需要相应地调整条件和格式):
For Each i In Selection
i.FormatConditions.Delete
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address
With i.FormatConditions(1).Font
.Bold = True
End With
Next i
【讨论】:
【参考方案11】:我偶然发现了这个线程,因为我想始终引用“左侧单元格”,但以非易失性方式至关重要(没有偏移、间接和类似的灾难)。上下浏览网页,没有答案。 (这个帖子实际上也没有提供答案。)经过一番修改后,我偶然发现了最令人惊讶的方法,我想与这个社区分享:
假设 E6 中的起始值为 100。假设我在 F5 中输入这个值的增量,比如 5。然后我们将计算 F6 = E6+F5 中的延续值 (105)。如果您想添加另一个步骤,很简单:只需将 F 列复制到 G 列,然后在 G5 中输入一个新的增量。
这就是我们定期做的事情。每列都有一个日期,这些日期必须按时间顺序排列(以帮助 MATCH 等)。我们经常会忘记进入一个步骤。现在假设您想在 F 和 G 之间插入一列(以弥补您的遗漏)并将 F 复制到新的 G 中(以重新填充延续公式)。这简直就是一场彻底的灾难。试试看 - H6 现在会说 =F6+H5 而不是(因为我们绝对需要它) =G6+H5。 (新的 G6 会是正确的。)
为了完成这项工作,我们可以以最惊人的方式混淆这个平庸的计算 F6=index($E6:F6;1;columns($E1:F1)-1)+F5。复制正确,你会得到 G6=index($E6:G6;1;columns($E1:G1)-1)+G5。
这应该永远行不通,对吧?循环引用,清楚!尝试一下并感到惊讶。 Excel 似乎意识到,尽管 INDEX 范围跨越了我们正在重新计算的单元格,但该单元格本身并没有被 INDEX 寻址,因此不会创建循环引用。
所以现在我回家了。在 F 和 G 之间插入一列,我们就得到了我们所需要的:旧 H 中的延续值将引用我们在新 G 中插入的延续值。
【讨论】:
【参考方案12】:制作一个命名公式“LeftCell”
对于那些寻找非易失性答案的人,您可以通过在命名公式中使用 INDEX 函数来完成此操作。
选择单元格 A2
打开Name Manager
(Ctrl+F3)
点击New
将其命名为“LeftCell”(或任何您喜欢的名称)
对于Scope:
,选择Workbook
在Refers to:
,输入公式:
=INDEX(!A1:!A2, 1)
点击OK
并关闭Name Manager
这告诉 Excel 始终查看当前单元格左侧的值,并且会随着选择不同的单元格而动态变化。如果名称单独使用,它提供单元格的值,但在范围内它使用引用。感谢 this answer 为该想法提供单元格引用。
【讨论】:
【参考方案13】:我认为这是最简单的答案。
使用“名称”来引用偏移量。
假设您想将一列(A 列)一直求和,但不包括保存总和的单元格(例如单元格 A100);这样做:
(我假设您在创建名称时使用 A1 引用;随后可以切换到 R1C1)
-
单击工作表中非顶行的任意位置 - 例如单元格 D9
定义一个名为“OneCellAbove”的命名范围,但用“=D8”(无引号)覆盖“RefersTo”框
现在,在单元格 A100 中,您可以使用公式
=SUM(A1:OneCellAbove)
【讨论】:
【参考方案14】:因为这是回答@zipper 的唯一方法
你的公式的原因:
="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
没有条件格式化,因为公式总是要求 ="THIS PHRASE" 等于 "THAT PHRASE",试着这样写:
=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="xyz"
其中“xyz”是您的文本,“-1”是您要搜索的左侧列数。
【讨论】:
【参考方案15】:请选择整个工作表和主页 > 样式 - 条件格式,新规则...,使用公式确定要格式化的单元格和 在此公式为真的情况下设置值: :
=A1<>XFD1
Format...,选择格式选择,OK,OK。
【讨论】:
以上是关于Excel 公式引用“向左的单元格”的主要内容,如果未能解决你的问题,请参考以下文章