VBA程序中的数据/时间公式Excel

我真的不知道如果这是可能的,但我想写一个Excel程序,使用内置的date/时间函数进行计算,并将其输出到单元格。 它将使用下载date(位于列A),数据input的最后一次(B的底部行)和每个独立的数据input时间(列B)。

我想要在每个单元格中的公式如下所示:: A2 – 时间(0,0,(B_Last – B_Current)/ 1000)

我假设我会在某种循环中需要它。

我目前的代码看起来像这样::

Sub Bottom() Dim Count As Integer Dim i As Integer Dim Last As Double Set myRange = Columns("B:B") Last = Cells(Rows.Count, "B").End(xlUp) Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2") Count = Application.WorksheetFunction.CountA(myRange) For i = 1 To Count Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i) r2 = r1 - Time(0, 0, (Last - r2) / 1000) Next End Sub 

任何帮助,将不胜感激!

谢谢!!

VBA比Excel有更多的“内置function”,因此在使用VBA时,您并不需要依赖Excel公式。 但是如果你想这样做,你必须做这样的事情:

 Range("B" & i).Value = "=Time(0, 0, (" & Last - r2 & ") / 1000)" 

要从单元格中获取值:

 Dim cellVal As Date cellVal = Range("B" & i).Value 

你只需要确保VBAvariables和写入单元格的string是分开处理的(使用&和,如上所示),并且将给定单元格的值存储在正确types的variables中(如果你依赖于stringtypes,它将与任何内容一起工作)。

在你的代码中进行一些更正

 Sub Bottom() Dim Count As Integer Dim i As Integer Dim Last As Double Set myRange = Columns("B:B") Last = 10 'What you want here?? Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2") Dim r1Val As Long r1Val = r1.Value Count = Application.WorksheetFunction.CountA(myRange) For i = 1 To Count Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i) r2.Value = "=" & r1Val & " - Time(0, 0," & CStr(Last) & "/ 1000)" 'r2 = r1 - Time(0, 0, (Last - r2) / 1000) -> r2 = ... Last - r2 does not make any sense; r2 is a whole date and Last - r2 refers to a part of a date Next End Sub 

这只是代码的一个简单版本,向您展示了一些您不应该做的事情:您将范围与值混合在一起,不考虑不同的types,考虑我无法理解的variables等等。

只要拿这个代码,仔细分析一下,明白你做错了什么,不断地增加function,每次都要做一些研究。 这个想法很简单:

  • 您可以根据需要设置任意数量的单元格作为范围。
  • 范围可以有不同的内容(通过range.Value); 这些内容与VBA中的variables相关联,该variables必须具有相同的types(string适用于任何内容)。
  • 当你写一个单元格的时候,你会写出整个文本(如果你把“=”放在前面,Excel会将它理解为一个公式)。
  • 当你从单元格中读取数据时,你会得到最终的值(如果适用的话,从公式中得到)。

等等。

我build议你做一些研究,比现在更习惯VBA。