1

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

用户输入的日期是 2013 年 9 月 30 日,我存储在 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. 有没有更好的方法向现有工作表添加列,其中列包括一些涉及工作表上现有数据和一些用户输入的计算?接下来我要做大量更复杂的计算。

谢谢

4

1 回答 1

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. 输入框也是接受日期的最差选择。你可能想看这个

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

DATEDIF 是一个工作表函数,而 DateDiff 是一个 VBA 函数。

于 2013-11-13T15:51:48.210 回答