使用VBScript在excel列之间减去

时间:2012-12-18 06:02:15

标签: excel-vba vbscript vba excel

假设我有以下excel表,我需要找到它们之间的区别,结果需要回到另一列:

      ColA                      ColB                    ColC

9/3/2012  8:31:59 AM      09/17/2012  6:45:56 PM        Result
9/4/2012  8:31:59 AM      10/17/2012  6:45:56 PM        Result

我是使用Loop和Row-By-Row技术完成的。寻找一种方法,如果它可以通过列级减法直接完成。说ColB-ColA - > COLC。整个操作应该一次进行。结果应该来 “hh:mm:ss”

CODE

  IntRow4=2
  Do While objSheet4.Cells(IntRow4,1).Value <> ""

    If objSheet4.Cells(IntRow4,9).Value <> "Open" Then

       Date1=objSheet4.Cells(IntRow4,7).Value
       Date2=objSheet4.Cells(IntRow4,8).Value
       objSheet4.Cells(IntRow4,11)=TimeSpan(Date1,Date2)

   End If

  IntRow4=IntRow4+1
  Loop

更新

      ColA1    ColB1      ColC1       ColA2    ColB2     ColC2   .....   ColAN    ColBN    ColCN    TotaltimeDurtion
      Date     Date     11:25:20      Date     Date     10:25:00          Date    Date     11:25:20      ?

这里我只显示了一行,但是可以有多行或N行。我需要做的是,我想添加持续时间并将它们放到最后一列中“ TotaltimeDurtion“。但是最后一列无法修复。每行的所有列都不应该是必需值,但是所有列都不会是空的。我们也可以在列级别执行此操作。其中持续时间为hh:mm: ss格式或根据您的指示[h]:mm:ss。 TotaltimeDurtion&lt; - ColC1 + ColC2 + ... + ColCN。

2 个答案:

答案 0 :(得分:2)

使用范围对象,我可以一次在范围内的所有单元格上设置公式

range("C1:C10").Formula="=B1-A1"

它还将根据正常复制riles调整公式以进行绝对寻址。

e.g。在上面的示例中,C10将为=B10-A10。如果我把公式设为“= B1- $ A $ 1”那么C10就是=B10-$A$1

答案 1 :(得分:0)

您可以从另一个中减去一个日期,然后设置单元格的格式:

'Within the Do..While loop
Dim cell
Set cell = objSheet4.Cells(intRow4,11)
cell.Value = Date2 - Date1
cell.NumberFormat = "hh:mm:ss"