Excel公式引用“CELL TO THE LEFT”
我试图做条件格式化,以便单元格的颜色会改变,如果值不同于它的单元格左边的值(每列是一个月,在每一行是在某些对象的费用。我想监视几个月内价格很容易变化。)
我可以按照单元格的格式拖动它,但是我希望将一个通用公式应用于整个工作表。
谢谢!
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
最短的兼容版本是:
=INDIRECT("RC[-1]",0)
“RC [-1]”表示左边一列。 “R [1] C [-1]”是左下angular。
第二个参数0表示使用R1C1表示法解释第一个参数。
其他选项:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
在我看来太长了。 但是,如果相对值是dynamic的/派生自另一个单元格,则很有用。 例如:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1)
最简单的select:
= RC[-1]
有缺点,你需要打开R1C1表示法使用选项,这是一个不行,当其他人必须使用Excel。
在创build条件格式时,设置它适用于的范围(整个工作表),然后input一个相对公式(删除$
符号),就好像只在格式化左上angular一样。
Excel将相应地将格式正确应用于其余的单元格。
在这个例子中,从B1开始, 左边的单元格将是A1。 只要使用 – 不需要高级配方。
如果你正在寻找一些更高级的东西,你可以使用column()
, row()
和indirect(...)
。
如果您更改单元格引用以使用R1C1表示法(工具|选项,常规选项卡),则可以使用简单的表示法并将其粘贴到任何单元格中。
现在你的公式很简单:
=RC[-1]
用下面的公式填充A1单元格 :
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
然后自动伸展到正确的位置
1| A | B | C | ect ect 2| 1| 11| 111| ect ect
如果偏移超出了可用单元格的范围,就会得到#REF! 错误。
希望你喜欢。
而不是写很长的时间:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
你可以简单地写:
=OFFSET(*Name of your Cell*,0,-1)
因此,例如,你可以写入单元格B2 :
=OFFSET(B2,0,-1)
参考单元格B1
还是谢谢Jason Young! 没有你的答案,我将永远不会想出这个解决scheme!
您可以使用VBA脚本来更改select的条件格式(您可能需要相应地调整条件和格式):
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
当创build用户定义函数时 ,我发现其他涉及函数OFFSET
和INDIRECT
答案不能应用。
相反,您必须使用Application.Caller
来引用已使用用户定义函数(UDF)的单元格。第二步,将列的索引转换为相应的列名称。
最后,您可以使用活动工作表的Range函数引用左侧单元格。
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
更简单:
=indirect(address(row(), column() - 1))
OFFSET返回相对于当前引用的引用,所以如果间接返回正确的引用,则不需要它。
我偶然发现了这个线程,因为我想总是以非易失性的方式(不偏移,间接和类似的灾难)引用“单元左”,而是CRUCIALLY。 上下看网页,没有答案。 (这个线程实际上也没有提供答案。)经过一番修改之后,我偶然发现了最令人惊讶的方法,我喜欢与这个社区分享:
假设E6中的起始值为100。 假设我在F5中input了这个值的一个增量,就是5.然后我们将计算F6 = E6 + F5中的延续值(105)。 如果您想添加另一个步骤,比较简单:只需将F列复制到G列,然后在G5中input新的增量。
这是我们定期做的。 每一列都有一个date,这些date必须按时间顺序(帮助MATCH等)。 每隔一段时间就会发生一次,我们忘记进入一步。 现在假设你想在F和G之间插入一列(以弥补你的遗漏)并将F拷贝到新的G中(重新填充延续公式)。 这是一场完全灾难的短暂现象。 试试看 – 现在H6会说= F6 + H5而不是(因为我们绝对需要它)= G6 + H5。 (新的G6将是正确的。)
为了使这个工作,我们可以以最令人惊讶的方式混淆这个平凡的计算F6 = index($ E6:F6; 1; columns($ E1:F1)-1)+ F5。 复制权,你得到G6 =指数($ E6:G6; 1;列($ E1:G1)-1)+ G5。
这应该永远不会工作,对吗? 循环引用,显然! 试试看,感到惊讶。 Excel似乎意识到,尽pipeINDEX范围跨越了我们正在重新计算的单元格,但是该单元格本身并不由INDEX处理,因此不会创build循环引用。
所以,现在我在家里,干燥。 在F和G之间插入一列,我们得到我们需要的东西:旧H中的连续值将返回到我们插入新G中的连续值。
为什么不使用:
=ADDRESS(ROW(),COLUMN()-1)