如何从特定时间范围内的行中选择最小值?
How do I choose the minimum value from rows within certain hour range?
我每天每小时一行。对于 06:00 至 21:00 小时,我需要使用在 22:00(前一天)至 05:00 的列价格中找到的最低值(最小值)并将其存储在在 06:00 到 21:00 小时内每一行的最低列。其他栏低将显示与价格相同的值。
最低列中的 Excel 公式应该如何解决这个问题?
我需要它的外观(最小值以粗体显示)
日期和时间
日期部分
小时
价格
最低
2018-01-0100:00
2018-01-01
00:00
258,86
258,86
2018-01-0101:00
2018-01-01
01:00
259,85
259,85
2018-01-0102:00
2018-01-01
02:00
256,6
256,6
2018-01-0103:00
2018-01-01
03:00
242,84
242,84
2018-01-0104:00
2018-01-01
04:00
243,23
243,23
2018-01-0105:00
2018-01-01
05:00
177,07
177,07
2018-01-0106:00
2018-01-01
06:00
174,8
177,07
2018-01-0107:00
2018-01-01
07:00
175
177,07
2018-01-0108:00
2018-01-01
08:00
194,27
177,07
2018-01-0109:00
2018-01-01
09:00
203,81
177,07
2018-01-0110:00
2018-01-01
10:00
243,43
177,07
2018-01-0111:00
2018-01-01
11:00
252,47
177,07
2018-01-0112:00
2018-01-01
12:00
236,84
177,07
2018-01-0113:00
2018-01-01
13:00
245,89
177,07
2018-01-0114:00
2018-01-01
14:00
253,75
177,07
2018-01-0115:00
2018-01-01
15:00
260,14
177,07
2018-01-0116:00
2018-01-01
16:00
265,75
177,07
2018-01-0117:00
2018-01-01
17:00
269,68
177,07
2018-01-0118:00
2018-01-01
18:00
268,3
177,07
2018-01-0119:00
2018-01-01
19:00
265,06
177,07
2018-01-0120:00
2018-01-01
20:00
262,5
177,07
2018-01-0121:00
2018-01-01
21:00
260,24
177,07
2018-01-0122:00
2018-01-01
22:00
256,5
256,5
2018-01-0123:00
2018-01-01
23:00
244,61
244,61
2018-01-0200:00
2018-01-02
00:00
248,54
248,54
2018-01-0201:00
2018-01-02
01:00
227,7
227,7
2018-01-0202:00
2018-01-02
02:00
243,62
243,62
2018-01-0203:00
2018-01-02
03:00
246,08
246,08
2018-01-0204:00
2018-01-02
04:00
252,96
252,96
2018-01-0205:00
2018-01-02
05:00
263,88
263,88
2018-01-0206:00
2018-01-02
06:00
273,32
227,7
2018-01-0207:00
2018-01-02
07:00
299,86
227,7
2018-01-0208:00
2018-01-02
08:00
313,92
227,7
2018-01-0209:00
2018-01-02
09:00
329,65
227,7
2018-01-0210:00
2018-01-02
10:00
344,5
227,7
2018-01-0211:00
2018-01-02
11:00
346,27
227,7
2018-01-0212:00
2018-01-02
12:00
339,78
227,7
2018-01-0213:00
2018-01-02
13:00
335,25
227,7
2018-01-0214:00
2018-01-02
14:00
353,74
227,7
2018-01-0215:00
2018-01-02
15:00
374,09
227,7
2018-01-0216:00
2018-01-02
16:00
409,68
227,7
2018-01-0217:00
2018-01-02
17:00
416,76
227,7
2018-01-0218:00
2018-01-02
18:00
371,53
227,7
2018-01-0219:00
2018-01-02
19:00
331,32
227,7
2018-01-0220:00
2018-01-02
20:00
303,6
227,7
2018-01-0221:00
2018-01-02
21:00
283,64
227,7
2018-01-0222:00
2018-01-02
22:00
275,18
275,18
2018-01-0223:00
2018-01-02
23:00
271,35
271,35
第一种方法 - 不稳定和惰性
您可以在 Lowest 列的第 2 行使用此公式 (其中 Lowest 在 E 列中) 并向下复制:
=IF(C2=TIME(6,0,0), MIN(OFFSET(D2,-MIN(8,ROW()-1),0,MIN(8,ROW()-1),1)),
IF( (C2 > TIME(6,0,0))*(C2 < TIME(22,0,0)), E1,
D2) )
我把我的放在你的一边,并称它为 Low 以测试是否达到了正确答案,你的 table 从 A1 开始,如下所示:
在 Excel table (ctrl t) 中这样更易读:
=IF([@Hour]=TIME(6,0,0), MIN(OFFSET([@Price],-MIN(8,ROW()-1),0,MIN(8,ROW()-1),1)),
IF( ([@Hour] > TIME(6,0,0))*([@Hour] < TIME(22,0,0)), E1,
[@Price]) )
Craner 方法 - 非易失性和非惰性
这使用了 INDEX 而不是 Scott Craner 提议的 OFFSET - 应该使工作表更具响应性。
=IF(C2=TIME(6,0,0), MIN(INDEX(D:D,MAX(1,ROW()-8)):INDEX(D:D,ROW()-1)),
IF( (C2 > TIME(6,0,0))*(C2 < TIME(22,0,0)), F1,
D2) )
或 Excel Table:
=IF([@Hour]=TIME(6,0,0), MIN(INDEX(D:D,MAX(1,ROW()-8)):INDEX(D:D,ROW()-1)),
IF( ([@Hour] > TIME(6,0,0))*([@Hour] < TIME(22,0,0)), H1,
[@Price]) )
如果数据未排序,请使用这些公式之一。如果数据按示例所示排序,那么 Mark 公式的索引版本在大型数据集上会更快。
在 IF 中嵌套 MINIFS:
=IF(AND(C2>=TIME(6,0,0),C2<=TIME(21,0,0)),MINIFS(D:D,A:A,">="&B2-1+TIME(22,0,0),A:A,"<="&B2+TIME(5,0,0)),D2)
如果没有 MINIFS,我们可以使用 AGGREGATE:
=IF(AND(C2>=TIME(6,0,0),C2<=TIME(21,0,0)),AGGREGATE(15,7,$D:$D/(($A:$A>=B2-1+TIME(22,0,0))*($A:$A<=B2+TIME(5,0,0))),1),D2)
请注意,我们需要从完整的列引用转变为仅引用数据集。
我每天每小时一行。对于 06:00 至 21:00 小时,我需要使用在 22:00(前一天)至 05:00 的列价格中找到的最低值(最小值)并将其存储在在 06:00 到 21:00 小时内每一行的最低列。其他栏低将显示与价格相同的值。
最低列中的 Excel 公式应该如何解决这个问题?
我需要它的外观(最小值以粗体显示)
日期和时间 | 日期部分 | 小时 | 价格 | 最低 |
---|---|---|---|---|
2018-01-0100:00 | 2018-01-01 | 00:00 | 258,86 | 258,86 |
2018-01-0101:00 | 2018-01-01 | 01:00 | 259,85 | 259,85 |
2018-01-0102:00 | 2018-01-01 | 02:00 | 256,6 | 256,6 |
2018-01-0103:00 | 2018-01-01 | 03:00 | 242,84 | 242,84 |
2018-01-0104:00 | 2018-01-01 | 04:00 | 243,23 | 243,23 |
2018-01-0105:00 | 2018-01-01 | 05:00 | 177,07 | 177,07 |
2018-01-0106:00 | 2018-01-01 | 06:00 | 174,8 | 177,07 |
2018-01-0107:00 | 2018-01-01 | 07:00 | 175 | 177,07 |
2018-01-0108:00 | 2018-01-01 | 08:00 | 194,27 | 177,07 |
2018-01-0109:00 | 2018-01-01 | 09:00 | 203,81 | 177,07 |
2018-01-0110:00 | 2018-01-01 | 10:00 | 243,43 | 177,07 |
2018-01-0111:00 | 2018-01-01 | 11:00 | 252,47 | 177,07 |
2018-01-0112:00 | 2018-01-01 | 12:00 | 236,84 | 177,07 |
2018-01-0113:00 | 2018-01-01 | 13:00 | 245,89 | 177,07 |
2018-01-0114:00 | 2018-01-01 | 14:00 | 253,75 | 177,07 |
2018-01-0115:00 | 2018-01-01 | 15:00 | 260,14 | 177,07 |
2018-01-0116:00 | 2018-01-01 | 16:00 | 265,75 | 177,07 |
2018-01-0117:00 | 2018-01-01 | 17:00 | 269,68 | 177,07 |
2018-01-0118:00 | 2018-01-01 | 18:00 | 268,3 | 177,07 |
2018-01-0119:00 | 2018-01-01 | 19:00 | 265,06 | 177,07 |
2018-01-0120:00 | 2018-01-01 | 20:00 | 262,5 | 177,07 |
2018-01-0121:00 | 2018-01-01 | 21:00 | 260,24 | 177,07 |
2018-01-0122:00 | 2018-01-01 | 22:00 | 256,5 | 256,5 |
2018-01-0123:00 | 2018-01-01 | 23:00 | 244,61 | 244,61 |
2018-01-0200:00 | 2018-01-02 | 00:00 | 248,54 | 248,54 |
2018-01-0201:00 | 2018-01-02 | 01:00 | 227,7 | 227,7 |
2018-01-0202:00 | 2018-01-02 | 02:00 | 243,62 | 243,62 |
2018-01-0203:00 | 2018-01-02 | 03:00 | 246,08 | 246,08 |
2018-01-0204:00 | 2018-01-02 | 04:00 | 252,96 | 252,96 |
2018-01-0205:00 | 2018-01-02 | 05:00 | 263,88 | 263,88 |
2018-01-0206:00 | 2018-01-02 | 06:00 | 273,32 | 227,7 |
2018-01-0207:00 | 2018-01-02 | 07:00 | 299,86 | 227,7 |
2018-01-0208:00 | 2018-01-02 | 08:00 | 313,92 | 227,7 |
2018-01-0209:00 | 2018-01-02 | 09:00 | 329,65 | 227,7 |
2018-01-0210:00 | 2018-01-02 | 10:00 | 344,5 | 227,7 |
2018-01-0211:00 | 2018-01-02 | 11:00 | 346,27 | 227,7 |
2018-01-0212:00 | 2018-01-02 | 12:00 | 339,78 | 227,7 |
2018-01-0213:00 | 2018-01-02 | 13:00 | 335,25 | 227,7 |
2018-01-0214:00 | 2018-01-02 | 14:00 | 353,74 | 227,7 |
2018-01-0215:00 | 2018-01-02 | 15:00 | 374,09 | 227,7 |
2018-01-0216:00 | 2018-01-02 | 16:00 | 409,68 | 227,7 |
2018-01-0217:00 | 2018-01-02 | 17:00 | 416,76 | 227,7 |
2018-01-0218:00 | 2018-01-02 | 18:00 | 371,53 | 227,7 |
2018-01-0219:00 | 2018-01-02 | 19:00 | 331,32 | 227,7 |
2018-01-0220:00 | 2018-01-02 | 20:00 | 303,6 | 227,7 |
2018-01-0221:00 | 2018-01-02 | 21:00 | 283,64 | 227,7 |
2018-01-0222:00 | 2018-01-02 | 22:00 | 275,18 | 275,18 |
2018-01-0223:00 | 2018-01-02 | 23:00 | 271,35 | 271,35 |
第一种方法 - 不稳定和惰性
您可以在 Lowest 列的第 2 行使用此公式 (其中 Lowest 在 E 列中) 并向下复制:
=IF(C2=TIME(6,0,0), MIN(OFFSET(D2,-MIN(8,ROW()-1),0,MIN(8,ROW()-1),1)),
IF( (C2 > TIME(6,0,0))*(C2 < TIME(22,0,0)), E1,
D2) )
我把我的放在你的一边,并称它为 Low 以测试是否达到了正确答案,你的 table 从 A1 开始,如下所示:
在 Excel table (ctrl t) 中这样更易读:
=IF([@Hour]=TIME(6,0,0), MIN(OFFSET([@Price],-MIN(8,ROW()-1),0,MIN(8,ROW()-1),1)),
IF( ([@Hour] > TIME(6,0,0))*([@Hour] < TIME(22,0,0)), E1,
[@Price]) )
Craner 方法 - 非易失性和非惰性
这使用了 INDEX 而不是 Scott Craner 提议的 OFFSET - 应该使工作表更具响应性。
=IF(C2=TIME(6,0,0), MIN(INDEX(D:D,MAX(1,ROW()-8)):INDEX(D:D,ROW()-1)),
IF( (C2 > TIME(6,0,0))*(C2 < TIME(22,0,0)), F1,
D2) )
或 Excel Table:
=IF([@Hour]=TIME(6,0,0), MIN(INDEX(D:D,MAX(1,ROW()-8)):INDEX(D:D,ROW()-1)),
IF( ([@Hour] > TIME(6,0,0))*([@Hour] < TIME(22,0,0)), H1,
[@Price]) )
如果数据未排序,请使用这些公式之一。如果数据按示例所示排序,那么 Mark 公式的索引版本在大型数据集上会更快。
在 IF 中嵌套 MINIFS:
=IF(AND(C2>=TIME(6,0,0),C2<=TIME(21,0,0)),MINIFS(D:D,A:A,">="&B2-1+TIME(22,0,0),A:A,"<="&B2+TIME(5,0,0)),D2)
如果没有 MINIFS,我们可以使用 AGGREGATE:
=IF(AND(C2>=TIME(6,0,0),C2<=TIME(21,0,0)),AGGREGATE(15,7,$D:$D/(($A:$A>=B2-1+TIME(22,0,0))*($A:$A<=B2+TIME(5,0,0))),1),D2)
请注意,我们需要从完整的列引用转变为仅引用数据集。