94

我正在尝试进行条件格式设置,以便如果值与其左侧单元格中的值不同,单元格颜色会发生变化(每列是一个月,每行是某个对象的费用。我想监控几个月内价格很容易发生变化。)

我可以对每个单元格进行格式化并拖动它,但我想要一个适用于整个工作表的通用公式。

谢谢!

4

15 回答 15

106
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
于 2009-04-29T13:46:44.260 回答
94

最短最兼容的版本是:

=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 时,这是不行的。

于 2011-10-10T14:07:32.690 回答
13

创建条件格式时,将其适用于您想要的范围(整个工作表),然后输入一个相对公式(删除$符号),就好像您只格式化左上角一样。

Excel 会相应地将格式应用于其余单元格。

在此示例中,从 B1 开始,左侧单元格将是 A1。只需使用它 - 不需要高级公式。


如果您正在寻找更高级的东西,您可以使用column()row()indirect(...)

于 2009-02-03T14:27:01.657 回答
7

如果您将单元格引用更改为使用 R1C1 表示法(工具|选项,常规选项卡),那么您可以使用简单的表示法并将其粘贴到任何单元格中。

现在你的公式很简单:

=RC[-1]
于 2009-07-08T23:12:54.903 回答
6

而不是写很长:

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

你可以简单地写:

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

因此,例如,您可以写入 Cell B2

=OFFSET(B2,0,-1)

引用单元格B1

仍然感谢杰森杨!!如果没有您的回答,我永远不会想出这个解决方案!

于 2015-05-02T19:11:58.443 回答
1

使用以下公式填充 A1 单元格:

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

然后自动向右扩展,你得到

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

如果偏移量超出可用单元格的范围,您将获得#REF!错误。

希望你喜欢。

于 2012-08-02T14:42:41.480 回答
1

更简单:

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

OFFSET 返回相对于当前引用的引用,因此如果间接返回正确的引用,则不需要它。

于 2014-03-19T16:07:05.637 回答
1

在创建用户定义函数时,我发现其他涉及函数的答案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
于 2015-07-09T13:42:28.260 回答
1

为什么不直接使用:

=ADDRESS(ROW(),COLUMN()-1)
于 2017-04-12T15:13:03.777 回答
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
于 2009-02-03T14:37:18.360 回答
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=index($E6:G6;1;columns($E1:G1)-1)+G5。

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

所以现在我在家干了。在 F 和 G 之间插入一列,我们就得到了我们需要的结果:旧 H 中的延续值将引用我们在新 G 中插入的延续值。

于 2017-01-05T09:41:49.477 回答
0

制作一个命名公式“LeftCell”

对于那些寻找非易失性答案的人,您可以通过在命名公式中使用 INDEX 函数来完成此操作。

  1. 选择单元格 A2

  2. 打开Name Manager(Ctrl+F3)

  3. 点击New

  4. 将其命名为“LeftCell”(或您喜欢的任何名称)

  5. 对于Scope:, 选择Workbook

  6. Refers to:中,输入公式:

    =INDEX(!A1:!A2, 1)

  7. 单击OK并关闭Name Manager

这告诉 Excel 始终查看当前单元格左侧的值,并且会随着选择不同的单元格而动态更改。如果名称单独使用,它提供单元格的值,但在范围内它使用引用。归功于这个关于单元格引用的答案。

于 2018-11-06T00:15:28.980 回答
0

我认为这是最简单的答案。

使用“名称”来引用偏移量。

假设您想将一列(A 列)一直求和,但不包括保存总和的单元格(例如单元格 A100);做这个:

(我假设您在创建名称时使用 A1 引用;随后可以切换到 R1C1)

  1. 单击工作表中不在顶行的任意位置 - 例如单元格 D9
  2. 定义一个名为“OneCellAbove”的命名范围,但用“=D8”覆盖“RefersTo”框(无引号)
  3. 现在,在单元格 A100 中,您可以使用公式
    =SUM(A1:OneCellAbove)
于 2019-05-13T14:37:00.683 回答
0

因为这是回答@zipper的唯一方法

你的公式的原因:

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

没有条件格式,是因为公式 litteraly 要求 =“THIS PHRASE” 等于“THAT PHRASE”,尝试这样写: =OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="xyz"其中“xyz”是您的文本,“-1”是列数离开你想搜索。

于 2021-01-28T03:22:16.117 回答
-1

请选择整个工作表和 HOME > Styles - Conditional Formatting, New Rule..., Use a formula to determine which cells to format and Format values where this formula is true: :

=A1<>XFD1

Format..., 选择格式选择, OK, OK.

于 2019-06-29T10:30:11.607 回答