使用excel vba格式化单元格值为“MMMM”

时间:2016-01-24 11:21:44

标签: excel vba excel-vba

我有以下代码,我需要修改一些帮助。

Sub CopyDataBasedOnTimeRangeMonth()
Dim i, LastRow
Dim Cell As Range


LastRow = Sheets("OPA").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Sheet2").Range("A3:U500").ClearContents
For i = 2 To LastRow
If Sheets("OPA").Cells(i, "G").Value >= Range("U1") And Sheets("OPA").Cells(i, "G").Value < Range("AC1") Then
Sheets("OPA").Cells(i, "R").EntireRow.Copy Destination:=Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1)
End If
Next i
End Sub

对于“G”的计算,我想使用所计算值的“MMMM”格式。在excel公式中,我可以使用Text(“G12”,“MMMM”)之类的东西然后继续使用公式,但我不知道如何修改about代码只是为了使用仅月值“G”。

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

最好将[U1]作为日期,然后格式化为月

If Month(Sheets("OPA").Cells(i, "G")) >= Month(Range("U1"))

答案 1 :(得分:1)

您可以在下面看到代码的变体,它已使用Davesexcel(+1)提供的变体进行了更新,并且还有一些来自我方的更正,只是为了简化可读性:

1)绝对引用Range()替换为[]速记方法;
2)将Destination:=删除为过多,同时将目标范围替换为行,因为当您复制行时,目标应为行;
3)应用with (object)方法;
4)添加的变量类型,例如i替换为i&(意为i as long

Sub CopyDataBasedOnTimeRangeMonth()
    Dim i&, LastRow&, Cl As Range
    LastRow = Sheets("OPA").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Sheet2").[A3:U500].ClearContents
    With Sheets("OPA")
        For i = 2 To LastRow
            If Month(.Cells(i, "G")) >= Month(.[U1]) And _
               Month(.Cells(i, "G")) < Month(.[AC1]) Then
                .Rows(i).Copy Sheets("Sheet2").Rows(Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1)
            End If
        Next i
    End With
End Sub

测试,工作正常。

源:

enter image description here

目的地:

enter image description here