如何通过仅提取每天的特定时间来过滤具有日期和时间值的列表?
How do I filter a list with date and time values by only extracting specific times each day?
我在 A 列中列出了日期和时间。B 列是每个时间值的美元值。
我想获取每天的特定时间并在下一列中列出价格。我现在有这个:
J 列的公式是这样的:
=filter(A11:B,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6)
此公式过滤 4:30AM 及其关联的价格。
L 列的公式是这样的:
=filter(A11:B,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6)
只过滤 9:30AM 每天的价格。
如您所见,当 J 列为 8/12/2021 且 L 列为 8/13/2021 时,日期将停止匹配。这是因为 L 列没有 2021 年 8 月 12 日的 9:30AM,所以它跳到了 2021 年 8 月 13 日。
如果另一列与该时间不匹配,我如何才能使其中一列跳过某个日期?我不知道我是否解释得很好,但在上面的示例中,J 列应该跳过 8/12/2021,因为 L 列没有 8/12/2021.
处理此问题的另一种方法可能是使用 UNIQUE 和 FILTER 公式,但我不确定该怎么做。任何帮助将不胜感激!
这是电子表格的 link:https://docs.google.com/spreadsheets/d/1TvP0_UsYJbLb5bscx2e4nTEnSkP5roBZpP8aIGdl414/edit?usp=sharing
我不是 100% 确定,但是如果您需要过滤值以便时间元素为 09:30 和 04:30,那么隐藏日期只出现一次的值(即没有09:30 值或没有 04:30 值),您可以使用:
=arrayformula(filter(
filter(A11:B,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5)),
countif(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))),int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))))>1)
)
在最后调整 >1
到您需要的任何逻辑(=2
、<>1
等)。
如果需要,您还可以在所有内容周围添加 sort()
。
解释:
原来mod(A11,1)*24
不是特别圆,所以建议round(mod(A11:A,1)*24,2)
。
因此要过滤 date/times 上午 9.30 和 4.30,您可以申请:
round(mod(A11:A,1)*24,2)=9.5
和
round(mod(A11:A,1)*24,2)=4.5
像这样:
=arrayformula({filter(A11:B,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))})
filter
通常是 AND
但要获得 OR
条件它是 filter(A:B,(A=1)+(A=2))
这仅获取日期:
=arrayformula(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))))
然后这个计算一个日期出现了多少次:
=arrayformula(countif(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))),int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5)))))
组合元素得到解决方案。
我会在你的 sheet 中添加一个标签。
您可以过滤每个列表以在另一个列表中找到每个日期(日期时间的整数部分)的匹配项:
在 J:
=filter(A11:B,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6,isnumber(match(int(A11:A),int(filter(A11:A,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6)),0)))
大号:
=filter(A11:B,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6,isnumber(match(int(A11:A),int(filter(A11:A,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6)),0)))
备注
请参阅 Aresvik 的回答以获得可能更好的舍入方法,但请注意 4:30 (3/16) 实际上具有二进制小数的精确表示,因此舍入误差在这里不是问题。
我在 A 列中列出了日期和时间。B 列是每个时间值的美元值。
我想获取每天的特定时间并在下一列中列出价格。我现在有这个:
J 列的公式是这样的:
=filter(A11:B,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6)
此公式过滤 4:30AM 及其关联的价格。
L 列的公式是这样的:
=filter(A11:B,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6)
只过滤 9:30AM 每天的价格。
如您所见,当 J 列为 8/12/2021 且 L 列为 8/13/2021 时,日期将停止匹配。这是因为 L 列没有 2021 年 8 月 12 日的 9:30AM,所以它跳到了 2021 年 8 月 13 日。
如果另一列与该时间不匹配,我如何才能使其中一列跳过某个日期?我不知道我是否解释得很好,但在上面的示例中,J 列应该跳过 8/12/2021,因为 L 列没有 8/12/2021.
处理此问题的另一种方法可能是使用 UNIQUE 和 FILTER 公式,但我不确定该怎么做。任何帮助将不胜感激!
这是电子表格的 link:https://docs.google.com/spreadsheets/d/1TvP0_UsYJbLb5bscx2e4nTEnSkP5roBZpP8aIGdl414/edit?usp=sharing
我不是 100% 确定,但是如果您需要过滤值以便时间元素为 09:30 和 04:30,那么隐藏日期只出现一次的值(即没有09:30 值或没有 04:30 值),您可以使用:
=arrayformula(filter(
filter(A11:B,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5)),
countif(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))),int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))))>1)
)
在最后调整 >1
到您需要的任何逻辑(=2
、<>1
等)。
如果需要,您还可以在所有内容周围添加 sort()
。
解释:
原来mod(A11,1)*24
不是特别圆,所以建议round(mod(A11:A,1)*24,2)
。
因此要过滤 date/times 上午 9.30 和 4.30,您可以申请:
round(mod(A11:A,1)*24,2)=9.5
和
round(mod(A11:A,1)*24,2)=4.5
像这样:
=arrayformula({filter(A11:B,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))})
filter
通常是 AND
但要获得 OR
条件它是 filter(A:B,(A=1)+(A=2))
这仅获取日期:
=arrayformula(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))))
然后这个计算一个日期出现了多少次:
=arrayformula(countif(int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5))),int(filter(A11:A,(round(mod(A11:A,1)*24,2)=9.5)+(round(mod(A11:A,1)*24,2)=4.5)))))
组合元素得到解决方案。
我会在你的 sheet 中添加一个标签。
您可以过滤每个列表以在另一个列表中找到每个日期(日期时间的整数部分)的匹配项:
在 J:
=filter(A11:B,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6,isnumber(match(int(A11:A),int(filter(A11:A,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6)),0)))
大号:
=filter(A11:B,(mod(A11:A,1)*24)>=9.5,(mod(A11:A,1)*24)<=9.6,isnumber(match(int(A11:A),int(filter(A11:A,(mod(A11:A,1)*24)>=4.5,(mod(A11:A,1)*24)<=4.6)),0)))
备注
请参阅 Aresvik 的回答以获得可能更好的舍入方法,但请注意 4:30 (3/16) 实际上具有二进制小数的精确表示,因此舍入误差在这里不是问题。