【问题标题】:Setting Cell Value Based On Date Excel VBA根据日期Excel VBA设置单元格值
【发布时间】:2015-02-05 16:41:09
【问题描述】:

当宏在任何给定日期运行时,它应该检查当前日期并将其与一年中的不同季度进行比较,然后根据我们所处的季度更改某些单元格的值。

这是我目前正在尝试追加到当前宏末尾的内容:

Sub Dates()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim mgr, rsk As Range
    Dim d, Q1B, Q1E, Q2B, Q2E, Q3B, Q3E, Q4B, Q4E As Date

    Set wb = ActiveWorkbook
    Set ws = wb.Sheets("Mutual")
    Set mgr = ws.Range("B37")
    Set rsk = ws.Range("F37")

    d = Date
    Q1B = DateValue("01/01/2015")
    Q1E = DateValue("03/31/2015")
    Q2B = DateValue("04/01/2015")
    Q2E = DateValue("06/30/2015")
    Q3B = DateValue("07/01/2015")
    Q3E = DateValue("09/30/2015")
    Q4B = DateValue("10/01/2015")
    Q4E = DateValue("12/31/2015")

    If d <= Q1E Then
        mgr.Value = "Works 1"
        rsk.Value = "Works 2"
    End If


End Sub

我在正确的道路上吗?我确信有一种更优雅的方式来编写它,但这是我第一次编写自己的 VBA 代码。

【问题讨论】:

  • 请注意:只有Q4E 在您的代码中声明为Date,该行上的所有其他变量都是Variant。 VBA 不支持这样的声明。
  • 所以我必须将它们全部声明为日期?或者在每个语句前面使用 Set 会不会起作用?
  • 是的,您必须将它们全部声明为日期,但您仍然可以在一行中完成。

标签: excel vba date comparison


【解决方案1】:

不需要宏,试试这个公式

=IF(COUNTA(A2)=1,"Q"&INT((MONTH(A2)/3.25)+1)&" - "&YEAR(A2),"")

其中 A2 是包含日期的单元格

【讨论】:

  • 这能改变每季度的单元格值吗?我使用宏的原因是因为单元格值每个季度都会改变。我的示例只填写了一个季度,但它会为两个单元格的每个季度写入不同的值。
  • 我不认为我理解您的评论。你能详细说明一下吗
  • 抱歉,我希望每个季度的单元格显示不同的内容。据我了解,一旦完成比较,单元格中的 IF 公式将给出真假陈述。这只会给我两个展示的东西,而不是每个季度展示四个。
  • 我的公式将根据A2中的值返回季度和年份,例如如果A2 = 12/12/2014,公式将返回Q4 - 2014
猜你喜欢
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多