在Excel VBA中的If语句中使用MONTH

时间:2016-03-27 06:04:57

标签: excel vba excel-vba

我正在尝试编写一个Excel宏,它将查看A列中的日期并打印列F中列出的每个月。我正在尝试使用for循环和If / Else语句,但我似乎无法让它正常运作。

y = 2

Range("F2").Formula = "=MONTH(A3)"

For x = 4 To RowLast - 1
    If Range("A" & x).Month = Range("F" & y) Then
    Else
        y = y + 1
        Range("F" & y).Formula = "=MONTH(A" & x & ")"
    End If
Next

这就是我到目前为止所做的,它应该将Cell A3中发现的第一个月打印到Cell F2(有效),然后每隔一个日期打印一次直到它击中最后一行。 if语句应该检查以确保它是一个新月,如果它打印月份到F列中的下一个单元格。

如果您有任何疑问,请与我们联系。谢谢。

3 个答案:

答案 0 :(得分:0)

我认为你的if语句导致了问题。如果你只打印这个月,你甚至需要一个if语句吗?

答案 1 :(得分:0)

RowLast = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

y = 2

Range("F2").Formula = "=MONTH(A3)"

For x = 4 To RowLast - 1
    Range("Z2").Formula = "=MONTH(A" & x & ")"
    If Range("Z2").Value = Range("F" & y).Value Then
    Else
        y = y + 1
        Range("F" & y).Formula = "=MONTH(A" & x & ")"
    End If
Next

答案 2 :(得分:0)

要回答您的具体问题:ListView是一个函数,它返回与date参数的月份相对应的整数。例如,VIEW.VISIBLE将返回3。

Month(date)不是。Month(Now)对象的属性,因此您的代码会抛出错误("对象不支持此属性或方法")。下面的代码显示了如何以您希望的方式使用.Month函数。

但是,您的代码提出了一个更广泛的问题。您是否仅仅使用VBA来自动化您的公式写作?如果你是,那么一切都很好。但实际上,VBA可能会更好地为您提供服务吗?例如,您是否有理由使用VBA识别目标月份,仅通过Excel公式将这些目标月份写入工作表?

我提到它是因为最近有很多帖子将其范围限制在如何自动化Excel功能(可能是录制宏的结果),而VBA可能比他们的想象力更强大。

无论如何,这是同一个任务的两个非常相似的版本:第一个写公式,第二个写月。我希望它会引起一些关于哪种自动化类型适合您需求的想法:

编写公式的代码:

Range

将月份写为整数的代码:

Month()