Excel,VBA - 使用DateAdd()从日期减去天数

时间:2012-11-07 19:36:45

标签: arrays date excel-vba dateadd vba

ISSUE

我希望从工作表中的日期字段中减去存储在数组中的1到3位数字。我取数字的绝对值,乘以负数1,然后使用DateAdd函数执行操作。我没有收到任何错误消息,但数组值仍然是最初通过该进程发送的确切的1到3位数字。

实施例

C列是我目前的结果给我的。

        A        B        C
1  1/8/09       54       54
2  3/3/11        1        1
3  8/1/10      132      132 

CODE

If delType = "Numeric" Then
    ElseIf delChars = 3 Or delChars = 2 Or delChars = 1 Then
         del(i, 1) = Abs(del(i, 1))
         del(i, 1) = del(i, 1) * -1
         del(i, 1) = DateAdd("d", del(i, 1), Range("E" & i + 1))
         'I did confirm that this case is actually working 
         'by setting the above line to del(i,1) = "Digits" and
         'received "Digits" for all entries with 1 to 3 numeric digits.
    End If
End If

4 个答案:

答案 0 :(得分:1)

Excel中的日期存储为固定日期以来的天数。您可以直接在工作表中从A列中减去B列。不需要VBA。只需将结果格式化为日期。

答案 1 :(得分:1)

虽然您的代码没有显示,但我怀疑该数组被视为整数,并且代码中有On Error Resume Next

由于日期对于整数而言太大,因此信息不会被替换。

试试看效果

Sub test()
On Error Resume Next
Dim i As Integer
i = Now()
Debug.Print i
End Sub

错误(非)处理到位后,您得到0的结果。如果没有错误处理,excel会在i=Now()停止并出现溢出错误

答案 2 :(得分:1)

Sub Tester()

    Dim arr, x

    arr = Range("A1:A3").Value 'values to be subtracted


    For x = 1 To UBound(arr, 1)
        ' "base" date is in A5
        arr(x, 1) = Range("A5").Value - Abs(arr(x, 1))
    Next x

    With Range("D1:D3")
        .NumberFormat = "m/d/yyyy"
        .Value = arr 'dump values back to sheet
    End With

End Sub

答案 3 :(得分:1)

蒂姆的代码实际上是基于A.Webb的第一个评论的概念。

鉴于,您的日期,DAYS分别位于A,B列,您可以将答案输出到C列。您可以将A列和B列同时读入一个2-D阵列或两个1-D阵列,使用1命名单元格作为您需要交互的所有单元格的参考点。这将允许一些细胞独立/动态过程。同样,您的问题似乎相当小 - 除非您必须处理来自某些供应商的Excel加载项,这些加载项会对Excel中的数据/ DATES格式产生一些影响。我不建议你为你准备一个UDF。由于这是BIG操作流程的一部分,因此您可以将其包装在数据操作类/模块下,您可以在其中执行所有小而重要的数据"按摩"。还希望在大型工作簿中使用DATES时,要注意表单的性能。

非常小的建议:

arr(x, 1) = Abs(arr(x, 1)) - Range("B1").Offset(x - 1, 0).Value