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用户定义函数时 ,我发现其他涉及函数OFFSETINDIRECT答案不能应用。

相反,您必须使用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)