我希望从工作表中的日期字段中减去存储在数组中的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
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
答案 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)
鉴于,您的日期,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