如何:
Sub loop_through_WS()
Dim rw As Long, i As Long, lastRow As Long, compLastRow&
Dim cel As Range
Dim mainWS As Worksheet, ws As Worksheet
Dim sheetArray() As Variant
sheetArray() = Array("Mon", "Tues", "Weds", "Thurs", "Fri", "Sat", "Sun")
Set mainWS = Sheets("Completed")
compLastRow = mainWS.Cells(mainWS.Rows.Count, 1).End(xlUp).row
For i = LBound(sheetArray) To UBound(sheetArray)
With Sheets(sheetArray(i))
lastRow = .Cells(.Rows.Count, 5).End(xlUp).row
For Each cel In .Range("E1:E" & lastRow)
rw = cel.row
If cel.Value = "No" Then
cel.EntireRow.copy
mainWS.Range("A" & compLastRow).pasteSpecial
compLastRow = mainWS.Cells(mainWS.Rows.Count, 1).End(xlUp).row + 1
End If
Next
End With
Next i
Application.CutCopyMode = False
End Sub
它基本上使用你給的代碼,但我增加了工作循環(它會通過每一天的工作表的循環)並粘貼到回「已完成」WS。
看看你是否可以弄清楚我是如何在工作表中循環的 - 我經常使用這種類型的東西,所以如果你正在做這些事情,這將是一件好事。它還允許您在工作簿中添加另一個工作表(比如說「週末」),並且您只需在陣列中的「Sun」之後添加「週末」。這是您需要添加它的唯一地方。
需要注意的是,我將for each Cell in Range(E:E)
從E1
更改爲列E中的最後一行,這使得宏運行速度更快。
編輯:正如我在上面的評論中提到的,通常不建議使用Cell
作爲變量名稱。 (同去的Column
,,Range
等),因爲這些都意味着專門VBA東西(即Cell([row],[column])
。相反,正如你看到的,我喜歡用cel
或rng
或iCell
等。
快速註釋 - 不建議使用名稱爲「Cell」的變量,因爲「Cell」表示特定於VB。我喜歡用'cel'代替。另外,您正在搜索*整個E列中的每個*單元格爲「否」?這將需要一段時間。這是絕對必要的,還是我們可以看看最後一排? – BruceWayne