2009-01-27 59 views
4

如何搜索文本列並選擇與搜索文本匹配的所有列和行?查找並選擇多行

樣品表:

 ColA ColB ColC ColD 
Row1  Bob 
Row2  Jane 
Row3  Joe 
Row4  Joe 
Row5  Jack 
Row6  Jack 
Row7  Jack 
Row8  Peter 
Row9  Susan 

所以對於「傑克」的馬可搜索,那麼它應該在可樂d選擇所有Row5-7的。

回答

4

我最終做了一些與我的問題略有不同的事情。

該宏將在源表單中的每一行上進行搜索並將其複製到目標工作表,即參數。 數據不需要排序,但這會使marco的運行時間更長。您可以通過比較前一行搜索與以前不同的值來解決此問題。 目標片必須存在,並且任何數據將被覆蓋(未可能撤消!)

Sub Search_SelectAndCopy(sheetname As String) 

Dim SheetData As String 
Dim DataRowNum As Integer, SheetRowNum As Integer 

SheetData = "name of sheet to search in" //' Source sheet 
DataRowNum = 2 //' Begin search at row 2 
SheetRowNum = 2 //' Begin saving data to row 2 in "sheetname" 

//' Select sheetname, as its apparently required before copying is allowed ! 
Worksheets(SheetData).Select 

//' Search and copy the data 
While Not IsEmpty(Cells(DataRowNum, 2)) //' Loop until column B gets blank 
    //' Search in column B for our value, which is the same as the target sheet name "sheetname" 
    If Range("B" & CStr(DataRowNum)).Value = sheetname Then 
     //' Select entire row 
     Rows(CStr(DataRowNum) & ":" & CStr(DataRowNum)).Select 
     Selection.Copy 

     //' Select target sheet to store the data "sheetname" and paste to next row 
     Sheets(sheetname).Select 
     Rows(CStr(SheetRowNum) & ":" & CStr(SheetRowNum)).Select 
     ActiveSheet.Paste 

     SheetRowNum = SheetRowNum + 1 //' Move to next row 

     //' Select source sheet "SheetData" so searching can continue 
     Sheets(SheetData).Select 
    End If 

    DataRowNum = DataRowNum + 1 //' Search next row 
Wend 

//' Search and copying complete. Lets make the columns neat 
Sheets(sheetname).Columns.AutoFit 

//' Finish off with freezing the top row 
Sheets(sheetname).Select 
Range("A2").Select 
ActiveWindow.FreezePanes = True 
End Sub 

使用之前,取出每對//。

0

這不是漂亮,因爲它可能是,但它能夠完成任務:

Public Sub SelectMultiple() 
    Dim wbkthis As Workbook 
    Dim shtthis As Worksheet 
    Dim rngThis As Range 
    Dim rngFind As Range 
    Dim firstAddress As String 
    Dim addSelection As String 


    Set wbkthis = ThisWorkbook 
    Set shtthis = wbkthis.Worksheets("Sheet1") 

    // Set our range to search 
    Set rngThis = shtthis.Range("B2", "B10") 

    // Loop through it 
    With rngThis 

     // Find our required text 
     Set rngFind = .Find("Jack") 

     // If we find it then... 
     If Not rngFind Is Nothing Then 
      firstAddress = rngFind.Address // Take a note of where we first found it 
      addSelection = addSelection & rngFind.Address & "," // Add the cell's range to our selection 

      // Loop through the rest of our range and find any other instances. 
      Do 
       Set rngFind = .FindNext(rngFind) 
       addSelection = addSelection & rngFind.Address & "," 
      Loop While Not rngFind Is Nothing And rngFind.Address <> firstAddress 

     End If 
    End With 

    // Trim the last comma from our string 
    addSelection = Mid(addSelection, 1, Len(addSelection) - 1) 
    shtthis.Range(addSelection).Rows.Select // Select our rows! 

    Set rngThis = Nothing 
    Set shtthis = Nothing 
    Set wbkthis = Nothing 

End Sub 

請注意:我已經取代了VBA「評論與C#//註釋,以使此代碼樣本更清晰。