如何根据月份检查单元格的范围/列并复制它们

时间:2014-11-17 13:16:46

标签: excel vba date copy range

基本上,我正在尝试做的是:

------A--------B-------C-------D------
1  Date       Weight   Misc     ID*
2  2014-06-12 210              445556
3  2014-07-13 150              546456
4  2014-08-14 265              546456 
5  2014-09-15 655              655654
6  2014-10-16 87               546656
7  2014-10-17 1552             545488
8  2014-11-18 225              546545

我有一个按钮,我希望它运行一个宏来检查A列中的日期是否属于当前月份。我尝试过使用

Month(Date)

但它会检查整个日期,而不是仅检查月份。

如果colmumn A中单元格中的月份等于当前月份,我希望它复制与该特定单元格对应的整行信息。例如:当前月份是11月时,我希望它复制A8 + B8 + C8 + D8,然后我将该信息粘贴到一个完整的不同工作簿中。

请记住,我对VBA完全不熟悉,但这是我到目前为止所提出的:

Sub dat()
Dim rng As Range
Dim dat As Date
dat = Month(Date)
For Each rng In Range("A2:A100")
If rng.Value = dat Then
Range("???").Copy
Range("A1").PasteSpecial
End If
Next
End Sub

什么都没发生。如果我将其更改为dat=Date,则它仅适用于此特定日期,并且需要永久运行1000个单元格。

我在想是否可以某种方式使用Cells(Rows.Count, "A").End(xlUp).Value = Month(Date)。这甚至可能吗?

编辑:要粘贴到其他工作簿中,我使用了以下命令:

Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\....DOCUMENT.xlsm")

然后粘贴:

wb.Sheets("Sheet1").Range("A" & NextDest & ":F" & NextDest).PasteSpecial

2 个答案:

答案 0 :(得分:0)

只需将“目标表”更改为您要复制到的工作表的名称。

Sub dat()
    Dim LastRow As Long
    Dim CurRow As Long
    Dim NextDest As Long
    Dim ws As Worksheet

    Set ws = Sheets("SOURCE SHEET")
    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

    For CurRow = 2 To LastRow
        If IsDate(ws.Range("A" & CurRow).Value) = True Then
            If Month(ws.Range("A" & CurRow).Value) = Month(Date) Then
                ws.Range("A" & CurRow & ":D" & CurRow).Copy
                NextDest = Sheets("DESTINATION SHEET").Range("A" & Rows.Count).End(xlUp).Row + 1
                Sheets("DESTINATION SHEET").Range("A" & NextDest & ":D" & NextDest).PasteSpecial
                Else
            End If
        Else
            ws.Cells(CurRow, 1).Interior.Color = RGB(255,0,0)
        End If
    Next CurRow
End Sub

编辑:您的DESTINATION SHEET现在将在最后一次使用的行之后添加行。此外,代码将检查该值是否为日期,如果不是日期则会突出显示。

答案 1 :(得分:0)

更改此

       If rng.Value = dat Then

     If month(rng.Value) = dat Then