【问题标题】:Converting "##h ##m" to ##.## hours将“##h ##m”转换为 ##.## 小时
【发布时间】:2018-07-03 19:30:09
【问题描述】:

我的时间跟踪应用以以下格式导出员工小时数:

xxh yym

我正在寻找一种将其转换为十进制小时数的方法。例如,

input(06h 30m)
return(6.5)

无法找到在 Google 表格或 Excel 上执行此操作的方法。我尝试创建一个新功能,但这远远超出了我的能力。我的编码经验很少。

感谢您的帮助!

【问题讨论】:

  • 使用 left() 获取小时数,然后使用 mid() 获取分钟数,除以 60 转化为小数,然后相加得到结果。
  • 看到这个然后将输出乘以 24:stackoverflow.com/questions/36292174/…

标签: excel google-sheets data-conversion custom-functions-excel


【解决方案1】:

Google 表格上,您可以按照以下公式通过 REGEXEXTRACT() 内置函数执行此操作(假设您的文本存储在 A1

=REGEXEXTRACT(A1,"^(\d{2})h \d{2}m") + REGEXEXTRACT(A1,"^\d{2}h (\d{2})m")/60

REGEXEXTRACT() 是一个正则表达式提取函数。输入 06h 30m 的文本具有以下模式 ^\d{2}h \d{2}m where

  • ^ 指的是字符串的开头
  • \d 表示一位数,\d{2} 表示两位数
  • hm 都是出现在参考文本中的字符。

因此,通过在我们需要从 文本和简单的算术,您可以将06h 30m 转换为6.5

更多关于正则表达式语法的信息可以在这里找到 tutorial

【讨论】:

  • 这成功了!谢谢你的帮助。这将为我每月节省几个小时的工资
【解决方案2】:

另一种公式:

=24*TIMEVALUE(SUBSTITUTE(SUBSTITUTE(A1,"m",""),"h ",":"))

【讨论】:

    【解决方案3】:

    我不完全确定您所说的“输入”是什么意思,以及它是否在您正在解析的单元格或某种数据源中,并且不清楚所描述的“06h 30m”是否是时间值在具有自定义格式或文本字段的单元格中。

    此答案假设数据是一个文本字段(在单元格 A2 中),并且您希望将数字作为小时数和一小时的小数返回,最长为 24 小时(因为我还假设这些是员工小时数)一天内)。它假定总是有两位数的小时数或分钟数,并且 xxh 和 yym 之间有一个空格:

    =TIME(LEFT(A2,2),MID(A2,5,2),0)*24
    

    我希望这至少能引导你朝着你想要达到的方向前进。

    【讨论】:

      【解决方案4】:
      Function ConvertTime(hours, minutes)
           return hours + (minutes/60)
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-11
        • 2020-03-18
        • 2018-10-07
        • 2012-11-05
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多