我还是vba的新手,正在编写一个宏来计算两列中两个日期之间的时间,使用dateDiff,然后在它旁边的单元格中打印差异。我也想使用do do empty
A列保存开始日期 B列保留结束日期 C栏将保留答案
我有一些有用的代码,但大部分都是为了理解宏的目标和需求而编写的。
Range("A2").Select
Do Until IsEmpty(ActiveCell)
For i = 2 To 25
date1 = ["A" & i]
date2 = ["B" & i]
answer = DateDiff("n", date1, date2)
"C" & i = answer
next i
Loop
我感谢任何帮助!
答案 0 :(得分:1)
有几件事:
一个。使用速记[]
:
[A1]
会有效但
i = 1
["A" & i]
不会。所以你必须使用。
Range("A" & i)
或者
Cells(i,1)
湾您的do循环不会更改ActiveCell。因此,如果A2中存在值
,它将永远不会结束℃。最好找到最后一行并使用FOR循环。有关查找最后一行的多种方法,请参阅此处:Error in finding last used cell in VBA
d。养成现在声明 EVERY Range对象的父级的习惯,即使它是ActiveSheet。
即始终声明每个变量,即使您将其声明为Variant。
Dim i as Long
Dim lastRow as long
Dim date1 as double
Dim Date2 as double
Dim answer as long
With ActiveSheet
lastRow = .Cells(.Rows.Count,1).End(xlUp).row
For i = 2 To lastRow
date1 = .Cells(i,1)
date2 = .Cells(i,2)
answer = DateDiff("n", date1, date2)
.Cells(i,3) = answer
next i
End With
答案 1 :(得分:0)
如果不知道约会格式的详细信息,并假设连续的数据,我会建议如下:
Dim LR as Long
LR=Cells(.Rows.Count, "A").End(xlUp).Row
Sheets("NAME").Range("C1:C"&LR).Formula="=B1-A1"
希望这有帮助!
根据斯科特的评论编辑。