【问题标题】:Increment date column by VBA excelVBA excel增加日期列
【发布时间】:2020-04-05 21:41:16
【问题描述】:

如果我在 excel 中有以下格式的列: “dd/mm/yyyy hh:mm:ss”,我想将小时值增加 1。 我将 1/24 添加到该单元格并完成。

我的问题是我需要此更正的文件有大约 15000 行,操作大约需要 2 分钟。 我使用的代码是:

Set rngSel = .Range("A2:A10000")
  For Each cell In rngSel
       cell.Value = cell.Value + dif / 24
    Next cell

是否有可能以某种方式更快地做到这一点?

【问题讨论】:

  • 将范围读取到 Variant 数组并在内存中进行数学运算,然后在最后写回工作表。

标签: excel vba date increment


【解决方案1】:

你可以试试:

Option Explicit

Sub test()

    Dim arr As Variant
    Dim Initial_DateTime As Date
    Dim i As Long

    With ThisWorkbook.Worksheets("Sheet1")

        arr = .Range("A2:A10000")

        For i = LBound(arr) To UBound(arr)

            Initial_DateTime = arr(i, 1)

            arr(i, 1) = DateAdd("h", 1, Initial_DateTime)

        Next i

        .Range("A2:A1000").Value = arr

    End With

End Sub

【讨论】:

    【解决方案2】:

    如 cmets 中所述,将范围加载到矩阵中并处理内存中日期的增量要快得多。我在您的代码的基础上构建了以下示例。

    Sub IncrementDateColumnByVBA()
        Dim rngSel As Range
        Dim DateArray() As Variant
        Dim i As Long
        Dim dif As Byte
    
        dif = 1
    
        Set rngSel = ActiveSheet.Range("A2:A10")
    
        'Write range to a matrix
        DateArray = rngSel.Value
    
        'Loop matrix
        For i = LBound(DateArray) To UBound(DateArray)
            DateArray(i, 1) = DateArray(i, 1) + dif / 24
        Next i
    
        'Write matrix to worksheet
        rngSel.Value = DateArray
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 1970-01-01
      • 2019-02-19
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      相关资源
      最近更新 更多