【问题标题】:True Conditional Formatting Rule with changing values and multiple cells具有更改值和多个单元格的真正条件格式规则
【发布时间】:2015-10-05 23:36:02
【问题描述】:

经过数小时的研究和失败的尝试,我终于决定自己问这个问题。

我想对特定单元格应用 3 组规则,如下所示:

(注意H5是Value,I5是LoLo,J5是Lo,K5是Hi,L5是HiHi)

Red: =OR($H$5<$I$5,$H$5>$L$5)
Yellow: =OR(AND($H$5>$K$5,$H$5<$L$5),AND($H$5<$J$5,$H$5>$I$5))
Green: =AND($H$5>$J$5,$H$5<$K$5)

在 H 列以绿色显示的值是动态的(每分钟自动变化),而其他值是固定的。

我将向您展示我现在为 Red 编写的 VBA 规则(它不起作用)

Range(CurrentValue_Loc).Select 'CurrentValue_Loc = H5 in this case
If (ActiveCell.Value < Range(LoLo_Loc).Value Or ActiveCell.Value > Range(HiHi_Loc).Value) Then
ActiveCell.Interior.ColorIndex = 3

这个“有效”一次,但这不是一个实际的规则。宏在 t=0 运行时基本上会格式化单元格,但是在 5 分钟内,即使该值不再符合我的规则,格式也不会改变。

我完全理解它为什么不起作用,但我不知道如何使它起作用。希望我已经足够清楚了。

感谢您的帮助!

【问题讨论】:

  • 如果您在 t=5min 再次运行宏,它是否正确更新颜色?
  • 是的,因为第二条或第三条规则变为 True,因此颜色会更新。如果我不在 t=5 时运行宏,则颜色不会改变。我希望在不再次运行宏的情况下更新颜色。

标签: excel vba formatting conditional


【解决方案1】:

这可能有效,也可能无效,具体取决于您说值“自动”更新时的确切含义,但通常,每当值更改时让宏运行的方法是将其包装在工作表更改中事件。

为此,请在 VBA 编辑器的左侧,双击包含此宏需要定位的单元格的工作表名称。编辑窗口顶部有两个框。从左侧下拉列表中选择“工作表”,从右侧下拉列表中选择“更改”。此时,编辑器应该自动填充Worksheet_Change 子的外壳。将您的代码放在那里将导致它在工作表上的值发生更改时运行。

【讨论】:

  • 谢谢,我会试试的。自动我的意思是这些值是从服务器更新的,所以按 F9 会更新值。我认为它确实应该可以解决问题,我会及时通知您!
  • 我担心如果我没有正确编码它会很慢。您能否编辑您的初始响应,显示循环的正确代码,对 H5:HX 中的所有行执行此操作,其中 X 是最后填充的行?非常感谢!
  • 添加了关于如何通过条件格式执行此操作的第二个答案,因为它看起来像您的初衷。 SO上有很多关于有效循环的答案。我会把你推荐给那些。干杯!
【解决方案2】:

通过条件格式来做到这一点: 将以下三个单独的规则应用到单元格H5

Red: =OR($H5&lt;$I5,$H5&gt;$L5)

Yellow: =OR(AND($H5&gt;$K5,$H5&lt;$L5),AND($H5&lt;$J5,$H5&gt;$I5))

Green: =AND($H5&gt;$J5,$H5&lt;$K5)

请注意行引用前面缺少$。 现在您可以使用格式刷将这些规则(以及它们现在的相对引用)拖到 H 列下。

【讨论】:

  • 又好又简单,应该就是这样。实际上,将其向下拖动不起作用,但是如果您将第一个 H5 复制到 H6 它可以工作,所以我将构建一个将 H5 复制到 H6,然后复制到 H7,再到 H8 的宏……这不是最聪明的方法,但它可以工作。 .. 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2019-01-27
  • 2021-06-28
相关资源
最近更新 更多