Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/FindNext и If - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » FindNext и If (Макросы/Sub)
FindNext и If
Iater Дата: Четверг, 22.05.2014, 12:38 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Хочу сделать так, чтобы искалось по определенным условиями кроме совпадения названия.
Но проблема в том, что когда функция Find находит совпадение, то передает управление FindNext. А FindNext уже не учитывает If где делается сравнение....
Вот код:

[vba]
Код
With Worksheets("Лист4").Range("H6:H" & j, "S6:S" & j) 'ищем в этих диапозонах
Set result = .Find(What:=Worksheets("Лист3").Range("d2").Offset(r, 0).Value, LookIn:=xlValues) 'это хочу найти

If Not result Is Nothing Then

firstAddress = result.Address 'запоминаем адрес первой найденной ячейки

If Worksheets("Лист3").Range("c2").Offset(r, 0).Value = result.Offset(0, 22).Value Then 'сравнение

Do

'Обрабатываем найденную ячейку
Worksheets("Лист3").Range("g2").Offset(r, 0).Value = result.Offset(0, -6).Value 'client

Set result = .FindNext(result) 'ищем следующую

Loop While Not result Is Nothing And result.Address <> firstAddress 'выход из цикла при переходе снова на первую

End If

End If

End With
[/vba]
 
Ответить
СообщениеХочу сделать так, чтобы искалось по определенным условиями кроме совпадения названия.
Но проблема в том, что когда функция Find находит совпадение, то передает управление FindNext. А FindNext уже не учитывает If где делается сравнение....
Вот код:

[vba]
Код
With Worksheets("Лист4").Range("H6:H" & j, "S6:S" & j) 'ищем в этих диапозонах
Set result = .Find(What:=Worksheets("Лист3").Range("d2").Offset(r, 0).Value, LookIn:=xlValues) 'это хочу найти

If Not result Is Nothing Then

firstAddress = result.Address 'запоминаем адрес первой найденной ячейки

If Worksheets("Лист3").Range("c2").Offset(r, 0).Value = result.Offset(0, 22).Value Then 'сравнение

Do

'Обрабатываем найденную ячейку
Worksheets("Лист3").Range("g2").Offset(r, 0).Value = result.Offset(0, -6).Value 'client

Set result = .FindNext(result) 'ищем следующую

Loop While Not result Is Nothing And result.Address <> firstAddress 'выход из цикла при переходе снова на первую

End If

End If

End With
[/vba]

Автор - Iater
Дата добавления - 22.05.2014 в 12:38
krosav4ig Дата: Четверг, 22.05.2014, 17:44 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
это все потому, что проверка стоит снаружи цикла. Перенесите ее вовнутрь и будет все ок
[vba]
Код
With Worksheets("Лист4").Range("H6:H" & j, "S6:S" & j) 'ищем в этих диапозонах
     Set result = .Find(What:=Worksheets("Лист3").Range("d2").Offset(r, 0).Value, LookIn:=xlValues)  'это хочу найти
     If Not result Is Nothing Then
         firstAddress = result.Address 'запоминаем адрес первой найденной ячейки
         Do
             If Worksheets("Лист3").Range("c2").Offset(r, 0).Value = result.Offset(0, 22).Value Then  'сравнение
                 'Обрабатываем найденную ячейку
                 Worksheets("Лист3").Range("g2").Offset(r, 0).Value = result.Offset(0, -6).Value 'client
             End If
             Set result = .FindNext(result) 'ищем следующую
         Loop While Not result Is Nothing And result.Address <> firstAddress 'выход из цикла при переходе снова на первую
     End If
End With
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеэто все потому, что проверка стоит снаружи цикла. Перенесите ее вовнутрь и будет все ок
[vba]
Код
With Worksheets("Лист4").Range("H6:H" & j, "S6:S" & j) 'ищем в этих диапозонах
     Set result = .Find(What:=Worksheets("Лист3").Range("d2").Offset(r, 0).Value, LookIn:=xlValues)  'это хочу найти
     If Not result Is Nothing Then
         firstAddress = result.Address 'запоминаем адрес первой найденной ячейки
         Do
             If Worksheets("Лист3").Range("c2").Offset(r, 0).Value = result.Offset(0, 22).Value Then  'сравнение
                 'Обрабатываем найденную ячейку
                 Worksheets("Лист3").Range("g2").Offset(r, 0).Value = result.Offset(0, -6).Value 'client
             End If
             Set result = .FindNext(result) 'ищем следующую
         Loop While Not result Is Nothing And result.Address <> firstAddress 'выход из цикла при переходе снова на первую
     End If
End With
[/vba]

Автор - krosav4ig
Дата добавления - 22.05.2014 в 17:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » FindNext и If (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!