Excel更改条件格式公式

我有一个表格,其中包含许多表示时间线的单元格(每分钟一个单元格,非常小的宽度),我想在这个表格中显示包含三个阶段的操作。 (一行可以有多个操作,代表一个手术室)

例如,如果准备在10:00开始,实际操作在10:23开始,那么所有在这些时间之间的23个单元应该变为红色,并且下一个55(代表在10:23和11:18之间的实际操作)应该是绿色的,等等,就像这样:

17 18 19 20 21 22 23 00 01 02 03 04 | | | | | | | | | | | | OR1______________++++=================****______________++=========***____________ OR2______________________+++++======================*****_________________________ 

如果它的时间值(取自一个额外的行)在两个开始/结束值之间,则每个单元格都被格式化,特殊情况下为午夜左右的数字。

为了实现自动化(有很多操作),我写了一个macros,它贯穿时间表(四个时间段,三个阶段的开始和结束,一个代表手术室),并指定每个列的大表(与彩色单元格)三个条件格式,这应该工作正常(手动检查他们):

 T = time.Address(RowAbsolute:=True, ColumnAbsolute:=False) Z1 = t1.Address Z2 = t2.Address Z3 = t3.Address Z4 = t4.Address fnc1 = "=OR(AND(" & Z1 & "<=" & T & ";" & T & "<" & Z2 & ");AND(" & Z2 & "<" & Z1 & ";" & Z1 & "<=" & T & ");AND(" & T & "<" & Z2 & ";" & Z2 & "<" & Z1 & "))" fnc2 = "=OR(AND(" & Z2 & "<=" & T & ";" & T & "<" & Z3 & ");AND(" & Z3 & "<" & Z2 & ";" & Z2 & "<=" & T & ");AND(" & T & "<" & Z3 & ";" & Z3 & "<" & Z2 & "))" fnc3 = "=OR(AND(" & Z3 & "<=" & T & ";" & T & "<" & Z4 & ");AND(" & Z4 & "<" & Z3 & ";" & Z3 & "<=" & T & ");AND(" & T & "<" & Z4 & ";" & Z4 & "<" & Z3 & "))" Dim currentLine As Range Set currentLine = Range(Cells(dline, data.Column), Cells(dline, data.Column).Offset(0, width)) Set frmt1 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc1) Set frmt2 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc2) Set frmt3 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc3) frmt1.Interior.Color = RGB(255, 0, 0) frmt2.Interior.Color = RGB(0, 255, 0) frmt3.Interior.Color = RGB(0, 0, 255) 

't1','t4'是开始/结束时间的表格单元格,'time'是额外的行,在可视化表格中每列的文字时间(10:01,10:02,…) ,与'data'的宽度相同),'data'是可视化表格,'dline'是当前格式化的行的数量,根据手术室计算。 '宽度'现在通常是300,但一般60 *所显示的小时数(所以只是那个时间的分钟数)。

这整个工作没有错误,它产生正确的格式化string(我在debugging模式下检查fnc1..fnc3)。 他们看起来像这样,他们应该这样做:

 =OR(AND($KR$10<=C$13;C$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=C$13);AND(C$13<$KS$10;$KS$10<$KR$10)) 

C13是第一个时间单元,KR10和KS10是这个操作(开始准备,开始实际操作/结束准备)的“t1”和“t2”。

但是:只要格式string保存为Excel(macros完成),他们不再是相同的。 通常类似

 =OR(AND($KR$10<=XCS$13;XCS$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=XCS$13);AND(XCS$13<$KS$10;$KS$10<$KR$10)) 

出来 – “时间”细胞的价值,这是唯一的相对变化,奇怪,高价值('XCS','WTC','XBR'…)。 如果我也是相对的,那也是伪装的(我有163552那样的数字)。

这似乎是独立于macros观,因为我第一次尝试了IronPython中的所有东西,其工作方式相同(我实际上是从该代码翻译macros)并产生了相同的错误。

我甚至有时在手工分配公式时遇到同样的错误,所以我强烈怀疑Excel是真正的错误…

现在,既然我找不到类似的错误,那么这可能是为了记忆吗? 就像太多的细胞? 或者特定于我的电脑/安装/代码/ …?

我使用Excel 2007.“数据”表的单元格没有专门格式化,时间都是hh:mm:ss。

我希望我已经足够清楚了整个东西的工作原理。 否则,只是要求更多的代码或任何需要的信息。 感谢任何提示,我已经坚持了一个星期,现在我已经没有想法了…

(信贷给蒂姆·威廉姆斯)

这个问题似乎需要做一些活动单元的位置,在这个过程中改变。 下面的代码工作,将被使用(我也纠正了另一个我以前看不到的错误):

 T = time.Address(True, False) ' here I initially forgot to update the row (not related to problem) Z1 = Cells(tline, t1.Column).Address Z2 = Cells(tline, t2.Column).Address Z3 = Cells(tline, t3.Column).Address Z4 = Cells(tline, t4.Column).Address fnc1 = "=OR(AND(" & Z1 & "<=" & T & ";" & T & "<" & Z2 & ");AND(" & Z2 & "<" & Z1 & ";" & Z1 & "<=" & T & ");AND(" & T & "<" & Z2 & ";" & Z2 & "<" & Z1 & "))" fnc2 = "=OR(AND(" & Z2 & "<=" & T & ";" & T & "<" & Z3 & ");AND(" & Z3 & "<" & Z2 & ";" & Z2 & "<=" & T & ");AND(" & T & "<" & Z3 & ";" & Z3 & "<" & Z2 & "))" fnc3 = "=OR(AND(" & Z3 & "<=" & T & ";" & T & "<" & Z4 & ");AND(" & Z4 & "<" & Z3 & ";" & Z3 & "<=" & T & ");AND(" & T & "<" & Z4 & ";" & Z4 & "<" & Z3 & "))" Dim currentLine As Range Set currentLine = Range(Cells(dline, data.Column), Cells(dline, data.Column).Offset(0, width)) currentLine.Select ' <- neccessary change solving the problem Set frmt1 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc1) Set frmt2 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc2) Set frmt3 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc3) frmt1.Interior.Color = RGB(255, 0, 0) frmt2.Interior.Color = RGB(0, 255, 0) frmt3.Interior.Color = RGB(0, 0, 255)