Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Excel VBA поиск строк

51K
28 августа 2009 года
wyrry
3 / / 28.08.2009
Добрый день!

на vba написана программа для работы с данными эксель. и есть небольшая проблема с поиском. на форме: listbox, textbox и кнопка. в текстбокс вводится ФИО, по нажатию кнопки происходит поиск по ячейкам (к, "В") и в листбокс выводится целиком строка к.
но это работает только при полном совпадении данных в текстбоксе с содержимым ячейки (к, "В"). можно ли сделать поиск по части? например, если ввести только имя или только фамилию, и поиск выдавал бы все строки, в которых присутствуют такие имя или фамилия?
275
28 августа 2009 года
pashulka
985 / / 19.09.2004
Код:
Private Sub CommandButton1_Click()
    iText$ = TextBox1.Value
    If iText$ <> "" Then
       With ThisWorkbook.Worksheets(1).[B:B]
            'Укажите нужную рабочую книгу и рабочий лист
            Dim iCell As Range
            Set iCell = .Find(iText$, , xlValues, xlPart)
            If Not iCell Is Nothing Then
               iAddress$ = iCell.Address
               ListBox1.Clear
               Do
                    Set iCell = .FindNext(iCell)
                    ListBox1.AddItem iCell.Value
               Loop While iAddress$ <> iCell.Address
            End If
       End With
    Else
       TextBox1.SetFocus
       MsgBox "Необходим образец для поиска", , ""
    End If
End Sub
51K
28 августа 2009 года
wyrry
3 / / 28.08.2009
Огромное спасибо! работает! осталось только одна вещь.
в листбоксе 8 колонок, соответствующих ячейкам. в последней 8ой колонке - сборные данные из четырех ячеек (I,L,K,L).
можно ли модифицировать данный код, чтобы запись строки происходила по колонкам? так как сейчас запись происходит в первую колонку.
275
28 августа 2009 года
pashulka
985 / / 19.09.2004
Код:
Private Sub CommandButton1_Click()
    iText$ = TextBox1
    If iText$ <> "" Then
       With ThisWorkbook.Worksheets(1).[B:B]
            'Укажите нужную рабочую книгу и рабочий лист
            Dim iCell As Range
            Set iCell = .Find(iText$, , xlValues, xlPart)
            If Not iCell Is Nothing Then
               iAddress$ = iCell.Address
               ListBox1.Clear
               Do
                    ListBox1.AddItem
                    ListBox1.List(iCount&, 0) = iCell(1, 1) 'iCell
                    ListBox1.List(iCount&, 1) = iCell(1, 2)
                    ListBox1.List(iCount&, 2) = iCell(1, 5)
                    'и т.д.
                    iCount& = iCount& + 1
                    Set iCell = .FindNext(iCell)
               Loop While iAddress$ <> iCell.Address
            End If
       End With
    Else
       TextBox1.SetFocus
       MsgBox "Необходим образец для поиска", , ""
    End If
End Sub


Примечание :
- если Вам непривычен синтаксис Item(RowIndex, ColumnIndex), то, к примеру, вместо iCell(1, 2) можно использовать iCell.Offset(, 1)/iCell.Offset(0, 1), только учтите, что смещение зависит от наличия об'единённых ячеек.
- при наличии восьми столбцов имеет смысл организовать их заполнение с помощью цикла.
- если этот вариант, по каким-то причинам, не устроит, то заполнить список можно также использовав свойство List
51K
28 августа 2009 года
wyrry
3 / / 28.08.2009
Благодарю!
При объединении ячеек индексы сместил на -1 и все стало ок.
Код, в принципе, понимаю )) но сам такого не напишу :o не велики мои познания в VBA.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог