1

我真的不知道这是否可能,但我正在尝试编写一个使用内置日期/时间函数进行计算并将其输出到单元格的 Excel 程序。它将使用下载的日期(位于 A 列)、数据输入的最后时间(B 的底行)和每个独立的数据输入时间(B 列)。

我希望每个单元格中的公式如下所示:: A2 - Time(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

对此的任何帮助将不胜感激!

谢谢!!

4

1 回答 1

0

VBA 比 Excel 具有更多的“内置功能”,因此在使用 VBA 时您实际上并不需要依赖 Excel 公式。但是,如果您无论如何都想这样做,则必须执行以下操作:

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

要从单元格中获取值:

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

您只需确保将 VBA 变量和写入单元格的字符串分开处理(使用 " 和 &,如上所示)并将给定单元格的值存储在正确类型的变量中(如果您依赖于string它适用于任何内容的类型)。

您的代码中的一些更正:

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

这只是您的代码的一个简单版本,向您展示了一些您不应该做的事情:您将范围与值混为一谈,没有考虑不同的类型,考虑到我什至无法理解的变量等等。

只需获取此代码,仔细分析,了解您做错了什么,并通过每次进行一些研究来逐步添加功能。想法很简单:

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

等等。

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

于 2013-07-15T14:14:19.380 回答