VBA - 计算并打印许多行的答案

时间:2017-06-08 16:21:40

标签: excel-vba vba excel

我还是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

我感谢任何帮助!

2 个答案:

答案 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"

希望这有帮助!

根据斯科特的评论编辑。