将查询结果重写为时间
Rewrite the results of query to time
我有以下代码:
={"HOURS"; ARRAYFORMULA(IFNA(VLOOKUP(B86:B145,
{REGEXEXTRACT(""&'Sheet1'!D6:D, TEXTJOIN("|", 1, B86:B145)), 'Sheet1'!H6:H}, 2, 0)))}
这将 return(一些示例):
1h
1h 52s
2h 48m
3m 9s
5m
36s
所以有不同的结果(从 Sheet1 格式化的方式)h=小时,m=分钟,s=秒
是否可以通过编辑我的公式将其转换为时间?
01:00:00
01:00:52
02:48:00
00:03:09
00:05:00
00:00:36
示例 sheet:https://docs.google.com/spreadsheets/d/1c3HdMq4PA50pYr88JqPoG51jvru8ipp8ebe4z5DczTQ/edit?usp=sharing
您可以使用 =TIME()
函数将值转换为时间。例如:
=TIME(13, 0, 52)
将导致 1:00:52 PM
。如果您不想包含 AM/PM,或者想要小时中的前导 0,您可以在格式 > 数字设置中更改时间格式。
如果您在电子表格中包含 link,则结合您已有的公式会更容易找到完整的解决方案。
注意:我可能完全把它复杂化了,但我已经使用了这个方法,所以我将分享我的解决方案。我确实尝试将这些公式中的大部分结合起来,但没有成功。
我将逐步介绍如何进行设置,以尽可能简化设置。
- 在
Sheet1
中,将公式=arrayformula(split(H6:H65, " "))
放入单元格I6
。
- 在
Sheet1
中,将公式=arrayformula(SPLIT(lower(I6:I65),"qwertyuihmsopadfgjklzxcvbn``-=[]\;',./!@#$%^&*()"))
放在单元格K6
中。
- 在
Sheet1
中,将公式=iferror(arrayformula(SPLIT(lower(J6:J65),"qwertyuihmsopadfgjklzxcvbn``-=[]\;',./!@#$%^&*()")),"-")
放入单元格L6
。
- 在
Sheet1
中,将以下公式放入单元格M6
。
=arrayformula(time(
if(iferror(search("h", I6:I65))>1, K6:K65, 0),
if(iferror(search("h", I6:I65))>1, if(iferror(search("m", J6:J65))>1, L6:L65, 0),if(iferror(search("m", I6:I65))>1, K6:K65, 0)),
if(iferror(search("h", I6:I65))>1, if(iferror(search("m", J6:J65))>1, 0, if(iferror(search("s", J6:J65))>1, L6:L65, 0)), if(iferror(search("s", I6:I65))>1, K6:K65, if(iferror(search("s", J6:J65))>1, L6:L65, 0)))))
- 在
MAIN
中,将公式=ARRAYFORMULA(vlookup(B86:B145, Sheet1!D6:M65, 10))
放在单元格E86
中。
- 在
MAIN
中,用您的时间值突出显示范围 (E6:E145
),然后转到格式 > 数字 > 更多格式 > 更多日期和时间格式
- 向下滚动直到找到
13:30:30
。如果在列表中找不到,请参考下图手动设置格式。
现在您的时间格式应该正确了。为了美观,Sheet1
中包含中间公式的列可以根据需要隐藏。
尝试:
={"HOURS";
ARRAYFORMULA(IFNA(IF(VLOOKUP(B86:B, Sheet1!D:H, 5, 0)="-", "-", TEXT(TIME(
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)h")),
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)m")),
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)s"))), "hh:mm:ss"))))}
如果这些时间是持续时间,请使用:[hh]:mm:ss
我有以下代码:
={"HOURS"; ARRAYFORMULA(IFNA(VLOOKUP(B86:B145,
{REGEXEXTRACT(""&'Sheet1'!D6:D, TEXTJOIN("|", 1, B86:B145)), 'Sheet1'!H6:H}, 2, 0)))}
这将 return(一些示例):
1h
1h 52s
2h 48m
3m 9s
5m
36s
所以有不同的结果(从 Sheet1 格式化的方式)h=小时,m=分钟,s=秒
是否可以通过编辑我的公式将其转换为时间?
01:00:00
01:00:52
02:48:00
00:03:09
00:05:00
00:00:36
示例 sheet:https://docs.google.com/spreadsheets/d/1c3HdMq4PA50pYr88JqPoG51jvru8ipp8ebe4z5DczTQ/edit?usp=sharing
您可以使用 =TIME()
函数将值转换为时间。例如:
=TIME(13, 0, 52)
将导致 1:00:52 PM
。如果您不想包含 AM/PM,或者想要小时中的前导 0,您可以在格式 > 数字设置中更改时间格式。
如果您在电子表格中包含 link,则结合您已有的公式会更容易找到完整的解决方案。
注意:我可能完全把它复杂化了,但我已经使用了这个方法,所以我将分享我的解决方案。我确实尝试将这些公式中的大部分结合起来,但没有成功。
我将逐步介绍如何进行设置,以尽可能简化设置。
- 在
Sheet1
中,将公式=arrayformula(split(H6:H65, " "))
放入单元格I6
。 - 在
Sheet1
中,将公式=arrayformula(SPLIT(lower(I6:I65),"qwertyuihmsopadfgjklzxcvbn``-=[]\;',./!@#$%^&*()"))
放在单元格K6
中。 - 在
Sheet1
中,将公式=iferror(arrayformula(SPLIT(lower(J6:J65),"qwertyuihmsopadfgjklzxcvbn``-=[]\;',./!@#$%^&*()")),"-")
放入单元格L6
。 - 在
Sheet1
中,将以下公式放入单元格M6
。
=arrayformula(time(
if(iferror(search("h", I6:I65))>1, K6:K65, 0),
if(iferror(search("h", I6:I65))>1, if(iferror(search("m", J6:J65))>1, L6:L65, 0),if(iferror(search("m", I6:I65))>1, K6:K65, 0)),
if(iferror(search("h", I6:I65))>1, if(iferror(search("m", J6:J65))>1, 0, if(iferror(search("s", J6:J65))>1, L6:L65, 0)), if(iferror(search("s", I6:I65))>1, K6:K65, if(iferror(search("s", J6:J65))>1, L6:L65, 0)))))
- 在
MAIN
中,将公式=ARRAYFORMULA(vlookup(B86:B145, Sheet1!D6:M65, 10))
放在单元格E86
中。 - 在
MAIN
中,用您的时间值突出显示范围 (E6:E145
),然后转到格式 > 数字 > 更多格式 > 更多日期和时间格式 - 向下滚动直到找到
13:30:30
。如果在列表中找不到,请参考下图手动设置格式。
现在您的时间格式应该正确了。为了美观,Sheet1
中包含中间公式的列可以根据需要隐藏。
尝试:
={"HOURS";
ARRAYFORMULA(IFNA(IF(VLOOKUP(B86:B, Sheet1!D:H, 5, 0)="-", "-", TEXT(TIME(
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)h")),
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)m")),
IFNA(REGEXEXTRACT(VLOOKUP(B86:B, Sheet1!D:H, 5, 0), "(\d+)s"))), "hh:mm:ss"))))}
如果这些时间是持续时间,请使用:[hh]:mm:ss