Arrays Excel,VB-使用DateAdd()从日期中减去天数 问题
我希望从工作表中的日期字段中减去数组中存储的1到3位数字。我取这个数字的绝对值,乘以负1,然后使用DateAdd函数执行这个操作。我没有收到任何错误消息,但数组值仍然是最初通过进程发送的精确的1到3位数 例子 C列是我当前的结果给我的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中的日期存储为自固定
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位数字是在之前迭代数组时从字符串和许多其他步骤中提取出来的。这并没有改变这样一个事实,即您可以解析数字并进行减法。取绝对值并否定它似乎没有任何反作用。问题的标题和您发布的代码片段似乎与您遇到的实际问题无关,即如果输入不正确,代码的结果将是一个副本?请发布更多代码并澄清真正的问题。