2017-07-30 57 views
0

如果列B包含某个文本(“ACK-”,但我现在需要将整行直接复制到具有某些文本的行上方(“ACK-”这甚至可能任何帮助将不胜感激在包含某些文本的行上方复制行

Sub HEA_Filter() 
Dim strArray As Variant 
Dim wsSource As Worksheet 
Dim wsDest As Worksheet 
Dim NoRows As Long 
Dim DestNoRows As Long 
Dim I As Long 
Dim J As Integer 
Dim rngCells As Range 
Dim rngFind As Range 
Dim Found As Boolean 

strArray = Array("ack-") 

Set wsSource = ActiveSheet 

NoRows = wsSource.Range("A65536").End(xlUp).Row 
DestNoRows = 1 
Set wsDest = Sheets("Real Alarms") 

For I = 1 To NoRows 

Set rngCells = wsSource.Range("B" & I) 
Found = False 
For J = 0 To UBound(strArray) 
Found = Found Or Not (rngCells.Find(strArray(J)) Is Nothing) 
Next J 

If Found Then 
rngCells.EntireRow.Copy wsDest.Range("A" & DestNoRows) 

DestNoRows = DestNoRows + 1 
End If 
Next I 
End Sub 
+0

这很好用!谢谢!现在我有另一个问题了......当试图将“A”栏的粘贴栏更改为“F”时,它给了我一个错误,指出该单元格的大小不一样......我如何解决这个问题? –

回答

1

要引用“上面行”,您可以使用Range.Offset方法:?

rngCells.Offset(-1).EntireRow.Copy wsDest.Range("A" & DestNoRows) 
'  ^^^^^^^^^^^^ 

然而,请注意,如果范围在,则会引发运行时错误第1行,因为row 0不存在。例如:您可能想要添加一张支票,例如:

If rngCells.Row > 1 Then rngCells.Offset(-1).EntireRow.Copy ... 
+0

这很棒!谢谢!现在我有另一个问题...当试图从“A”到“F”更改粘贴列时,它给了我一个错误,说单元格的大小不一样... –

+0

@JimmyVo你刚刚使用'wsDest。范围(“A”和DestNoRows)'?如果是这样,它不应该给你那个错误,除非你可能有一些合并的单元格或太多的数据行idk。 –

+1

为了避免'If rngCells.Row> 1 Then',循环可以改为'For I = 2 To NoRows'。 – YowE3K

相关问题