我正在尝试将以下公式转换为excel中的函数:
=REPLACE(REPLACE(R1C1,10,3,(ROUND((RIGHT(R1C1,3)*29.97)/1000,0))),9,1,"";"")
这样做会采用如下时间码:00:01:35,748
并将其转换为:00:01:35;22
我不知道如何将现有函数放入自定义函数以及结果如何。
答案 0 :(得分:2)
打开VBA编辑器(Alt-F11),选择"插入模块"从“插入”菜单中,键入以下内容(为更好的代码实践而更新 - 感谢@ ja72输入):
Option Explicit
Public Const fps = 29.97 ' frames per second
Function timeCode(s)
' take a string as input
' find the fractional time
' and convert to frame number like 00:01:35,748
' and turn it into this: 00:01:35;22
Dim comma, fraction, frameNum, frameInSec
comma = InStr(1, s, ",")
fraction = Mid(s, comma + 1, Len(s))
' convert to seconds regardless of number of digits:
frameInSec = Val(fraction) / (10 ^ Len(fraction))
frameNum = Application.WorksheetFunction.Round(frameInSec * fps, 0)
timeCode = Left(s, comma - 1) & ";" & frameNum
End Function
现在您可以输入类似
的公式=timeCode("00:01:35,748")
进入您的电子表格,结果将是
00:01:35;22
你想要的是什么......
当然,您可以使用单元格引用代替字符串 - 因此,如果单元格A1中有"00:01:35,748"
,则可以键入
=timeCode(A1)
单元格B1中的(例如)并获得所需的结果。自定义功能 - 功能强大。
根据特殊要求 编辑(两个价格为一个...):更改输出字符串的格式以将:
替换为;
,然后进行帧编号总是两位数(如果需要,前导零):
Dim tempString
tempString = Left(s, comma - 1) & ";" & Format(frameNum, "00")
timeCode = Replace(tempString, ":", ";")
显而易见的是,您将其放在上面的代码中......