如果单元格不是四个确定的值之一,则复制整行

编辑
这是回答问题的代码

Dim i As Integer For i = 1 To Sheet1.UsedRange.Rows.Count If Cells(i, "C") <> "Q" Then Sheet1.Rows(i).EntireRow.Copy Sheets("Sheet2").Cells(i, 1) End If Next 

EDIT2
我现在正面临一些小问题,搞清楚他们有什么问题是很好的。
1-这个代码是复制单元格,但问题是粘贴在另一个表格后,在整个地方都有空隙(它们是非复制单元格的地方)

 Dim i As Integer For i = 1 To Sheet1.UsedRange.Rows.Count If Cells(i, "P") <> "Q" Then Sheet1.Rows(i).EntireRow.Copy Sheets("Sheet2").Cells(i, 1) End If Next 

这个问题的解决方法是添加
.End(xlUp).Offset(1, 0)
在复制和粘贴之后。 我之前尝试过,但我用Offset(1),并没有工作

2 – 这个代码导致Excel挂起,我不得不强迫它closures,但是当我重新打开复制单元格在新表(我知道这个问题,我想这是因为Excel将检查所有单元格,因为它们是= 0,但我试图使用相同的循环,因为以前的代码,但我不断收到错误)

 Dim ro As Long For Each cell In Sheets("Sheet1").range("U:U") If (Len(cell.Value) = 0) Then ro = (ro + 1) Sheets("Sheet1").Rows(cell.Row).Copy Sheets("Sheet3").Rows(ro) End If Next 

#2的修补程序是添加一个for循环计数和包括它,我知道会解决它,但我有语法问题。 代码需要改变这一行:

 For Each cell In Sheets("Sheet1").range("U" & i) 

“我”是for循环,就像代码#1中的一样

这段代码将遍历列A中的所有行,并检查文本是否为Q,W或E.如果不是,则将复制该行。

 Sub Test() Dim i As Integer 'Loop to move through the rows For i = 1 To ActiveSheet.UsedRange.Rows.Count 'Checks if it contains Q, W or E If Cells(i, 1) <> "Q" And Cells(i, 1) <> "W" And Cells(i, 1) <> "E" Then 'Copy that row Rows(i).Copy 'You said you know how to do the copy part so I won't include the rest... Else 'Do something else End If Next End Sub 

下一次实际上是在寻求帮助之前尝试这个问题。 如果不那么简单,人们可能不会太多帮助。 这也是一个很快的谷歌或SOsearch了。

AutoFilter通过避免循环来快速完成此操作,并且可以避免行拷贝上的空白

如果确实有小写的qw数据,则第二张纸上的输出需要使用EXACT的高级filter。 在这里看到Debra的例子

 Sub Clean() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim rng1 As Range Set ws1 = Sheets(1) Set ws2 = Sheets(2) Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp)) With rng1 .AutoFilter Field:=1, Field:=1, Criteria1:="<>Q", Operator:=xlAnd, Criteria2:="<>W" If rng1.Cells.Count > 1 Then .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Copy ws2.[a1] End With ws1.AutoFilterMode = False End Sub