2009-02-03 69 views
57

我想要做条件格式化,以便单元格的颜色会改变,如果值不同于它左边的单元格中的值(每列是一个月,在每行都是特定对象上的费用,我想很容易监视几个月的价格变化。)Excel公式引用'CELL到左'

我可以按照单元格和格式拖动它,但我想要一个适用于整个工作表的通用公式。

谢谢!

+3

...以及在某人正在寻找它的情况下...将列置于右侧:`= INDIRECT(“RC [1]”,0)` – prograhammer 2014-09-18 21:08:55

+0

这是一个非常好的问题。不幸的是,我不确定我是否正确地理解了这一点,原始海报希望他的单元格不必进行条件格式化,然后将格式画家粘贴到每个单元格。假设我们在行中有几个月,在列中有香蕉,苹果和桔子。在矩阵中是价格。如果价格从前一个月变化到当前月份,我们如何能够做一些能够自动着色红色红色的东西?如果还有一种自动方法,如果价格下降,将单元格颜色设为绿色,如果 – Bryan 2015-01-29 18:33:32

回答

63
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) 
+0

不错,谢谢。迈克尔的答案有用 - 但我喜欢明确的公式... – mik 2009-05-04 12:58:20

+6

使用五个很少使用的需要查看使用函数而不是简单的A1或RC [-1]相对引用?这就像从布鲁克林前往布朗克斯,在瓦拉瓦拉华盛顿停留! – 2009-07-09 00:51:50

11

在创建条件格式,设置范围,它适用于你想要的(全片)一下,然后输入一个相对公式(删除$标志),就好像你只格式化左上角角。

Excel将正确地将格式应用于相应的其他单元格。

在此示例中,从B1开始,左侧的单元格将为A1。只要使用 - 不需要高级配方。


如果你正在寻找一些更高级的,你可以玩弄column()row()indirect(...)

1

你可以使用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 
7

如果您更改单元格引用使用R1C1符号(工具|选项,常规选项卡),然后您可以使用简单的符号并将其粘贴到任何单元格中。

现在你的公式很简单:

=RC[-1] 
54

最短,最兼容的版本是:

=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

填写A1单元格,用下面的公式:

=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1" 

然后自动扩到右,你

1| A | B | C | ect ect 
2| 1| 11| 111| ect ect 

如果offset可用小区的范围之外,你会得到裁判!错误。

希望你喜欢。

0

更简单:

=indirect(address(row(), column() - 1)) 

偏移参考相对于当前基准的回报,因此,如果间接回报正确的引用,你不需要它。

2

而不是写的很长一段:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) 

你可以简单的写:

=OFFSET(*Name of your Cell*,0,-1) 

因此,例如,你可以编写成细胞B2

=OFFSET(B2,0,-1) 

到参考细胞B1

还是谢谢Jason Young!如果没有你的答案,我永远不会想出这个解决方案!

1

当创建用户定义函数时,我发现涉及函数OFFSETINDIRECT的其他答案无法应用。

相反,您必须使用Application.Caller来引用已使用用户定义函数(UDF)的单元格。第二步,将列索引转换为相应列的名称。
最后,您可以使用活动工作表的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 
0

我偶然发现了这个线程,因为我想总是引用“左侧单元格”,但最重要的是在非易失性方式(无偏移,间接和类似灾难)。上下看网络,没有答案。 (此线程实际上并没有提供答案)经过一些修改后,我偶然发现了最令人惊讶的方法,我喜欢与该社区分享:

假设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 =索引($ E6:G6; 1;列($ E1:G1)-1)+ G5。

这应该永远不会工作,对吧?循环参考,清楚!尝试一下,感到惊讶。 Excel似乎意识到虽然INDEX范围跨越了我们正在重新计算的单元格,但该单元格本身并未被INDEX处理,因此不会创建循环引用。

所以,现在我回家了,干了。插入F和G之间一列,我们得到正是我们需要的:在老H中的连续值将重提我们在新的G.

0

插入延续价值为什么不直接使用:

=ADDRESS(ROW(),COLUMN()-1)