2009-01-27 57 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#//注释,以使此代码样本更清晰。