Excel公式引用“向左移动”


83

我正在尝试进行条件格式化,以便如果该值与它左侧的单元格中的值不同(每列为一个月,每行中是某些对象的费用,则该单元格的颜色将更改)。我想监视价格在几个月内容易发生变化。)

我可以按单元格进行操作并对其进行格式拖动,但是我希望将通用公式应用于整个工作表。

谢谢!


3
...以防万一有人在寻找...以使该栏的右侧:=INDIRECT("RC[1]",0)
prograhammer

这是一个非常大的问题。不幸的是,我不确定我是否正确理解了原始海报,希望他的单元进行更改而不必进行条件格式化,然后将格式绘制器粘贴到每个单元。假设我们的行数月,而香蕉,苹果和橙子数列。矩阵中是价格。如果从上个月到本月的价格发生变化,我们将如何做将自动为CELL RED红色的颜色?如果价格下跌,是否还有一种自动为单元格上色的方法,如果价格下跌,则为红色
Bryan

Answers:


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

14
使用五个很少使用的需要查找使用功能来代替简单的A1或RC [-1]相对参考?这就像在布鲁克林(Walla Walla WA)中途停留从布鲁克林到布朗克斯(Bronx)旅行一样!
约翰·马钦

5
为什么不这样做呢= INDIRECT(ADDRESS(ROW(),COLUMN()-1))
Prometheus

1
“间接”有很多问题,包括(但不限于)(1)单线程,(2)易失性(可能级联强制整个工作簿随每次更改重新计算。如果性能很重要,则不要使用它) 。
约翰·约瑟夫

在条件格式中,我将规则设置为,="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""但是未格式化单元格。怎么了?
拉链

78

最短最兼容的版本是:

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


11

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

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

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


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


7

如果将单元格引用更改为使用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

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


2
这没有用。如果您已经知道您的单元格为B2,则只需在左侧向该单元格写入B1,就完全不使用偏移量。关键是要做一些完全通用的事情。

1
如果您知道从哪个单元格开始,这非常方便,并且仅要动态执行偏移量,例如= OFFSET(B2,0,A2)。这是我使用它的上下文。
山姆美联储

这是我一直在寻找的答案!我希望某人能够选择代表整个行的单个单元格,并使所有内容自动更改为使用该行中的参数。谢谢!
英国电信

1

使用以下公式填充A1单元

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

然后自动向右延伸,

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

如果偏移量超出可用单元格的范围,则会得到#REF!错误。

希望你喜欢。


1

更简单:

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

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


永远不要这样做。INDIRECT破坏了依赖关系树-这是一场灾难。
Ollie2893'1

我刚刚发现了该函数,该函数对于根据列的第一行进行条件格式设置很有用。不确定RC []表示法是否适用
于此

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

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

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中插入的连续值。



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始终查看当前单元格左侧的值,并且将随着选择不同的单元格而动态变化。如果单独使用名称,它将提供单元格的值,但在一定范围内,它将使用引用。感谢这个答案大约为理念的单元格引用。


0

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

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

假设您要对一列(A列)进行总计,但不包括保存该求和的单元格(例如Cell A100);做这个:

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

  1. 单击工作表中不在第一行上的任何位置-说单元格D9
  2. 定义一个名为“ OneCellAbove”的命名范围,但是用“ = D8”(无引号)覆盖“ RefersTo”框
  3. 现在,在单元格A100中,您可以使用公式
    = SUM(A1:OneCellAbove)

-1

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

=A1<>XFD1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.