Excel VBA使用公式创建新列

时间:2013-11-13 14:37:06

标签: excel vba excel-vba date

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

用户输入日期是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 个答案:

答案 0 :(得分:1)

  

Q1。现在,我可以在不将用户输入日期存储在特定单元格中的情况下完成此操作吗?我宁愿在公式中使用变量“x”,但它对我不起作用。我必须将用户输入存储在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。输入框也是接受日期的最差选择。您可能希望看到THIS

  

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

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