Excel VBA用公式创build一个新列

我有一个具有date数据的列的Excel文件。 我希望用户input他们select的date,然后我想创build一个新的列,列出两个date之间的天差异。 我有的macros正在工作,但我有几个问题,我想把它做得更好。 链接到MWE小数据文件在这里 。

用户inputdate是9/30/2013,我存储在H20中

macros:

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. 现在,我可以做到这一点,而不是将用户inputdate存储在特定的单元格中吗? 我宁愿在公式中使用variables“x”,但它不适合我。 我必须将用户input存储在H20中,然后使用$ H $ 20。

  2. 函数Dateif和过程DateDiff有什么区别? 我能够使用我的macros中的程序DateDiff,但我不知道如何使用它来填写我的专栏。 一种方法比另一种更好吗?

  3. 有没有更好的方法来添加列到现有的工作表,其中列包括一些涉及工作表上的现有数据和一些用户input的计算? 我接下来要做很多更复杂的计算。

谢谢

Q1。 现在,我可以做到这一点,而不是将用户inputdate存储在特定的单元格中吗? 我宁愿在公式中使用variables“x”,但它不适合我。 我必须将用户input存储在H20中,然后使用$ H $ 20。

试试这个(UNTESTED)

更换

 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 。 另外Inputbox是接受date的最糟糕的select。 你可能想看到这个

Q2。 函数Dateif和过程DateDiff有什么区别? 我能够使用我的macros中的程序DateDiff,但我不知道如何使用它来填写我的专栏。 一种方法比另一种更好吗?

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