2012-12-05 111 views
2

我有一個由4列和未確定的行組成的列表。我正試圖收集Col B和C,其中Col B有單詞Jackpot,並將它們複製到一張新單中。我已經得到了列表進行排序,但使用UsedRange複製所有行。我如何只複製B和C?Vba:基於文本選擇多行

Range("A1").Activate 
ActiveCell.EntireRow.Insert 
Rows("1:1").Select 
Selection.AutoFilter 
Selection.AutoFilter Field:=2, Criteria1:="Jackpot" 

ActiveSheet.UsedRange.Select 

Col A | Col B |  Col C | Col D 
1  Stuff   1  1 
1  MoreStuff  2  1 
1  Jackpot  3  1 
1  Jackpot  4  1 
1  SomeStuff  5  1 
1  Jackpot  6  1 
+0

轉到宏記錄器並將其打開。全選。添加過濾器。在過濾器過濾列B使用你的話。選擇結果。將結果粘貼到新工作表。關閉宏錄像機。看看vba宏。 – Andrew

回答

3

首次降息,雖然我也有一些問題:

Dim ws As Worksheet 
Set ws = ThisWorkbook.Worksheets("Results") 
ws.Rows(1).AutoFilter Field:=2, Criteria1:="Jackpot" 
ws.Range("B2:C2", Range("B2:C2").End(xlDown)).Copy 
ThisWorkbook.Worksheets("DestinationSheet").Range("A1").PasteSpecial 

1)這將是在同一張紙上每次(前Worksheets("Results"))發生?
2)你想包含標題行嗎?如果是這樣,請在兩種情況下將.Copy行更改爲B1:C1。目前的實現只是在沒有標題的情況下過濾內容。

很明顯,您需要更改工作表名稱以符合您的實施。

3

在篩選它,可以選擇的範圍B:C,然後複製到你的目的地。我更新了您的代碼以向您展示一個示例。此外,你並不總是需要用VBA「選擇」任何東西(這樣做很少見)。

希望這有助於

Option Explicit 

Sub doIt() 
    Dim sh As Worksheet 
    Set sh = ActiveSheet 

    sh.Range("A1:D1").AutoFilter Field:=2, Criteria1:="Jackpot" 

    ' make sure results were returned from the filter 
    If (sh.Cells(sh.Rows.Count, 1).End(xlUp).Address <> "$A$1") Then 

     Dim newSh As Worksheet 
     Set newSh = Sheets.Add 

     sh.Range("B:C").Copy newSh.Range("A1") 

    End If 
End Sub 
+1

+1打我吧... :-) –

+0

哈!這對我來說是第一次在stackoverflow :)是的!大聲笑 –

1

下面是一個簡單的方法,它不依賴於自動過濾器。不確定速度更快,但我想爲您的問題提供另一種解決方案。

Sub CopyJackpot() 
Application.ScreenUpdating = False 
Dim lastRow As Long, i As Long, j As Long 

j = 1 
lastRow = Range("B" & Rows.Count).End(xlUp).Row 

For i = 1 To lastRow 
    If InStr(Range("B" & i).Value, "Jackpot") Then 
     Rows(i).Copy Destination:=Sheets(2).Rows(j) 
     j = j + 1 
    End If 
Next 

Application.ScreenUpdating = True 
MsgBox j - 1 & " row(s) copied to Sheet2." 

End Sub