6

这是我正在使用的电子表格的样子:

汇总表

(表格顶部)

截屏

源数据

(同一张纸,在输出下方)

截屏

我正在使用QUERY函数在汇总表中填充适当的提要,其中需要放入从 A24 开始的数据。

这是我在单元格 C6 中使用的公式(在汇总表中使用了类似的公式):

=QUERY($A$24:$D$57, "Select D Where B='ENQ' and A='2/27/14 - Thu'")

这可以获得正确的信息,但是需要编辑公式以使其在每个使用它的单元格中都是唯一的。问题是无法快速填充A='2/27/14 - Thu'过于具体的单元格。

我试图设置它,以便:

  • 在接受数据之前,A 中的日期将与第 2 行标题中的日期进行比较
  • B 中的房间类型将在汇总表的每一行中与 A 中的值进行比较

如何编写 QUERY 函数以将这些值作为变量引用,而不是在我的原始函数中使用文字字符串?

4

1 回答 1

14
  1. 'ENQ'您可以让公式引用输出的 A 列中的索引,而不是固定字符串,例如。例如,您可以在单元格 C4 中将公式更改为此:

    =QUERY($A$24:$D, "Select D Where B='" & $A4 & "' and A='2/27/14 - Thu'")
                                             ^^^^^^^
    

    与号 ( &) 用于连接字符串段。

    请注意,由于源数据延伸到工作表数据范围的底部,我们可以放弃指定底行。该范围$A$24:$D将包含所有行,因此它将自动调整以适应其他源数据。

  2. 要比较日期,两个值都必须是日期。“2/27/14 - Thu”在源数据表中不会被识别为日期,而是被识别为文本,即使您已将数字格式设置为日期。因此,请确保将所有源数据更改为在 A 列中有实际日期。

    您仍然可以按照自己喜欢的方式设置日期格式 - 请参阅此屏幕截图。A2 的内容现在是正确的日期“2/27/2014”,但格式设置为显示“mm/dd/yy - DDD”。只要数据是日期,就可以使用电子表格TEXT函数构建查询,以 yyyy-mm-dd 格式解释日期。

    截屏

  3. 使用源列中的日期,您可以使用todate()标量函数QUERY将源中的日期转换为查询日期,并使用date关键字将以下文字字符串(来自 C2)视为日期。

    单元格 C4 的结果函数是:

    =QUERY($A$24:$D , "Select D Where B='" & $A4 & "'and todate(A) = date '" & TEXT($C$2,"yyyy-MM-dd") & "'")
                                                            ^^^^^^      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    同样,对于 D4:

    =QUERY($A$24:$D , "Select C Where B='"&$A4&"'and todate(A) = date '"&TEXT($C$2,"yyyy-MM-dd")&"'")
    
  4. 您在 E 列中的计算可以改进以处理#N/A出现在 C 或 D 列中的结果:

    =if(isna(C12*D12),0,C12*D12)
    
于 2014-10-20T02:55:40.203 回答