我正在尝试进行条件格式化,这样如果值与其左边的单元格中的值不同,单元格颜色会发生变化(每列是一个月,每行都是特定对象的费用。我想要在几个月内轻松监控价格变化。)
我可以按照单元格进行格式化并拖动它,但我希望将一个通用公式应用于整个工作表。
谢谢!
答案 0 :(得分:77)
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
答案 1 :(得分:66)
最兼容最短的版本是:
=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时,这是不行的。
答案 2 :(得分:9)
创建条件格式时,设置它适用的范围(整个工作表),然后输入 relative 公式(删除$
符号),就好像你只是格式化了左上角。
Excel会相应地将格式正确应用于其余单元格。
在此示例中,从B1开始, left 单元格将为A1。只需使用它 - 不需要高级公式。
如果您正在寻找更高级的内容,可以使用column()
,row()
和indirect(...)
。
答案 3 :(得分:6)
如果更改单元格引用以使用R1C1表示法(“工具”|“选项”,“常规”选项卡),则可以使用简单表示法将其粘贴到任何单元格中。
现在你的公式很简单:
=RC[-1]
答案 4 :(得分:2)
而不是写很长时间:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
您可以简单地写一下:
=OFFSET(*Name of your Cell*,0,-1)
例如,您可以写入Cell B2 :
=OFFSET(B2,0,-1)
引用单元格 B1
还要谢谢Jason Young !!如果没有你的答案,我将永远不会提出这个解决方案!
答案 5 :(得分:1)
填充A1单元格,使用以下公式:
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
然后自动扩展到右边,你得到
1| A | B | C | ect ect
2| 1| 11| 111| ect ect
如果偏移量超出可用单元格的范围,则得到#REF!错误。
希望你喜欢。
答案 6 :(得分:1)
更简单:
=indirect(address(row(), column() - 1))
OFFSET返回相对于当前引用的引用,因此如果间接返回正确的引用,则不需要它。
答案 7 :(得分:1)
创建用户定义函数时,我发现无法应用涉及函数OFFSET
和INDIRECT
的其他答案。
相反,您必须使用Application.Caller
来引用已使用用户定义函数(UDF)的单元格。在第二步中,将列的索引转换为相应的列&# 39;的名字。
最后,您可以使用有效工作表Range function引用左侧单元格。
Function my_user_defined_function(argument1, argument2)
' Way to convert a column number to its name copied from StackOverflow
' http://stackoverflow.com/a/10107264
' Answer by Siddarth Rout (http://stackoverflow.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
答案 8 :(得分:0)
您可以使用更改选区条件格式的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
答案 9 :(得分:0)
我偶然发现了这个帖子,因为我想总是以非易失的方式引用“向左边的单元格”但是非常不引用(没有OFFSET,INDIRECT和类似的灾难)。上下看网,没有答案。 (这个帖子实际上也没有提供答案。)经过一些修补我偶然发现了最令人惊讶的方法,我想与这个社区分享:
假设E6中的起始值为100。假设我在F5中输入这个值的增量,比如5.我们然后计算F6 = E6 + F5中的连续值(105)。如果要添加另一个步骤,请轻松:只需将列F复制到G列并在G5中输入新的增量。
这就是我们定期做的事情。每列都有一个日期,这些日期必须按时间顺序排列(以帮助MATCH等)。我们经常忘记进入一个步骤。现在假设您要在F和G之间插入一列(以便了解您的遗漏)并将F复制到新G(以重新填充延续公式)。这不是一场彻底的灾难。试试吧 - H6现在会说= F6 + H5而不是(因为我们绝对需要它)= G6 + H5。 (新的G6将是正确的。)
为了使这项工作,我们可以以最令人惊讶的方式混淆这种平庸计算F6 =指数($ E6:F6; 1;列($ E1:F1)-1)+ F5。向右复制,你得到G6 =指数($ E6:G6; 1;列($ E1:G1)-1)+ G5。
这应该永远不会奏效,对吧?圆形参考,清楚!尝试一下,感到惊讶。 Excel似乎意识到虽然INDEX范围跨越我们正在重新计算的单元格,但INDEX不会解决该单元格本身,因此不会创建循环引用。
所以现在我回家干了。在F和G之间插入一列,我们得到了我们所需要的:旧H中的连续值将引用我们在新G中插入的连续值。
答案 10 :(得分:0)
为什么不使用:
=ADDRESS(ROW(),COLUMN()-1)
答案 11 :(得分:0)
对于那些寻找非易失性答案的人,您可以通过在命名公式中使用INDEX函数来实现。
Name Manager
(Ctrl + F3)New
Scope:
,选择Workbook
在Refers to:
中,输入公式:
=INDEX(!A1:!A2, 1)
单击OK
并关闭Name Manager
这告诉Excel始终查看当前单元格左侧的值,并且将随着选择不同的单元格而动态变化。如果单独使用名称,则提供单元格的值,但在一定范围内,使用引用。感谢this answer关于该想法的单元格引用。
答案 12 :(得分:0)
我认为这是最简单的答案。
使用“名称”来引用偏移量。
假设您要对一列(A列)进行总计,但不包括保存求和的单元格(例如Cell A100);做到这一点:
(我假设您在创建名称时使用A1引用;随后可以将R1C1切换到)
= SUM(A1:OneCellAbove)
答案 13 :(得分:0)
请选择整个工作表,然后选择HOME>样式-条件格式,新规则...,使用公式来确定要格式化的单元格和在该公式为真的情况下设置值的格式: :
=A1<>XFD1
格式... ,选择格式选项,确定,确定。
答案 14 :(得分:0)
因为这是回答@zipper 的唯一方法
你的公式的原因:
="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
没有条件格式化,是因为公式随便问=“THIS PHRASE”等于“THAT PHRASE”,试着这样写:
=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="xyz"
其中“xyz”是您的文本,“-1”是您要搜索左侧的列数。