被修改
这是回答问题的代码
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挂起,我必须强制它关闭,但是当我重新打开它时,复制的单元格出现在新工作表中(我知道问题,我认为这是因为Excel将检查所有单元格因为它们是= 0但我尝试使用与前一代码相同的for循环,但我不断收到错误)
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)
“i”是for循环,就像代码#1中的那个
答案 0 :(得分:2)
此代码将迭代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
下次在寻求帮助之前实际尝试此问题。如果不是那么简单,人们可能不会帮助太多。这也是一个快速google或SO搜索的东西。
答案 1 :(得分:0)
AutoFilter
通过避免循环来快速完成此操作,并避免行副本上的间隙
如果您确实有小写q
或w
数据,那么第二张表格中的输出将需要使用EXACT
的高级过滤器。见Debra's example here
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