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

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

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

谢谢!

【问题讨论】:

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

标签: excel excel-2007 excel-formula


【解决方案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 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
          

          【讨论】:

            【解决方案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 函数来完成此操作。

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

                  【讨论】:

                    【解决方案13】:

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

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

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

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

                    1. 单击工作表中非顶行的任意位置 - 例如单元格 D9
                    2. 定义一个名为“OneCellAbove”的命名范围,但用“=D8”(无引号)覆盖“RefersTo”框
                    3. 现在,在单元格 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

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2023-03-17
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多