Excel位置:文本单元格中的4个数字之间

jckbn6z7  于 2023-06-25  发布在  其他
关注(0)|答案(4)|浏览(130)

首先,我在这里不是为了一个全面的解决方案,而是一个正确方向的点。我有一个工作表,它有一个命名的单元格区域,其中包含文本字符串,如
'Saturday 2200-0700 Sunday'这些单元格中的文本可以根据日期和时间等而变化
我想要的是把一个代码放在一起的地方:在4个数字部分之间转换成时间格式。这样我就可以计算轮班时间等。
这样我就能得到这个“周六22:00-周日07:00”
不知道从哪里开始。

0s0u357o

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,如果没有,你应用的功能。

kzmpq1sx

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。第一次没有成功,但一定是打错了。

z9zf31ra

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)
bxjv4tth

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

相关问题