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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2010, 23:44   #1
andrey1
Новичок
Джуниор
 
Регистрация: 12.01.2009
Сообщений: 2
По умолчанию Поиск ячейки соответствующую параметру с выделением

Здравствуйте.Подскажите, пожалуйста,
есть вот такой макрос:

Sub ПОИСК()
Dim x As Range, a As String
a = ActiveCell.Value
Set x = [A:A].Find(a, LookAt:=xlWhole)
If Not x Is Nothing And x.Next > 0 Then x.Next.Select
End Sub

В столбце "А" наименования повторяются. Мне нужно чтобы если x.Next=0
строка пропускалась и поиск велся дальше пока не будет найдено положительное значение.
И еще один вопрос: Почему в этом макросе игнорируется ячейка "А1"
andrey1 вне форума Ответить с цитированием
Старый 20.03.2010, 00:22   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

.Next - бежит вправо от исходной ячейки (по крайней мере так пишет документация). поэтому не представляю, как удавалось двигаться вниз по столбцу А, используя .Next.

начиная с
If Not x Is Nothing And x.Next > 0 Then x.Next.Select

замените на:
If Not x Is Nothing Then
x.select
Do
Selection.Offset(1).Select
Loop Until Selection <> 0
end if
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.03.2010, 06:19   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если я правильно понял, то требуется выделить первую попавшуюся ячейку, которая удовлетворяет условиям поиска.
С использованием метода Find (FindNext), можно так:
Код:
Sub Main1()
    Dim x As Range, a As String
    Set x = [A:A].Find(what:=ActiveCell, LookAt:=xlWhole)
    If Not x Is Nothing Then
        a = x.Address
        Do
            If x.Next > 0 Then
                x.Next.Select: Exit Do
            End If
            Set x = [A:A].FindNext(x)
        Loop While a <> x.Address
    End If
End Sub
Необходимо заметить, что если поиск задавать в виде Set x = [A:A].Find..., то поиск в столбце "A" начнется со 2-й строки. И, если 1-е значение, удовлетворяющее поиску будет находиться в 1-й строке, то оно будет рассматриваться методом Find как последнее. Если в Вашем случае такой вариант возможен, то необходимо это учитывать.
Можно рассмотреть еще один, альтернативный вариант. В следующем макросе формируется диапазон ячеек 1-го столбца, удовлетворяющий критерию поиска (без цикла). Затем, в цикле просматриваются соседние ячейки только этого диапазона. Такой способ свободен от вышеуказанной проблемы.
Код:
Sub Main2()
    Dim x As Range, y As Range: Application.ScreenUpdating = False
    Set x = [A:A].Find(what:=ActiveCell, LookAt:=xlWhole)
    If Not x Is Nothing Then
        [A:A].ColumnDifferences(x).EntireRow.Hidden = True
        For Each y In [A:A].SpecialCells(xlCellTypeVisible)
            If y.Next > 0 Then
                y.Next.Select: Exit For
            End If
        Next: Rows.Hidden = False
    End If
End Sub
Выбирайте, что Вам лучше подходит.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.03.2010, 23:35   #4
andrey1
Новичок
Джуниор
 
Регистрация: 12.01.2009
Сообщений: 2
По умолчанию

Спасибо SAS888. Все работает превосходно.
andrey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск ячейки PIKA4Y Microsoft Office Excel 2 29.01.2010 16:50
Поиск диапазоне по формату ячейки Meta2 Microsoft Office Excel 2 11.11.2009 13:57
поиск с выделением photozaz Компоненты Delphi 1 22.05.2008 15:46
поиск строки и ячейки Lacky Microsoft Office Excel 11 27.11.2007 10:56