【问题标题】:Conditional formatting with QUERY result in Google Spreadsheet在 Google 电子表格中使用 QUERY 进行条件格式设置
【发布时间】:2017-03-20 06:49:12
【问题描述】:

我有一个电子表格,其中包含一张软件版本和另一张安装记录。我想做一个条件格式,将安装中的版本(在F 列上)与其在另一张纸上的已知最新版本号('Software Versions')进行比较。

当前解决方案

我最初想出了这个公式:

=AND(F2<>"", F2=G2)

它有效。但我需要在 G2 上维护一列 QUERY 结果:

=QUERY('Software Versions'!$A$1:$B$8, "Select B where A='" &D4& "' LIMIT 1")

问题

现在我想完全删除 G2 行。我想出了这个组合查询:

=AND(F2<>"", F2=QUERY('Software Versions'!$A$1:$B$8, "Select B where A='" &D4& "' LIMIT 1"))

但我无法保存它,因为它是“无效公式”:

有什么方法可以做到吗?

【问题讨论】:

  • 这看起来是XY problem。 “但我需要在 G2 上维护一列 QUERY 结果”是什么意思?
  • 这意味着我维护一个“G2”列纯粹是为了条件格式。它有效,但它很丑。因此,我想在保持条件格式的同时将其从工作表中删除。
  • G2 是一个单元格引用,这意味着它返回单个/标量值,而 QUERY 显然返回一个值数组、列标题和值,但我认为修复此问题不会解决问题.使用示例输入数据和预期结果创建一个演示电子表格。
  • 我想我找到了主要问题。条件格式中的公式似乎不支持工作表引用。如果我不参考另一张纸的范围,我的公式的一个版本就可以工作。

标签: google-sheets


【解决方案1】:

试试这个公式:

=AND(F2<>"", F2=IFERROR(QUERY(INDIRECT("'Software Versions'!$A$1:$B$8"), "Select B where A='" &D4& "' LIMIT 1 label B ''"),""))

我能够使用这个公式进行条件格式设置。

改进

  1. 使用indirect 寻址另一张工作表
  2. 使用label B '' 防止标题出现在查询结果中
  3. 使用iferror(..., "") 确保在query 找不到数据时不会发生错误

【讨论】:

    【解决方案2】:

    我已经习惯了用于条件格式的老式 VLOOKUP 函数。

    语法是VLOOKUP(valueOrCell, sourceRange, index, FALSE)

    所以如果第一个参数valueOrCell 的值存在于sourceRange 中,则返回index 的值。 FALSE 是完全匹配的。

    在我的示例中,我只使用了一个工作表,但如果您将 sourceRange 设置为不同的工作表,它也可以工作。

    【讨论】:

    • 我想将软件名称及其版本保留在不同的列中。我会为每个软件保留最新的安全补丁版本号(不是最新版本)。归根结底,我想知道哪些软件要进行安全升级。非安全升级对我来说不是必需的。所以这将是对“>=安全版本”测试的测试,而不是完全匹配测试。
    • 另外,在一个简短的测试中,它似乎不支持另一个工作表中的查询单元格(即'Sheet 2'!A:A)。
    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2023-03-29
    相关资源
    最近更新 更多