在vba excel中将数字拆分为时间块格式

在vba excel中将数字拆分为时间块格式,excel,vba,Excel,Vba,我有这样的问题 0 500 100 1.8 500 800 50 1.6 800 2300 125 3.2 *我想要下面给出的格式(将数字拆分为时间块格式):* 00:00 05:00 -50 1800 00:00 05:00 -50 1800 05:00 08:00 -50 1600 08:00 23:00 -50 3200 08:00 23:00 -50 3200 08:00 23:00 -25 3200 代码如下所

我有这样的问题

0    500   100   1.8
500  800   50    1.6
800  2300  125   3.2
*我想要下面给出的格式(将数字拆分为时间块格式):*

00:00  05:00  -50  1800
00:00  05:00  -50  1800
05:00  08:00  -50  1600

08:00  23:00  -50  3200
08:00  23:00  -50  3200
08:00  23:00  -25  3200
代码如下所示:

Option Explicit

Sub main()
    Dim data As Variant
    Dim iData As Long, datum As Long, iRow As Long
    On Error Resume Next
    With Range("A2", Cells(Rows.Count, 1).End(xlUp))
        data = .Resize(, 4).Value
        iData = LBound(data)
        Do
            datum = data(iData, UBound(data, 2) - 1)
            Do While datum > 0
                iRow = iRow + 1
                .Cells(iRow).Resize(, 4) = Application.Index(data, iData, 0)
                .Cells(iRow).Offset(, 3).Value = .Cells(iRow).Offset(, 3).Value * 1000
                .Cells(iRow, UBound(data, 2) - 1).Value = -WorksheetFunction.Min(50, datum)
                datum = datum - 50
            Loop
            iData = iData + 1
        Loop While iData <= UBound(data)
        .Resize(1, 4).Copy
        .Resize(iRow, 4).PasteSpecial xlPasteFormats
        Application.CutCopyMode = False
    End With
End Sub
选项显式
副标题()
作为变量的Dim数据
尺寸和长度一样,基准面和长度一样,iRow和长度一样
出错时继续下一步
带范围(“A2”,单元格(行数,1)。结束(xlUp))
数据=.Resize(,4).Value
iData=LBound(数据)
做
数据=数据(iData,UBound(数据,2)-1)
当基准面>0时执行此操作
iRow=iRow+1
.Cells(iRow).Resize(,4)=应用程序.Index(数据,iData,0)
.Cells(iRow).Offset(,3).Value=.Cells(iRow).Offset(,3).Value*1000
.Cells(iRow,UBound(数据,2)-1).Value=-WorksheetFunction.Min(50,基准)
基准=基准-50
环
iData=iData+1

循环而iData抱歉,我没有看到excel不提供自己的方法将字符串转换为日期时间,但您可以这样做:

将第一行写入列的步骤

private Sub getColStr(in as String) as string
    return in(0)+in(1)+":"+in(2)+in(3)
End Sub

最后两列应该很简单。

请将您的代码放入
code
标记中,并在需要时从新行开始。这很难理解。另外,我真的看不到输入和输出之间的关系,
500
变成
05:00
100
变成
-50
?您使用的是vb.net(作为vsto加载项)还是excel vba?先生,我使用的是excel vba,这是输入为500,输出应为05:00的要求。您当前的代码有哪些问题?什么错误?现在输出是什么?我无法找到此时间格式的逻辑。请帮助。如果您将要写入的时间转换为DateTime对象,则可以使用此方法: