我正在尝试进行条件格式设置,以便如果某个单元格的值与其左侧单元格的值不同,则单元格颜色会更改(每列是一个月份,在每行中都有特定对象的费用。我希望轻松监控价格在几个月内的变化)。
我可以对每个单元格进行操作并拖动格式,但我想要一个通用公式来应用于整个工作表。
我正在尝试进行条件格式设置,以便如果某个单元格的值与其左侧单元格的值不同,则单元格颜色会更改(每列是一个月份,在每行中都有特定对象的费用。我希望轻松监控价格在几个月内的变化)。
我可以对每个单元格进行操作并拖动格式,但我想要一个通用公式来应用于整个工作表。
我认为这是最简单的答案。
使用“名称”引用偏移量。
假设您想要对一列(列A)求和,直到但不包括保持总和的单元格(例如单元格A100); 做这个:
(我假设在创建名称时使用A1引用; R1C1随后可以切换到)
=SUM(A1:OneCellAbove)
在创建用户定义函数时,我发现涉及到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
' https://dev59.com/w2kw5IYBdhLWcg3wJXIh#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
您可以使用 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
=A1<>XFD1
格式...,选择格式选项,确定,确定。
=INDIRECT("RC[1]",0)
。 - prograhammer