[VBA]如何删除列末尾的所有无用0

时间:2017-09-13 19:13:40

标签: vba

我的目的是找出每一行之间的时间差距。它应该1秒钟1秒,但你会看到,直到11:40,有一个大的。例如,时间A3-A2 = B1。我已经解决了这个问题,我的代码如下。

它运行正常,但在B列的末尾,有一个很长的00:00:00列表。我想将列B的最后一个数字与列A匹配,这意味着列B和A应该具有相同的长度。最终00:00:00成千上万。

Sub CalculateTimeGap()  

Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Value = "Time"

Columns("A:A").NumberFormat = "hh:mm:ss"
Columns("B:B").Formula = "=A2-A1"
Range("B1").Value = "Time Difference(s)"
Columns("B:B").NumberFormat = "hh:mm:ss"

lRow = Cells(Rows.Count, 1).End(xlUp).Row
End Sub


Time      Time Difference(s)
11:28:37    00:00:01
11:28:38    00:00:01
11:28:39    00:00:01
11:28:40    00:11:35
11:40:15    00:00:01
11:40:16    00:00:01
11:40:17    00:00:01
11:40:18    00:00:01
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00
            00:00:00

我尝试在里面添加代码来删除00:00:00,但它没有用。

If Range("B").Value = "00:00:00" Then
    'Range("B").Value.Delete
End If

2 个答案:

答案 0 :(得分:0)

我认为在这里使用循环会更好

 dim LR,i as double
     LR=application.count(range("A:A"))
    for i=1 to lr step 1
     cells(i,2).value=cells(i+1,1).value-cells(i,1).value
    next i

并保留代码的替代方法是:

Sub CalculateTimeGap()  

Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Value = "Time"
 dim LR as variant
 LR=application.count(range("A:A"))
Columns("A:A").NumberFormat = "hh:mm:ss"
Columns("B2:B"&LR).Formula = "=A2-A1"
Range("B1").Value = "Time Difference(s)"
Columns("B:B").NumberFormat = "hh:mm:ss"

lRow = Cells(Rows.Count, 1).End(xlUp).Row
End Sub

答案 1 :(得分:0)

您可以在B列中使用公式,而不是使用VBA

假设您的示例中的表位于A1,将=IF(ISBLANK(A3),"",A3-A2)放在B2中并按照您的意愿向下复制