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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 20:09   #1
мария2507
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 47
По умолчанию Осуществить поиск записей по двум символьным полям. Найденные записи отобразить на втором листе

у меня вот че получилось, но не работает((
подскажите в чем дело???

Sub поиск()
i = 1
fam = InputBox("Введите фамилию")
dol = InputBox("Введите должность")

Sheets("Лист2").Activate
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select

While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then

Cells(i1, 1) = Sheets("Лист").Cells(i, 1)

Else
i = i + 1
End If
Wend
End Sub
мария2507 вне форума Ответить с цитированием
Старый 16.01.2010, 20:14   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then
Cells(Cells(rows.count, 1).end(xlup).row + 1,1) = Sheets("Лист").Cells(i, 1)
End If
Wend
или так(Вы не объявли переменную i1 и не присвоили ей значение и i = i + 1 не в том месте, где должно быть...)

Код:
dim i as long, i1 as long
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then
i1 = i1 + 1
Cells(i1, 1) = Sheets("Лист").Cells(i, 1)
End If
i = i + 1
Wend
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 16.01.2010 в 20:20.
The_Prist вне форума Ответить с цитированием
Старый 16.01.2010, 20:48   #3
мария2507
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 47
По умолчанию

т.е. вот так???
подскажите....


Sub поиск()
fam = InputBox("Введите фамилию")
dol = InputBox("Введите должность")
Sheets("Лист2").Activate
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select
Dim i As Long, i1 As Long
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then
i1 = i1 + 1
Cells(i1, 1) = Sheets("Лист").Cells(i, 1)
End If
i = i + 1
Wend
End Sub
мария2507 вне форума Ответить с цитированием
Старый 16.01.2010, 20:57   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Я предоставил два работающих кода. А в Вашем втором примере Вы не присваиваете значение переменной i.
У Вас ошибка будет на строке
Код:
While Sheets("Лист1").Cells(i, 1) <> Empty
Код:
Sub поиск()
Dim i As Long, i1 As Long
fam = InputBox("Введите фамилию")
dol = InputBox("Введите должность")
Sheets("Лист2").Select
Columns("A:A").ClearContents

i = 1
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then
i1 = i1 + 1
Cells(i1, 1) = Sheets("Лист").Cells(i, 1)
End If
i = i + 1
Wend
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 16.01.2010, 21:26   #5
мария2507
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 47
По умолчанию

он почему то не выводит результат на 2 лист((
мария2507 вне форума Ответить с цитированием
Старый 16.01.2010, 21:28   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от мария2507 Посмотреть сообщение
он почему то не выводит результат на 2 лист((
А я почем знаю? Может у Вас условие не выполняется, может первая ячейка на листе1 пустая и макрос даже и не проверяет ничего, а сразу выходит без проверок. Много вариантов. Выложите файл - можно сказать конкретней. Не хотите - пройдитесь по макросу в режиме отладки - F8.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 17.01.2010, 10:22   #7
мария2507
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 47
По умолчанию

у меня тут не получается загрузить((
вот залила на файлообменник


http://www.sharemania.ru/0236749
мария2507 вне форума Ответить с цитированием
Старый 17.01.2010, 10:34   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вот Вам правильный код:
Код:
Sub поиск()
Dim i As Long, i1 As Long
fam = InputBox("Введите фамилию")
dol = InputBox("Введите должность")
Sheets("Лист2").Select
Columns("A:A").ClearContents

i = 1
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Sheets("Лист1").Cells(i, 4) = dol Then
i1 = i1 + 1
Cells(i1, 1) = Sheets("Лист1").Cells(i, 1)
End If
i = i + 1
Wend
End Sub
Ошибки:
1. При сравнении
Код:
If Sheets("Лист1").Cells(i, 1) = fam And Cells(i, 4) = dol Then
Вы сравниваете данные Лист1 Sheets("Лист1").Cells(i, 1) с фамилией(fam), а вот должность(dol) сравниваете с ячейкой на активном листе(т.е. Лист2) - Cells(i, 4) = dol, т.к. явно не указываете лист, с которого брать данные.
2.
Код:
Cells(i1, 1) = Sheets("Лист").Cells(i, 1)
- Вы неверно указали лист - ("Лист"), а надо ("Лист1").
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 17.01.2010, 11:05   #9
мария2507
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 47
По умолчанию

спасибо)
а можно сделать так, чтобы на 2 листе отображалась не только фамилия, но и все данные???
мария2507 вне форума Ответить с цитированием
Старый 17.01.2010, 11:07   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от мария2507
чтобы на 2 листе отображалась не только фамилия, но и все данные?
Код:
Sub поиск()
Dim i As Long, i1 As Long
fam = InputBox("Введите фамилию")
dol = InputBox("Введите должность")
Sheets("Лист2").Select
Columns("A:A").ClearContents

i = 1
While Sheets("Лист1").Cells(i, 1) <> Empty
If Sheets("Лист1").Cells(i, 1) = fam And Sheets("Лист1").Cells(i, 4) = dol Then
i1 = i1 + 1
Sheets("Лист1").Rows(i).Copy Cells(i1, 1)
End If
i = i + 1
Wend
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сощитать и отобразить в ячейке количество страниц в листе gleod Microsoft Office Excel 2 02.08.2009 20:37
Фильтрация данных на втором листе по данным на первом ppl Microsoft Office Excel 3 13.08.2008 14:07
Отбор по двум полям MPa БД в Delphi 4 06.02.2008 20:14
Фильтрация по двум полям Dunkas БД в Delphi 11 21.01.2008 23:59
Как осуществить поиск сначала по всей БД, а затем из найденных таблиц найти по полю Date нужные записи? kayman БД в Delphi 1 21.09.2007 15:56