1

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

   |     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(它实际上是从第二天开始的时间跨度),它会添加1,否则我的结果将是负数小时数。(更多关于这里。)

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

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

=C1<>D1 on the interval C1:C1000

步骤问题:

C1单元格未绘制,因为它的值与D1相同(两者都是12:00)。C2也没有涂漆,因为它的值与 D2 相同
两者都是)。 尽管C3的值 ( ) 与D3 ( ) 相同,但C3 已涂漆01:00
01:0001:00

而且这种行为只是在电子表格上明显随机地重复。

我对它进行了很多研究,甚至在 Excel 上对其进行了测试,发现它在那里就像一个魅力。但是在 Google 电子表格中,我得到了这种奇怪的行为。

4

2 回答 2

2

非常令人困惑,但幸运的是很容易修复(我认为!)。请试试:

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

而不仅仅是=D1<>C1.

于 2015-03-12T05:35:11.853 回答
1

您看到的行为是 Google Sheets 处理浮点错误的结果(您可能会争辩说 Excel 在这方面做得更好,因为它更经常掩盖这些错误)。

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

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

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

顺便说一句,可以缩短为

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

于 2015-03-12T05:35:50.267 回答