睇明你D格式啦
用VBA
將下面個FUCNTION寫入VBA MODULE就用得
Sub Test()可以唔洗
@PYTHON數據大師 請問以下格式的時間怎樣用VBA變回數值格式(1d=1)
1d 2h 30.0m 即1日2小時30分
2h 30.0m 即2小時30分
在VBA中,要将类似 "1d 2h 30.0m" 这样的字符串转换为以天为单位的数值格式,您可以编写一个函数来解析字符串,并将各个部分转换为与一天的相应分数。以下是一个简单的VBA函数实现这一点的示例:
Function TimeStringToDays(timeStr As String) As Double
Dim daysPart As String
Dim hoursPart As String
Dim minutesPart As String
Dim dayValue As Double
Dim hourValue As Double
Dim minuteValue As Double
' 查找日、时、分的位置
Dim dayPos As Integer
Dim hourPos As Integer
Dim minutePos As Integer
dayPos = InStr(timeStr, "d")
hourPos = InStr(timeStr, "h")
minutePos = InStr(timeStr, "m")
' 提取日、时、分的值
If dayPos > 0 Then
daysPart = Trim(Left(timeStr, dayPos - 1))
dayValue = Val(daysPart)
Else
dayValue = 0
End If
If hourPos > 0 Then
' 从日的位置或字符串起点直到小时标记之前的位置
hoursPart = Trim(Mid(timeStr, IIf(dayPos > 0, dayPos + 1, 1), hourPos - IIf(dayPos > 0, dayPos + 1, 1)))
hourValue = Val(hoursPart) / 24 ' 1小时 = 1/24天
Else
hourValue = 0
End If
If minutePos > 0 Then
' 从小时的位置或字符串起点直到分钟标记之前的位置
minutesPart = Trim(Mid(timeStr, IIf(hourPos > 0, hourPos + 1, 1), minutePos - IIf(hourPos > 0, hourPos + 1, 1)))
minuteValue = Val(minutesPart) / 1440 ' 1分钟 = 1/(24 * 60)天
Else
minuteValue = 0
End If
' 计算总天数
TimeStringToDays = dayValue + hourValue + minuteValue
End Function
使用该函数的方法如下:
Sub Test()
Dim timeValue As String
timeValue = "1d 2h 30.0m"
Debug.Print TimeStringToDays(timeValue) ' 打印结果应该接近 1.10417 (即 1 + 2/24 + 30/(24 * 60))
timeValue = "2h 30.0m"
Debug.Print TimeStringToDays(timeValue) ' 打印结果应该接近 0.10417 (即 2/24 + 30/(24 * 60))
End Sub
这个函数首先查找表示日、时和分的位置,并基于这些位置来提取对应的数值。之后,将小时和分钟数值转换为以天为单位的分数形式,并计算总和。这样,我们就可以得到用天表示的时间总量。请注意,需要根据您具体的时间格式调整代码中字符串解析的逻辑。
@PYTHON數據大師 我想對EXCEL一個範圍的儲存格套用上面的TimeStringToDays function
要在Excel中对一个范围的单元格应用自定义的 TimeStringToDays 函数,您可以先将这个函数保存在Excel的VBA模块中,然后像使用其他Excel函数一样在单元格中引用它。以下是详细步骤:
打开Excel工作簿。
按 Alt + F11 打开VBA编辑器。
在VBA编辑器中,选择 插入 > 模块,新建一个模块。
将 TimeStringToDays 函数的代码复制粘贴到新模块中。
保存VBA代码并关闭VBA编辑器。
回到Excel工作表,选择要应用函数的单元格。
在单元格中输入公式,比如说 =TimeStringToDays(A1),其中 A1 是包含时间字符串的单元格。
如果您要对工作表上的多个单元格应用这个函数,您可以:
单独为每个单元格输入公式。
或者,输入第一个公式后,将该单元格拖动向下或向右以自动填充其他单元格(确保范围内的单元格地址是相对引用,不要误用绝对引用)。
例如,如果您有一个时间字符串列表在A1:A10,您可以在B1输入以下公式:
=TimeStringToDays(A1)
然后点击该单元格右下角的填充把手,向下拖动到B10,这样B1:B10就会自动填充上对应的转换结果。
请注意,此自定义函数会将返回的时间表示为小数点后的天数,你可以根据需要在Excel中格式化这些单元格,使数值按照更易读的方式显示(如:小数点后保留两位数等)。