【问题标题】:Format Cells in column, if match formula, and adjacent cell is blank格式化列中的单元格,如果匹配公式,并且相邻单元格为空白
【发布时间】:2017-12-27 09:59:12
【问题描述】:

如果单元格匹配公式并且相邻行为空白,我是否可以有条件地格式化单元格?

我的表格如下; B 列包含日期格式的单元格,P 列也包含日期格式。

我有条件地格式化 B 列中的单元格,前提是它们符合以下公式;

=NOW()-30(如果单元格超过 30 天,请填写)

这很好用,但是,我想在旁边输入另一个条件,因此格式仅适用于同一行的 P 列中的单元格为空白时。

所以我希望它看起来像这样,但它似乎不起作用;

=AND((ISBLANK($P)),((NOW()-30)))

提前感谢您的帮助。

【问题讨论】:

  • 您是使用 VBA 添加这些公式还是直接在单元格中输入?
  • =AND(NOT(ISBLANK($P)),((NOW()-30))) - 使用 $P 无效。您可以查看OFFSET 函数或考虑 R1C1 样式参考。
  • 我正在通过功能区中的条件格式按钮进行操作,谢谢。
  • 嗨 Robin,我已将 $P 更改为 P4,但它似乎也不起作用,谢谢。

标签: excel excel-formula conditional-formatting vba


【解决方案1】:

如果您使用公式进行条件格式设置,则如果公式结果为true,则单元格将被格式化。

这里的问题是=NOW()-30 会产生类似2017-06-21 13:31 的结果,如果将其转换为布尔值,则总是 true

因此,如果您只想格式化一个日期超过 30 天的单元格,那么您需要检查该单元格。例如。对于单元格 B1 使用:=(B1<=NOW()-30)

或者相应地像=AND(ISBLANK($P1), ($B1<=NOW()-30)) 一样用于单元格 B1,然后将格式复制到其他单元格中。

【讨论】:

    【解决方案2】:

    我建议制作一个 VBA 宏(我认为更简单、更清晰)。只需创建一个 for 循环,然后使用 cell.value 循环整个列以比较值或 cell.formula 以获取公式。 这样,您还可以通过在varianttable 中复制您的值来加快速度,这样您就可以以最小的时间损失执行所有操作(非常适合处理大型数据库)。 至于带有双重条件的条件格式,它会给出这样的结果:

    if(range(cells(2,1), cells(2,bottomrow)).formula = "formulahere" AND  range(cells(16,1), cells(16,bottomrow)).value = "") Then
    '--your actions--
    end if 
    

    【讨论】:

    • 嗨 Diveye,每次打开文件时都会运行这段代码吗?正如我试图消除运行宏的用户一样。抱歉打扰了。
    • 你好 Uhujkill,是的,当然这每次都可以自行启动。您需要做的就是进入您的 VBA 项目文件中的 Microsoft Excel 对象,查找“ThisWorkbook”组件并创建一个子“Private Sub Workbook_Open()”。每次打开工作簿时都会运行此 Sub(因此任何时候有人打开您的 excel 文件)并将运行您在 sub 中插入的命令。通过这种方式,您可以轻松配置您希望的所有操作并让它们在启动时运行。查看本教程以获取有关如何使用 VBA for Excel 的更多信息:excel-easy.com/vba.html
    【解决方案3】:

    通过将以下公式应用于条件格式窗口中的 B 列,我设法使其工作;

    =($B1<=NOW()-365)*($P1="") 
    

    此公式仅在确认日期后格式化单元格,在单元格B1...中大于365天,并且P列中的相邻单元格为空白。 从而满足我所需的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多