所以本质上,我想做的是:
------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)
但它会检查整个日期,而不仅仅是月份。
如果列 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
最佳答案
只需将“目标表”更改为要复制到的表的名称。
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 现在将在最后使用的行之后添加行。此外,代码将首先检查该值是否为日期,如果不是日期,则突出显示。
关于excel - 如何根据月份检查单元格的范围/列并复制它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973594/