使用小时值的条件格式
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
我正在尝试创建一个条件格式公式,用于比较 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