【问题标题】:Split the numbers into time block format in vba excel在vba excel中将数字拆分为时间块格式
【发布时间】:2017-02-22 18:42:32
【问题描述】:

我有问题,像这样

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

任何帮助将不胜感激。

【问题讨论】:

  • 请将您的代码放在code 标签中,并在需要时在新行开始。这很难阅读。另外,我并没有真正看到您的输入和输出之间的关系,500 变为 05:00100 变为 -50?你使用 vb.net(作为 vsto 插件)还是 excel vba?
  • 先生,我正在使用 excel vba,这是输入为 500 且输出应为 05:00 的要求
  • 您当前的代码有什么问题?什么错误?现在的输出是什么?
  • 我找不到这种时间格式的逻辑请帮忙..
  • 如果您将要写入的时间转换为 DateTime 对象,则可以使用这种方法:stackoverflow.com/questions/5457069/…

标签: excel vba


【解决方案1】:

对不起,我没有看到excel没有提供它自己的将字符串转换为日期时间的方法,但是你可以这样做:

将第一个写入列

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

最后两列应该很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多