我正在尝试进行条件格式化,以便如果该值与它左侧的单元格中的值不同(每列为一个月,每行中是某些对象的费用,则该单元格的颜色将更改)。我想监视价格在几个月内容易发生变化。)
我可以按单元格进行操作并对其进行格式拖动,但是我希望将通用公式应用于整个工作表。
谢谢!
我正在尝试进行条件格式化,以便如果该值与它左侧的单元格中的值不同(每列为一个月,每行中是某些对象的费用,则该单元格的颜色将更改)。我想监视价格在几个月内容易发生变化。)
我可以按单元格进行操作并对其进行格式拖动,但是我希望将通用公式应用于整个工作表。
谢谢!
Answers:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
但是未格式化单元格。怎么了?
最短最兼容的版本是:
=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时是不可行的。
而不是写很长:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
您可以简单地写:
=OFFSET(*Name of your Cell*,0,-1)
因此,例如,您可以写入Cell B2:
=OFFSET(B2,0,-1)
引用单元格B1
仍然感谢杰森·杨!没有您的回答,我永远不会想出这个解决方案!
更简单:
=indirect(address(row(), column() - 1))
OFFSET返回相对于当前参考的参考,因此如果间接返回正确的参考,则不需要它。
当创建一个用户定义的函数,我发现其他的答案涉及的功能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
我偶然发现了这个线程,因为我一直想始终以“非易失性”方式引用“左侧的单元格”(没有偏移,间接和类似的灾难)。上下浏览网络,没有答案。(该线程实际上也没有提供答案。)经过一番修改之后,我偶然发现了最令人惊讶的方法,我想与该社区分享:
假设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中插入的连续值。
为什么不使用:
=ADDRESS(ROW(),COLUMN()-1)
对于那些寻找非易失性答案的人,您可以通过在命名公式中使用INDEX函数来实现。
选择单元格A2
打开Name Manager
(Ctrl + F3)
请点击 New
将其命名为“ LeftCell”(或您喜欢的任何名称)
对于Scope:
,请选择Workbook
在中Refers to:
,输入公式:
=INDEX(!A1:!A2, 1)
单击OK
并关闭Name Manager
这告诉Excel始终查看当前单元格左侧的值,并且将随着选择不同的单元格而动态变化。如果单独使用名称,它将提供单元格的值,但在一定范围内,它将使用引用。感谢这个答案大约为理念的单元格引用。
=INDIRECT("RC[1]",0)