Arrays Excel,VB-使用DateAdd()从日期中减去天数 问题

Arrays Excel,VB-使用DateAdd()从日期中减去天数 问题,arrays,date,excel,dateadd,vba,Arrays,Date,Excel,Dateadd,Vba,我希望从工作表中的日期字段中减去数组中存储的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 代码 Excel中的日期存储为自固定

我希望从工作表中的日期字段中减去数组中存储的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 
代码
Excel中的日期存储为自固定日期起的天数。您可以直接在工作表中从A列中减去B列。不需要VBA。只需将结果格式化为日期。

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

虽然您的代码没有显示它,但我怀疑数组被视为一个整数,并且您在代码中有
错误恢复下一个

由于日期对于整数来说太大,因此信息不会被替换

试试这个,看看效果如何

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

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

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

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
由于日期对于整数来说太大,因此信息不会被替换

试试这个,看看效果如何

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

错误(非)处理就绪后,您将得到
0
的结果。如果没有错误处理,excel会停止在
i=Now()
处,并出现溢出错误Tim的代码实际上是基于A.Webb的第一条注释的概念

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
给定日期、天数分别在A、B列中,您可以将答案输出到C列。实际上,您可以将A列和B列读取到一个二维数组或两个一维数组中,使用一个命名单元格作为所有需要交互的单元格的参考点。这将允许一些细胞独立/动态过程。同样,您的问题似乎很小-除非您必须处理来自某些供应商的Excel加载项,这些供应商可能会对Excel中的数据/日期格式产生一些奇怪的影响。我不建议你有一个UDF。因为这是一个大操作流程的一部分,所以您可以将其包装在一个数据操作类/模块下,在该类/模块中,您可以对所有小而重要的数据进行“按摩”。同时,希望您在处理大型工作簿中的日期时注意工作表的性能

极轻微的建议:

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

Tim的代码实际上是基于A.Webb的第一条评论的概念

给定日期、天数分别在A、B列中,您可以将答案输出到C列。实际上,您可以将A列和B列读取到一个二维数组或两个一维数组中,使用一个命名单元格作为所有需要交互的单元格的参考点。这将允许一些细胞独立/动态过程。同样,您的问题似乎很小-除非您必须处理来自某些供应商的Excel加载项,这些供应商可能会对Excel中的数据/日期格式产生一些奇怪的影响。我不建议你有一个UDF。因为这是一个大操作流程的一部分,所以您可以将其包装在一个数据操作类/模块下,在该类/模块中,您可以对所有小而重要的数据进行“按摩”。同时,希望您在处理大型工作簿中的日期时注意工作表的性能

极轻微的建议:

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

换句话说,在单元格
C2
中输入
=A2-B2
。将
C2
格式化为日期。复制下单元格。完成。韦伯,这只是更复杂操作的一小部分。这是在阵列内完成的,这一点至关重要。3位数字是在之前迭代数组时从字符串和许多其他步骤中提取出来的。这并没有改变这样一个事实,即您可以解析数字并进行减法。取绝对值并否定它似乎没有任何反作用。问题的标题和您发布的代码片段似乎与您遇到的实际问题无关,即如果输入不正确,代码的结果将是一个副本?请发布更多代码并澄清实际问题。换句话说,在单元格
C2
中输入
=A2-B2
。将
C2
格式化为日期。复制下单元格。完成。韦伯,这只是更复杂操作的一小部分。这是在阵列内完成的,这一点至关重要。3位数字是在之前迭代数组时从字符串和许多其他步骤中提取出来的。这并没有改变这样一个事实,即您可以解析数字并进行减法。取绝对值并否定它似乎没有任何反作用。问题的标题和您发布的代码片段似乎与您遇到的实际问题无关,即如果输入不正确,代码的结果将是一个副本?请发布更多代码并澄清真正的问题。