Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2010, 14:57   #1
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию Как в столбце найти текст и вывести всю строку?

Братцы помогите кто чем может) Задание такое: При нажатии кнопки "Поиск" из 3-х combobox (или в каком есть текст) произвести поиск в столбцах соответственно A-Автор(combobox1), B-Название(combobox2) и C-Раздел(combobox3), и найдя значения вывести всю строку в listbox. Я уже 3 день сижу думаю)) придумал только чтоб поиск был по полю А и по combobox1.

вот моё приложение http://zalil.ru/29907442
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 15:18   #2
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

НУ АУ КТО НИБУДЬ ПОмогите младшему брату))
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 15:22   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну а добавить ещё два раза If не додумались?
в цикле:
if a=avtor then
if b=nazvanie then
if c=razdel then
'delaem delo
end if
end if
end if

Если использовать поиск, то после нахождения проверять соседние ячейки.
Ну а я бы взял всё в массив и перебирал в цикле его. Время даже может и быстрее поиска будет, если повторов автора много.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.11.2010 в 15:25.
Hugo121 вне форума Ответить с цитированием
Старый 02.11.2010, 15:31   #4
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Hugo121
спс щас буду исправлять и если что отпишусь)
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 15:33   #5
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Hugo121
Я не понял куда тут можно добавить if))

Private Sub Найти_Click()
Dim myRng As Range, avtor As Range ' переменные!
Set myRng = Range(Cells(1, 1), Cells(100, 5))
Set avtor = myRng.Find(Автор.Text, , , xlPart) ' ищем ЧАСТИЧНОЕ (а не полное) совпадение
If avtor Is Nothing Then
MsgBox "Значение не найдено", vbExclamation
Else
TextBox1.Text = avtor
End If
If Автор.Text = "" Then
MsgBox "Поле автор не заполнено!"
Exit Sub
End If
End Sub
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 15:44   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Private Sub Найти_Click()
Dim myRng As Range, avtor As Range ' переменные!
Set myRng = Range(Cells(1, 1), Cells(100, 1)) 'зачем тут было 100,5?
Set avtor = myRng.Find(Автор.Text, , , xlPart) ' ищем ЧАСТИЧНОЕ (а не полное) совпадение
If avtor Is Nothing Then
MsgBox "Значение не найдено", vbExclamation
Else
If Cells(avtor.Row, 2) = combobox2.Text Then
If Cells(avtor.Row, 3) = combobox3.Text Then
'вывести всю строку в listbox 'TextBox1.Text = avtor
End If
End If
End If
If Автор.Text = "" Then
MsgBox "Поле автор не заполнено!"
Exit Sub
End If
End Sub
Пример по вставке в листбокс не искал, а наизусть не запоминаю...
Вообще-то тут поиск надо бы продолжить, если при первом нахождении автора соседние ячейки не соответствуют.
Ищите примеры с FindNext.

Вот например:
Код:
Set x = Sheets(1).UsedRange.Find(ch(i), LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
If Not x Is Nothing Then
iFirstAddress = x.Address
Do
Set x = Sheets(1).UsedRange.FindNext(x)
If sel Is Nothing Then
Set sel = Rows(x.Row)
Else
Set sel = Union(sel, Rows(x.Row))
End If
Loop While Not x Is Nothing And x.Address <> iFirstAddress
End If
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.11.2010 в 15:52.
Hugo121 вне форума Ответить с цитированием
Старый 02.11.2010, 15:53   #7
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Hugo121
спасибо и на этом. Буду продалжать поиски)
p.s. не знаю, как без приложения сдавать буду курсовую(
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 15:54   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код поиска с продолжением целиком, может пригодится:
Код:
Sub SearchLim()
Dim temp$
temp = "limi"
Set tar = Sheets(3)

Set X = Sheets(1).UsedRange.Find(temp, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)

If Not X Is Nothing Then

    iFirstAddress = X.Address
            
    Do
        Set X = Sheets(1).Cells.FindNext(X)
        Debug.Print X.Address ' для проверки
        Set blank_cell = tar.Cells(tar.Range("a1").SpecialCells(xlCellTypeLastCell).Row + 1, 1)
        Rows(X.Row).Copy blank_cell
    Loop While Not X Is Nothing And X.Address <> iFirstAddress
    
End If

End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.11.2010, 16:22   #9
alexey_nv86
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

ХУГО)).
я не настолько разбираюсь в vba)) чет не догоняю код
alexey_nv86 вне форума Ответить с цитированием
Старый 02.11.2010, 16:28   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сократил, лишнее выкинул:
Код:
Sub SearchLim()

'собственно ищем
Set X = Sheets(1).UsedRange.Find("limi", LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)

If Not X Is Nothing Then 'если нашли

    iFirstAddress = X.Address 'запоминаем адрес
            
    Do 'цикл
        Set X = Sheets(1).Cells.FindNext(X) 'ищем дальше
        'тут делаем дело с найденным
        Debug.Print X.Address ' для проверки
    'ищем дальше, пока не вернёмся к первому найденному
    Loop While Not X Is Nothing And X.Address <> iFirstAddress
    
End If

End Sub
P.S. Ваше приложение не смотрел, ибо на работе...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.11.2010 в 16:32.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подсчитать сумму цифр в столбце и вывести их в Edit MaxiMkaUA БД в Delphi 12 30.05.2009 11:04
Как вывести сообщение когда в столбце уже заполнена последняя ячейка StringGrid ARXangel Общие вопросы Delphi 5 18.03.2009 08:24
Как выделить всю строку в ListView MasterofCDM БД в Delphi 2 03.07.2008 16:13
как вывести текст из БД nikleb PHP 2 27.06.2008 10:13
Как извлечь текст из буфера в строку? Brother Win Api 3 13.11.2007 20:19