当您只尝试在一个条件下匹配时,生活会更轻松。您构建问题的方式,您的 HOME 查找公式必须查看当前工作表中的时间,以及算法表中的日期。这使每个比较变得复杂。当您可以查看 ONE 单元格或 ONE 范围并测试 ONE 条件以获得结果时,会更容易。有时,这样做涉及创建“帮助列”。问题是存在无法使用辅助列的用例。但是在您的情况下,算法表是“非美学的”并且可以支持辅助列。
因此,将两个“帮助”列添加到 Algorithm 表中,因此您的表如下所示:
| 1 |
A |
B |
C |
D |
E |
(My Notes) |
| 2 |
Date |
Market Open |
Remarks |
untilOpen |
untilClose |
|
| 3 |
9/24/2022 |
FALSE |
- |
- |
- |
Blank because Past |
| 4 |
9/25/2022 |
FALSE |
- |
- |
- |
Blank because Past |
| 5 |
9/26/2022 |
TRUE |
- |
- |
- |
Blank because Past |
| 6 |
9/27/2022 |
TRUE |
- |
- |
- |
Blank because Past |
| 7 |
9/28/2022 |
TRUE |
- |
- |
- |
Blank because Past |
| 8 |
9/29/2022 |
TRUE |
- |
0.44085 |
0.71168 |
Next Opening/closing |
| 9 |
9/30/2022 |
TRUE |
- |
1.44085 |
1.71168 |
|
| 10 |
10/1/2022 |
FALSE |
- |
- |
- |
|
| 11 |
10/2/2022 |
FALSE |
- |
- |
- |
|
| 12 |
10/3/2022 |
TRUE |
- |
4.44085 |
4.71168 |
|
| 13 |
10/4/2022 |
TRUE |
- |
5.44085 |
5.71168 |
|
| 14 |
10/5/2022 |
TRUE |
- |
6.44085 |
6.71168 |
|
| 15 |
10/6/2022 |
TRUE |
- |
7.44085 |
7.71168 |
|
| 16 |
10/7/2022 |
TRUE |
- |
8.44085 |
8.71168 |
|
| 17 |
10/8/2022 |
FALSE |
- |
- |
- |
|
| 18 |
10/9/2022 |
FALSE |
- |
- |
- |
|
| 19 |
10/10/2022 |
FALSE |
Holiday |
- |
- |
Blank because holiday |
| 20 |
10/11/2022 |
TRUE |
- |
12.44085 |
12.71168 |
|
| 21 |
10/12/2022 |
TRUE |
- |
13.44085 |
13.71168 |
|
我的 D 列是距离下一次打开多长时间的日期/时间戳。 E 是距离下一次收盘还有多长时间。这些是动态的,并在每次工作表重新计算时基于 NOW 进行更新。 (在 Excel 中,整数部分是天数,小数部分是部分天数,仍然可以格式化为“d hh:mm:ss”。)我让你来使用 Excel 格式来获得你想要的外观。
我桌子的时间戳是基于 9 月 28 日晚上的,我还在 22 年 10 月 10 日放了一个假假期以作说明。
以下是这些单元格的公式,然后将其复制到每一列到所有行:
B2我改用比你更简单的公式来确定工作日/节假日(并将其复制下来):
=AND(WEEKDAY(A2,2)<=5,C2="-")
- 如果是周一到周五,B2 为 TRUE,并且备注为“-”。
D2
=LET( open, A2 + TIME(9,30,0) - NOW(), IF( AND( B2, open > 0), open, "-"))
- 这表示使变量“打开”= 该行的日期加上上午 9:30 减去现在,这意味着这是该行打开时间之前的时间的 Excel 时间戳。
- 如果这个时间还在未来,并且这是一个开放日,则将此时间戳放在单元格中,否则将其设为“=”。
E2
=LET( close, A2 + TIME(16,0,0) - NOW(), IF( AND( B2, close > 0), close, "-"))
看看我做了什么?大部分逻辑在算法表中。因为我空白的过去几天和节假日的时间戳,我的查找实际上就是这么简单:
唯一剩下的逻辑是让您的主页确定市场当前是开市还是收市。
事实上,从“现在”开始的下一个打开/关闭事件只是 =MIN(D2:E21),因为打开时间一过,每一行中的打开时间都会变为空白。换句话说,您主页上的小时和分钟可以总是只需来自=MIN(D2:E21),您所要做的就是确定当前状态是否已关闭。
我们现在已经从查找中消除了所有复杂性。重要的是要决定要放置逻辑的位置,在复杂的查找中通常不是最好的位置。我们将逻辑移至调度表。
顺便说一句,关于您的示例的一些建议:
-
在 Excel 中,它非常重要,高度建议避免使用合并单元格。您对合并单元格的使用不会增加额外的美感或可用性。合并单元格会降低逻辑和公式的直观性,可能会使格式复杂化等。仅当合并单元格具有无法以其他方式实现的特定好处时,才使用合并单元格。您可以设置行高和列宽以获得更好的结果。
-
您的数据未针对查找和计算进行标准化。如果市场在任何工作日开盘和收盘都相同,那么只需设置周一至周五的行,其中包含 9:30 和下午 4:00。如果您希望能够支持每个工作日的不同时间,则有 10 个单元格(5 行 x 2 列)包含打开和关闭时间,然后让算法表进行查找。你已经创造了一个星期几逻辑的美学外观,但它吸引了有经验的人的眼睛,实际上并没有,而且时间表“只是为了展示”。