根据 Calc 中的搜索结果返回 3 个值中的 1 个

问题描述 投票:0回答:1

我有一个 Calc 工作簿,其工作表名为

Project n
,其中
n
是项目编号,作为其自己的单独工作表。格式:

A B C D E F G H
日期 字符串 字符串 字符串 字符串 字符串 字符串 活动1
日期 字符串 字符串 字符串 字符串 字符串 字符串 活动2

工作簿有一个摘要表,用于跟踪所有项目表中的事件。格式:

活动1 活动2
项目1 是/否 是/否
项目2 是/否 是/否

Y/N
单元格在
Event
中查找各自的
Project
,以检查项目表中是否存在该事件:

=IF(COUNTIFS(INDIRECT(CONCATENATE("$",$A2,".$H$1:$H$250")),B$1),"Y","N")

INDIRECT(CONCATENATE())
部分采用项目名称(在本例中,
$A2
引用
Project 1
)来引用同名的工作表,然后在该工作表的
H
列中搜索与事件匹配的任何单元格名称(在本例中为
B$1
参考文献
Event1
)。

我希望更改公式,以便对于

C
之前已完成的事件返回
TODAY()
,对于数据中不存在的不完整事件返回
I
,对于数据中确实存在但未完成的事件返回
F
TODAY()
之后。项目表在
A
列中包含日期值。

但是,不同日期可能会有重复的活动。我需要确保在重复事件的情况下,如果事件编号的最新日期是未来,则返回

F
未来状态。

本质上,我正在尝试这样做:

If Eventn exists in ProjectSheetColumnH(event) and the highest ProjectSheetColumnA(date) is less than TODAY(), then "C"
ElseIf Eventn exists in ProjectSheetColumnH(event) and the highest ProjectSheetColumnA(date) is greater than TODAY(), then "F"
Else "I"

这确实涉及数据库领域,但它不是我能够使用的东西,无论在

firebird
中执行此操作有多么简单。不幸的是,我被电子表格困住了。我该去哪里?

spreadsheet libreoffice-calc
1个回答
0
投票

使用

MAXIFS
获取特定事件的最新日期。像这样的东西:

=MAXIFS(INDIRECT(A2&".A2:A6");INDIRECT(A2&".H2:H6");"="&B1)<TODAY()

这将获取该行与特定事件名称匹配的所有日期,然后返回这些日期中最高的日期。

您的实际公式需要包含两个或三个 MAXIFS 语句 - 如果您决定使用它而不是 COUNTIFS 作为“Else”部分,则需要三个。

看起来 LibreOffice 2024.8 中将添加

LET
,这样应该可以简化公式,这样 MAXIFS 就不需要重复了——计算一次,然后再引用该变量两次。

© www.soinside.com 2019 - 2024. All rights reserved.