使用小时值的条件格式

Conditional formatting using Hour values

我正在尝试创建一个条件格式公式,用于比较 HOUR 值的两列。例如,我有以下三行电子表格(实际电子表格的 link 是 here):

   |     A     |     B    |    C    |   D    |
1  |   14:00   |   02:00  |  12:00  |  12:00 | 
2  |   15:30   |   16:30  |  01:00  |  01:00 |
3  |   08:30   |   09:30  |  01:00  |  01:00 |

第 1 步:C 列是 减法 的结果:B - A。因为我使用的是小时值 (不是日期和小时也不是日期,只有小时)我在 C 列上使用的公式是:

      =(B1-A1) + IF(B1 < A1; 1)

这个公式本质上是计算 B - A,如果 B 比 A "smaller"(它实际上是从第二天开始的时间跨度),它会添加 1,否则我的结果将是负数小时数。 (更多关于 here。)

第 2 步:D 列是一个插入值(不是任何公式的结果),并且整个列的格式为(小时)。

第 3 步:我创建了一个条件格式规则,用于比较 C 列中的值与 D 列中的值。如果它们不同,则 C 列上的单元格应涂成绿色:

=C1<>D1 on the interval C1:C1000

步骤问题:

C1 单元格未绘制,因为它的值与 D1 相同(两者都是 12:00 ).
C2 也没有绘制,因为它的值与 D2 相同(都是 01:00)。
C3 被绘制,即使其值 (01:00) 与 D3 (01:00) 相同!

而且这种行为在电子表格上显然是随机重复的。

我对它进行了很多研究,甚至在 Excel 上对其进行了测试,发现它非常有效。但是在 Google 电子表格中我得到了这种奇怪的行为。

非常混乱,但幸运的是很容易修复(我认为!)。请尝试:

=round(D1;14)<>round(C1;14)

而不仅仅是 =D1<>C1.

您看到的行为是 Google Sheets 处理 floating point 错误的结果(您可以争辩说 Excel 在这方面做得更好,因为它会更频繁地掩盖这些错误)。

您可以通过将 C 列和 D 列的格式更改为数字来查看发生了什么,并将显示的小数位数增加到大约 16 位(使用 .00-> 按钮),您将看到差异。

解决方法是对计算出的数据进行一些舍入,这说起来容易做起来难。如果 D 列仅包含包含整分钟的时间,您可以使用:

=ROUND((B1-A1+IF(B1<A1;1))*1440)/1440

顺便说一句可以缩短为

=ROUND(MOD(B1-A1;1)*1440)/1440