Поиск в Excel и возврат - PullRequest
       24

Поиск в Excel и возврат

0 голосов
/ 11 февраля 2011

Я хочу найти файл Excel, в котором есть список имен.Все имена в случайном порядке.Я хочу иметь возможность искать строку, такую ​​как "Том", и в ответ получить ВСЕ строки "Том" с прикрепленными данными.Поэтому, если есть список из 500 имен, а для Тома всего 15 записей, я хочу, чтобы формула перетаскивала все 15 записей и выводила их в другую область электронной таблицы.Кроме того, возможно ли сделать это, а затем вернуть все столбцы, связанные с «Том», чтобы завершить запись всей строки?Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Вот простой макрос для отображения поля ввода, фильтрации и копирования данных, соответствующих значению, введенному на новом листе.

Public Sub sortAndCopy()
Dim rngFilterRange As Range
Dim strSearchString As String
Dim wsTargetSheet As Worksheet

'change this to refer to the sheet that contains the data
Set rngFilterRange = ThisWorkbook.Sheets("Data").UsedRange

'prompt for string to filter by
strSearchString = Application.InputBox("Enter value to search for")

With rngFilterRange
'filter data range - assumes data is in column 1, but change the field if necessary
    .AutoFilter Field:=1, Criteria1:=strSearchString
'creates a new sheet and copies the filtered data -
'change this to refer to the range you require the data to be copied to
    .Copy Destination:=ThisWorkbook.Sheets.Add.Range("A1")
'turn off filters
    .Parent.ShowAllData
    .Parent.AutoFilterMode = False
End With

End Sub
0 голосов
/ 12 февраля 2011

Чтобы увидеть эти данные, вы можете просто применить фильтр к данным и выбрать имя в столбце имени. Нет необходимости копировать данные таким образом.

Чтобы получить копию данных, скопируйте и вставьте как обычно (скрытые строки не копируются)

Чтобы автоматизировать, напишите Sub, чтобы повторить эти шаги.

0 голосов
/ 11 февраля 2011

Вы можете использовать ADO:

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

''This is not the best way to refer to the workbook
''you want, but it is very convenient for notes
''It is probably best to use the name of the workbook.

strFile = ActiveWorkbook.FullName

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used. 
''This is the Jet 4 connection string, you can get more
''here : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")


cn.Open strCon

strSQL = "SELECT * " _
       & "FROM [Sheet1$] " _
       & "WHERE MyField ='Tom' "

rs.Open strSQL, cn, 3, 3

''You can iterate through the fields here if you want headers
''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs=Nothing
cn.Close
Set cn=Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...