【问题标题】:Excel VBA creating a new column with formulaExcel VBA用公式创建一个新列
【发布时间】:2013-11-13 14:37:06
【问题描述】:

我有一个 excel 文件,其中有一列包含日期数据。我希望用户输入他们选择的日期,然后我想创建一个新列,列出两个日期之间的天数差异。我拥有的宏正在工作,但我有几个问题,我想让它变得更好。 MWE小数据文件的链接是here

用户输入的日期是 9/30/2013,我存储在 H20 中

宏:

Sub Date_play()
    Dim x As Date
    Dim x2 As Date
    Dim y As Variant

    x = InputBox(Prompt:="Please enter the Folder Report Date. The following formats are acceptable: 4 1 2013 or April 1 2013 or 4/1/2013")

    x2 = Range("E2")

    y = DateDiff("D", x2, x)
    MsgBox y  

    'Used DateDiff above and it works but I don't know how to use it to fill a column or indeed a cell.

    Range("H20").FormulaR1C1 = x
    Range("H1").FormulaR1C1 = "Diff"
    Range("H2").Formula = "=DATEDIF(E2,$H$20,""D"")"
    Range("H2").AutoFill Destination:=Range("H2:H17")
    Range("H2:H17").Select

End Sub
  1. 现在,我可以在不将用户输入日期存储在特定单元格中的情况下完成此操作吗?我更愿意在公式中使用变量“x”,但它对我不起作用。我必须将用户输入存储在 H20 中,然后使用 $H$20。

  2. 函数Datedif和过程DateDiff有什么区别?我可以在我的宏中使用 DateDiff 过程,但我不知道如何使用它来填写我的列。一种方法比另一种更好吗?

  3. 是否有更好的方法向现有工作表添加列,其中列包括一些涉及工作表上现有数据和一些用户输入的计算?接下来我要进行大量更复杂的计算。

谢谢

【问题讨论】:

  • 当您尝试在公式中使用x 时遇到什么错误?
  • 在 H20 中,您要求的不是公式,而是一个简单的日期,所以最好使用 [H20] = x ... [H1] 也是如此
  • @ARich 当我在公式中使用 x 时,我没有收到错误消息,我只收到 #NAME?在列中。当我执行跟踪错误时,我遇到了无效名称错误。
  • 我没听懂你的第三个问题。
  • @SiddharthRout 让我再问一个问题。我正在尝试在新创建的行中进行稍微复杂的计算。

标签: vba excel date


【解决方案1】:

Q1. 现在,我是否可以在不将用户输入日期存储在特定单元格中的情况下完成此操作?我更愿意在公式中使用变量“x”,但它对我不起作用。我必须将用户输入存储在 H20 中,然后使用 $H$20。

试试这个(未测试)

替换

Range("H20").FormulaR1C1 = x
Range("H1").FormulaR1C1 = "Diff"
Range("H2").Formula = "=DATEDIF(E2,$H$20,""D"")"
Range("H2").AutoFill Destination:=Range("H2:H17")
Range("H2:H17").Select

通过

Range("H2:H17").Formula = "=DATEDIF(E2," & datevalue(x) & ",""D"")"

上面将一次性用公式填充所有单元格。您不需要Autofill to do the job。输入框也是接受日期的最差选择。你可能想看看THIS

Q2.函数Datedif和过程DateDiff有什么区别?我可以在我的宏中使用 DateDiff 过程,但我不知道如何使用它来填写我的列。一种方法比另一种更好吗?

DATEDIF 是工作表函数,DateDiff 是 VBA 函数。

【讨论】:

  • 嗨,悉达多,datevalue(x) 不起作用。我得到#NUM!在单元格中,如果我的 x 是 8/25/13,则单元格的公式为 =DATEDIF(E2, 8/25/13,"D")
  • 我刚刚测试了它,它工作得很好。如果将 x 设为“25/8/13”会发生什么?
  • 如果我在 InputBox 中接受 x 作为“13 年 8 月 25 日”,那么我会得到不匹配,因为我有 DIM x 作为日期。如果我将 x 更改为字符串,然后在 InputBox 中将 x 接受为“8/25/13”,那么我会收到一个错误和 #NUM!在单元格中。
  • 对我来说是双向的。您是否在我的答案中看到有关如何接受日期的链接?
  • 我完全错过了链接。我会检查并回复。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2018-06-14
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多