如何搜索文本列並選擇與搜索文本匹配的所有列和行?查找並選擇多行
樣品表:
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的。
如何搜索文本列並選擇與搜索文本匹配的所有列和行?查找並選擇多行
樣品表:
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的。
我最終做了一些與我的問題略有不同的事情。
該宏將在源表單中的每一行上進行搜索並將其複製到目標工作表,即參數。 數據不需要排序,但這會使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
使用之前,取出每對//。
這不是漂亮,因爲它可能是,但它能夠完成任務:
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#//註釋,以使此代碼樣本更清晰。