如何在 Excel 公式中将 Jira 运行时间格式转换为几分钟?

How to convert Jira elapsed time format into just minutes in an Excel formula?

我得到了一个 Excel 电子表格,其中有一个 "Time Spent" 列,其中包含标准 Jira 时间跟踪格式的值,分为天、小时和分钟:

Time Spent (Jira format)
------------------------
1d 7h 30m
30m
20d 5m

它无法重新生成 - 它来自某个特定的时间点并且数字已经移动。我需要将这些时间转换为分钟数 - 例如上面的结果应该是:

Time Spent (minutes)
--------------------
1890
30
28805

这需要全部发生在 Excel,理想情况下只使用适用于所有此类时间跨度的公式 - 如果可能,宁愿避免 VBA。

分解成几个步骤。
多少天?如果它包含 "d",那么我们想要 "d" 左边的字符:(乘以 24 小时或 1440 分钟)

IF(ISERROR(FIND("d",A1)),0,LEFT(A1,FIND("d",A1)-1))

几个小时?那么,如果它包含 "h",那么我们需要 "h" 左侧的数字。如果我们抓住左边的 2 个字符,那将是一个 2 位数字,或者一个 space 和一个 1 位数字。然后我们可以使用 TRIM 去除多余的 spaces:(同样,乘以 60 分钟)

IF(ISERROR(FIND("h",A1)),0,TRIM(MID(A1,FIND("h",A1)-2,2)))

多少分钟?这与 Hours 基本相同,但寻找 "m" 而不是 "h" - 也不需要转换它。

IF(ISERROR(FIND("m",A1)),0,TRIM(MID(A1,FIND("m",A1)-2,2)))

把它们放在一起,这次包括转换为分钟数:

=IF(ISERROR(FIND("d",A1)),0,1440*LEFT(A1,FIND("d",A1)-1))+IF(ISERROR(FIND("h",A1)),0,60*TRIM(MID(A1,FIND("h",A1)-2,2)))+IF(ISERROR(FIND("m",A1)),0,TRIM(MID(A1,FIND("m",A1)-2,2)))

{EDIT} 更新代码以防字符串以单个数字开头 minutes/hours:

=IF(ISERROR(FIND("d",A1)),0,1440*LEFT(A1,FIND("d",A1)-1))+IF(ISERROR(FIND("h",A1)),0,60*TRIM(MID(" "&A1,FIND("h",A1)-1,2)))+IF(ISERROR(FIND("m",A1)),0,TRIM(MID(" "&A1,FIND("m",A1)-1,2)))

当你的数据在Col:A从A3开始,你可以使用这个公式向下复制:

=IFERROR(MID($A3,1,FIND("d",$A3)-1),0)*24*60+IFERROR(MID($A3,FIND("h",$A3)-IF(FIND("h",$A3)<3,1,2),IF(FIND("h",$A3)<3,1,2))*60,0)+IFERROR(MID($A3,FIND("m",$A3)-IF(FIND("m",$A3)<3,1,2),IF(FIND("m",$A3)<3,1,2)),0)

我只需要编写一个公式来解析来自 JIRA 估计的 "w"、"d"、"h" 分隔符。例如列中的“4w 2d 3h”。结果是这样的:

=if(C2 <> "", SUM(SUMIF(REGEXEXTRACT(C2, ".*([\d]+)w.*") * 40, "<>#N/A"), SUMIF(REGEXEXTRACT(C2, ".*([\d]+)d.*") * 8, "<>#N/A"), SUMIF(REGEXEXTRACT(C2, ".*([\d]+)h.*"), "<>#N/A")), "")

您最好不要仔细研究它。这使用正则表达式,所以要小心(以防你的列有其他数据)。