首页 > 解决方案 > 具有两个值的单个单元格的小时计算器

问题描述

我正在创建一个新的轮班表。(我是一家酒吧的团队负责人,但我通常处理技术问题)。

我想将小时数计算为总计。困难的一点是用户在一个单元格中输入小时如下。

1100 - 1600

我需要让 Excel 适合用户。

我想要的是从单元格中获取信息,将其分成两部分,然后计算小时数,将它们添加到运行总数中,然后在每个人的一周结束时将其放入一个单元格中。

我有 Python 的基本知识。我从 Stack Overflow 打开了大约 3000 个标签,但找不到任何对我有用的东西。

标签: excelvba

解决方案


应先进行将文本数据更改为时间数据的过程。然后你只需要计算两者之间的差异并将它们相加即可。您可以使用拆分功能和时间序列功能。

Sub test()
    Dim rngDB As Range
    Dim vDB As Variant, vR() As Variant
    Dim vSplit As Variant
    Dim Ws As Worksheet
    Dim i As Long, r As Long
    Dim s1 As String, s2 As String
    
    
    Set Ws = ActiveSheet 'set worksheet, set Ws = Sheets(1)
    With Ws
        Set rngDB = .Range("a1", .Range("a" & Rows.Count).End(xlUp)) ' set data range
    End With
    
    vDB = rngDB 'get value from range to 2D array
    r = UBound(vDB, 1)
    ReDim vR(1 To r, 1 To 3) 'make new 2D array
    For i = 1 To r
        vSplit = Split(vDB(i, 1), "-")
        
        s1 = Trim(vSplit(0)) '1100
        s2 = Trim(vSplit(1)) '1600
        
        vR(i, 1) = TimeSerial(Left(s1, 2), Right(s1, 2), 0) '11:00
        vR(i, 2) = TimeSerial(Left(s2, 2), Right(s2, 2), 0) '16:00
        vR(i, 3) = vR(i, 2) - vR(i, 1) '16:00 - 11:00
    Next i
    
    'Wirte  Result array vR to Sheet cell "c1"
    With Ws
        With .Range("c1").Resize(r, 3)
            .Value = vR
            .NumberFormatLocal = "hh:mm"
        End With
    End With
End Sub

工作表图像

在此处输入图像描述


推荐阅读