首先,我在这里不是为了一个全面的解决方案,而是一个正确方向的点。我有一个工作表,它有一个命名的单元格区域,其中包含文本字符串,如'Saturday 2200-0700 Sunday'这些单元格中的文本可以根据日期和时间等而变化我想要的是把一个代码放在一起的地方:在4个数字部分之间转换成时间格式。这样我就可以计算轮班时间等。这样我就能得到这个“周六22:00-周日07:00”不知道从哪里开始。
0s0u357o1#
就像这样:
=LEFT(A1,FIND(" ",A1,1))&MID(A1,FIND(" ",A1,1)+1,2)&":"&MID(A1,FIND(" ",A1,1)+3,5)&":"&MID(A1,FIND("-",A1,1)+3,20)
当然,让Excel识别时间需要将22:00等拆分出来。根据评论:所以我们来看看时间:
=MID(A1,FIND(" ",A1,1)+1,2)&":"&MID(A1,FIND(" ",A1,1)+3,5)&":"&MID(A1,FIND("-",A1,1)+3,3)
至于没有以“::“结尾,那么先执行if()来检查“:”:
=if(iferror(find(":",a1,1),0)>=1,A1,"do function")
所以如果“:“在那里,它只是重复A1,如果没有,你应用的功能。
kzmpq1sx2#
从另一个Angular ......不过有点啰嗦。
=LET(Original, $B$2, SplitBySpace, TEXTSPLIT(Original, " "), HourPart,TEXTSPLIT(INDEX(SplitBySpace,2),"-"), Converted, LEFT(HourPart,2) & ":" & RIGHT(HourPart,2), RejoinConverted, TEXTJOIN("-",FALSE,Converted), Return, TEXTJOIN(" ",FALSE,INDEX(SplitBySpace,,1),RejoinConverted,INDEX(SplitBySpace,,3)), Return)
**编辑:**已将Return参数更新为使用TEXTJOIN。第一次没有成功,但一定是打错了。
TEXTJOIN
z9zf31ra3#
另一个解决方案:
=LEFT(A1,FIND("-",A1,1)-3)&":"&LEFT(RIGHT(A1,LEN(A1)-FIND("-",A1,1)+3),5)&":"&RIGHT(A1,LEN(A1)-FIND("-",A1,1)-2)
对这个公式做一个小小的修改,删除日期:
=RIGHT(LEFT(A1,FIND("-",A1,1)-3),2)&":"&LEFT(RIGHT(A1,LEN(A1)-FIND("-",A1,1)+3),5)&":"&LEFT(RIGHT(A1,LEN(A1)-FIND("-",A1,1)-2),2)
bxjv4tth4#
我迟到了,但如果你想要一个完整的解决方案,你可以在包含该文本的单元格上使用以下UDF:
Function hour_difference(DayTime As String) 'declarations Dim wk As String, seg As Variant, StartDayOfWeek As Integer, EndDayOfWeek As Integer, StartTimeofDay As String, EndTimeofDay As String Dim StartDateTime As Double, EndDateTime As Double 'enumerate weekdays wk = "SuMoTuWeThFrSa" seg = Split(DayTime, " ") StartDayOfWeek = (InStr(1, wk, Left(seg(0), 2), vbTextCompare) + 1) / 2 EndDayOfWeek = (InStr(1, wk, Left(seg(2), 2), vbTextCompare) + 1) / 2 'get times StartTimeofDay = Split(seg(1), "-")(0) EndTimeofDay = Split(seg(1), "-")(1) 'calculate difference StartDateTime = StartDayOfWeek * 24 + Left(StartTimeofDay, 2) + Right(StartTimeofDay, 2) / 60 EndDateTime = EndDayOfWeek * 24 + Left(EndTimeofDay, 2) + Right(EndTimeofDay, 2) / 60 hour_difference = (EndDateTime + 168 - StartDateTime) Mod 168 End Function
输入:“星期六2200-0700星期日”输出:9
4条答案
按热度按时间0s0u357o1#
就像这样:
当然,让Excel识别时间需要将22:00等拆分出来。
根据评论:所以我们来看看时间:
至于没有以“::“结尾,那么先执行if()来检查“:”:
所以如果“:“在那里,它只是重复A1,如果没有,你应用的功能。
kzmpq1sx2#
从另一个Angular ......不过有点啰嗦。
**编辑:**已将Return参数更新为使用
TEXTJOIN
。第一次没有成功,但一定是打错了。z9zf31ra3#
另一个解决方案:
对这个公式做一个小小的修改,删除日期:
bxjv4tth4#
我迟到了,但如果你想要一个完整的解决方案,你可以在包含该文本的单元格上使用以下UDF:
输入:“星期六2200-0700星期日”
输出:9