Excel 公式引用“向左的单元格”

Posted

技术标签:

【中文标题】Excel 公式引用“向左的单元格”【英文标题】:Excel formula to reference 'CELL TO THE LEFT' 【发布时间】:2010-10-05 04:03:18 【问题描述】:

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

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

谢谢!

【问题讨论】:

...如果有人在寻找它...将列移到右侧:=INDIRECT("RC[1]",0) 这是一个非常好的问题。不幸的是,我不确定我是否正确理解这一点,原始海报希望他的单元格更改而不必进行条件格式化,然后将格式刷粘贴到每个单元格。假设我们在行中有月份,在列中有香蕉、苹果和橙子。矩阵中是价格。如果从上个月到本月的价格发生变化,我们如何能够自动将 CELL A CELLOR RED 着色?如果还有一种自动方法,如果价格下跌,则将单元格着色为绿色,如果价格下降则为红色 【参考方案1】:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)

【讨论】:

使用五个很少使用的需要查找使用功能而不是简单的 A1 或 RC[-1] 相对参考?这就像从布鲁克林旅行到布朗克斯,并在 Walla Walla WA 中途停留! 为什么不改为 =INDIRECT(ADDRESS(ROW(),COLUMN()-1)) “间接”有很多问题,包括(但不限于)是(1)单线程和(2)易失性(可能级联迫使您的整个工作簿随着每次更改而重新计算。如果性能很重要,请不要使用它。 在条件格式中,我将规则设置为="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz""",但单元格未格式化。怎么了?【参考方案2】:

最短最兼容的版本是:

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

【讨论】:

【参考方案3】:

在创建条件格式时,将它应用到的范围设置为您想要的(整个工作表),然后输入一个 相对 公式(删除 $ 符号),就像您是只格式化左上角。

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

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


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

【讨论】:

【参考方案4】:

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

现在你的公式很简单:

=RC[-1]

【讨论】:

【参考方案5】:

而不是写很长:

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

你可以简单地写:

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

例如,您可以写入 Cell B2

=OFFSET(B2,0,-1)

引用单元格B1

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

【讨论】:

这没用。如果你已经知道你的单元格是 B2,你可以只为左边的单元格写 B1 而根本不使用偏移量。重点是做一些完全通用的事情。 如果你知道你从哪个单元格开始,那就很方便了,只有你想要做的偏移量是动态的,比如=OFFSET(B2,0,A2)。这是我使用它的上下文。 这就是我一直在寻找的答案!我希望有人能够选择代表一整行的单个单元格,并让所有内容自动更改以使用该行中的参数。谢谢!【参考方案6】:

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

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

然后自动向右延伸,你得到

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

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

希望你喜欢。

【讨论】:

【参考方案7】:

更简单:

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

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

【讨论】:

永远不要这样做。 INDIRECT 会破坏依赖关系树 - 这是一场灾难。 我刚刚发现了这个函数,我认为它对根据列的第一行进行条件格式化很有用。不确定 RC[] 表示法是否适用【参考方案8】:

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

相反,您必须使用 Application.Caller 来引用已使用用户定义函数 (UDF) 的单元格。在第二步中,您将列的索引转换为相应列的名称。 最后,您可以使用活动工作表的Range function 引用左侧单元格。

Function my_user_defined_function(argument1, argument2)
    ' Way to convert a column number to its name copied from ***
    ' http://***.com/a/10107264
    ' Answer by Siddarth Rout (http://***.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

【讨论】:

【参考方案9】:

为什么不直接使用:

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

我偶然发现了这个线程,因为我想始终引用“左侧单元格”,但以非易失性方式至关重要(没有偏移、间接和类似的灾难)。上下浏览网页,没有答案。 (这个帖子实际上也没有提供答案。)经过一番修改后,我偶然发现了最令人惊讶的方法,我想与这个社区分享:

假设 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 中插入的延续值。

【讨论】:

【参考方案12】:

制作一个命名公式“LeftCell”

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

    选择单元格 A2

    打开Name Manager (Ctrl+F3)

    点击New

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

    对于Scope:,选择Workbook

    Refers to:,输入公式:

    =INDEX(!A1:!A2, 1)

    点击OK并关闭Name Manager

这告诉 Excel 始终查看当前单元格左侧的值,并且会随着选择不同的单元格而动态变化。如果名称单独使用,它提供单元格的值,但在范围内它使用引用。感谢 this answer 为该想法提供单元格引用。

【讨论】:

【参考方案13】:

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

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

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

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

    单击工作表中非顶行的任意位置 - 例如单元格 D9 定义一个名为“OneCellAbove”的命名范围,但用“=D8”(无引号)覆盖“RefersTo”框 现在,在单元格 A100 中,您可以使用公式
    =SUM(A1:OneCellAbove)

【讨论】:

【参考方案14】:

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

你的公式的原因:

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

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

【讨论】:

【参考方案15】:

请选择整个工作表和主页 > 样式 - 条件格式,新规则...,使用公式确定要格式化的单元格在此公式为真的情况下设置值:

=A1<>XFD1

Format...,选择格式选择,OKOK

【讨论】:

以上是关于Excel 公式引用“向左的单元格”的主要内容,如果未能解决你的问题,请参考以下文章

如何在excel 中运算公式中引用单元格值

excel 公式中包含带公式的单元格,如何正确引用

excel中的单元格引用有哪几种方式?

excel中追踪引用单元格有啥作用,怎么用啊

Excel中公式的绝对引用和相对引用单元格

在excel中横向拖动公式,如何实现引用的单元格地址行号递增?