【问题标题】:Subtraction between to excel column using VBScript使用VBScript在Excel列之间进行减法
【发布时间】:2012-12-19 02:31:52
【问题描述】:

假设我有下面的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"

代码

  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

【问题讨论】:

  • 您为什么不想为此使用 Excel 公式? =B1-A1 并格式化为时间?
  • 我会用我的VBScript来做,excel没有机会在上面设置任何这样的公式。所有的列都是动态的,所以应该用脚本计算。
  • @TukaiRakshit 你提到你在这个问题上需要帮助。似乎有答案。请说明您还需要什么?
  • @bonCodigo 这里的答案只提供给静态工作表,用于由脚本填充数据的工作表,这样的功能我不能放在任何列上作为固定的,因此我需要一些东西可以总结运行时的所有持续时间!!
  • @bonCodigo 你告诉我或者给我一个代码,我可以通过它添加两个持续时间,它们是hh:mm:ss rest 我将设置。请给我任何快速的这种持续时间添加功能。

标签: excel vbscript vba


【解决方案1】:

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

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

它还会根据绝对寻址的正常复制规则调整公式。

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

【讨论】:

  • 是的,我同意。感谢您的更新。但请告诉我,结果列格式将如何选择为“hh:mm:ss”?
  • 对 NumberFormat 做同样的事情:Range("C1:C10").NumberFormat="[h]:mm:ss"(通过使用 [h],它最多允许 9999 小时,如果需要超过 1 天的时间很有用)
  • 现在我还有一个问题!
  • N列求和:=SUMPRODUCT((MOD(COLUMN( 你的范围 )-COLUMN(OFFSET( 你的范围 ,,,1,1)), N )=0) 你的范围 )。您应该可以使用COUNTA 找出填充了多少个单元格。
  • 持续时间列不连续,它们看起来像我的描述表只有一行。我想总结所有持续时间并将其保存到我的描述中的最后一列。
【解决方案2】:

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

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

【讨论】:

  • 我正在寻找一种解决方案,通过该解决方案我可以直接减去“ColB”-“ColA”并将其设置为“ColC”,而不需要处理行。操作应该是列级别,而不是行级别。
  • 是的,它仍然会遍历行。我认为不可能在列级别进行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
相关资源
最近更新 更多