Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
#1

Find и Select - VBA

08.06.2017, 11:33. Просмотров 753. Ответов 40
Метки нет (Все метки)

Добрый день! Помогите, пожалуйста.
Когда-то использовала такую конструкцию
Visual Basic
1
Range("...").Find("...").Select
А сейчас почему-то не получается.
Visual Basic
1
2
Set C1 = Sheets.Item(1).Range("A1:A100")
Set C2 = C1.Find("№")
По идее в переменной C2 должен быть диапазон ячейки, содержащей №. А там значение ячейки, содержащей №. Поэтому к C2 не получается применить Select. Как выделить ячейку, содержащую № или как сразу получить ее строку и столбец?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2017, 11:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Find и Select (VBA):

Как оформить условие на попадание в диапазон в конструкции Select Case ... End Select? - VBA
Народ, подскажите please, правильна ли конструкция следующего кода: Sub пример() pp2 = Str(InputBox("введите число")) Select Case...

Ошибка в пользовательской форме "End Select without select case" - VBA
У меня был написан код, который хорошо работал.Я решил добавить пользовательскую форму (UserForm), через которую вводятся данные, после...

Select Without Select Case - VBA
Помогите кто-нибудь, пожалуйста! Написала такой вот код, но мне выдает ошибку "Select Without Select Case" на выделенной строчке....

Find Find - VBA
Здравствуйте, имею код: With ActiveDocument.Range.Find 'ищем текст '< в начале слова '{1;2} - одна или две...

Find в VBA - VBA
Помогите с помощью Find найти в каком из столбцов находиться число 4,начиная с F10

Find Wrap - VBA
свойство Wrap - поворачивать, заворачивать - определяет поведение поиска при достижении конца документа Вариантов значения свойства Wrap...

40
MU-GK
27 / 24 / 1
Регистрация: 06.01.2017
Сообщений: 264
09.06.2017, 00:45 #16
Я вот почему-то не люблю
For Each

делаю так:

Visual Basic
1
2
3
4
ns = Sheets.Count
for s =1 to ns
 ....
next s
1
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
09.06.2017, 08:57  [ТС] #17
А подскажите еще, пожалуйста. Есть какие-то способы найти последнюю непустую ячейку? Но не абсолютно последнюю, а как бы первую непустую относительно другой ячейки.
Нашла способы для нахождения абсолютно последней непустой ячейки.
Visual Basic
1
2
3
last_row = Cells(Rows.Count, 1).End(xlUp).Row
 last_row = Cells.SpecialCells(xlLastCell).Row
 last_row = UsedRange.Row UsedRange.Rows.Count – 1
Для моего случая они возвращают 35, а нужно – 27.
0
Миниатюры
Find и Select  
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
09.06.2017, 10:07 #18
Ищите по третьему столбцу:
Visual Basic
1
last_row = Cells(Rows.Count, 3).End(xlUp).Row
Ну или может быть можно использовать [c22].currentregion
1
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
09.06.2017, 13:10  [ТС] #19
Не очень получается. По третьему столбцу не получится, потому что 35 строчка занимает столбцы с B по F, как и вся таблица (я для скрина сократила из соображений конфедициальности).
CurrentRegion я так использую:
Visual Basic
1
2
Set c = Cells(first_row, 2)
last_row=c.CurrentRegion.Row+c.CurrentRegion.Rows.Count-1
И почему-то все время совпадает first_row и last_row.
0
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
09.06.2017, 14:08 #20
Без примера файла разговор ни о чём...
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
09.06.2017, 15:59  [ТС] #21
Ну, пожалуйста, давайте на этом примере. У меня нет возможности предоставить больше данных. Мне кажется, я оставила всё, что принципиально для Currentregion.
0
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
09.06.2017, 16:18 #22
Нет, не оставили:
1. что скрывается в first_row - неизвестно.
2. что является currentregion ячейки Cells(first_row, 2) - естественно тоже неизвестно.
3. Выполните [a22].currentregion.select - должна выделиться целиком таблица, если не так - значит с currentregion нужно разбираться в файле.
0
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
10.06.2017, 22:11 #23
Цитата Сообщение от Simply me Посмотреть сообщение
А подскажите еще, пожалуйста. Есть какие-то способы найти последнюю непустую ячейку? Но не абсолютно последнюю, а как бы первую непустую относительно другой ячейки.
Нашла способы для нахождения абсолютно последней непустой ячейки.
Visual Basic
1
2
3
last_row = Cells(Rows.Count, 1).End(xlUp).Row
 last_row = Cells.SpecialCells(xlLastCell).Row
 last_row = UsedRange.Row UsedRange.Rows.Count – 1
Для моего случая они возвращают 35, а нужно – 27.
Visual Basic
1
Cells(22,1).end(xlDown).Row
Добавлено через 6 минут
Я так понимаю у вас ячейка "A22" всё время содержит начало "номенклатуры"
Visual Basic
1
2
3
4
5
6
7
8
Sub aaa()
Dim i As Integer, r As Integer
    For i = 22 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 2).Value = "" Then
            r = i 'r - запоминает номер строки с непустой ячейкой после строки №22
        End If
    Next i
End Sub
1
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
10.06.2017, 22:19 #24
Цитата Сообщение от nodirstein Посмотреть сообщение
Cells(22,1).end(xlDown).Row
скорее всего наврёт, т.к. скорее всего в Cells(23,1) пусто (файла нет...)
Но конечно можно туда что-нибудь написать, и тогда использовать такой вариант.
1
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
10.06.2017, 22:23 #25
Не самая понятная просьба если честно ))
0
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
10.06.2017, 22:27 #26
Я думаю нужно определить координаты таблицы.
Глядя на каритнку - должно нормально отработать с currentregion, а если неизвестно где/от чего плясать - find можно привлечь, поискать например "№№"
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
13.06.2017, 08:00  [ТС] #27
1. что скрывается в first_row - неизвестно.
Visual Basic
1
2
 Set C1 = Sheets.Item(i).Range("A1:A1000").Find("№")
first_row=C1.Row+2 'Первая строка таблицы
Я так понимаю у вас ячейка "A22" всё время содержит начало "номенклатуры"
Нет, не на всех листах книги.

Добавлено через 35 минут
Такой код работает:
Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row, 2).End(xlDown).Row
Но почему-то кроме случаев, когда в таблице - 1 строка (first_row=last_row).
0
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
13.06.2017, 08:34 #28
Не ну так не пойдет, я вообще не понимаю что требуется сделать.
Я из этой темы ухожу.
И вряд ли кто-то сможет помочь, т.к. вы хотите универсальное решение, а универсальное решение, без каких либо файлов примеров невозможно. Да и как-то не договариваете (((
0
Hugo121
6085 / 2234 / 372
Регистрация: 19.10.2012
Сообщений: 6,702
13.06.2017, 08:53 #29
Чую мои сообщения читаете невнимательно... А там возможно есть ответ... Без примера файла точно сказать невозможно.
0
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1
13.06.2017, 10:00  [ТС] #30
Вот на этом листе таблица содержит одну строку. first_row правильно определяет, last_row - неправильно (27 вместо 24). Еще неправильно определяет, тоже где таблица содержит одну строку. В остальных случаях всё корректно работает. Код:
Visual Basic
1
2
3
Set C1 = Sheets.Item(i).Range("A1:A1000").Find("№")
first_row=C1.Row+2
last_row=Sheets.Item(i).Cells(first_row, 2).End(xlDown).Row
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2017, 10:00
Привет! Вот еще темы с ответами:

Использование цикла в .find - VBA
Добрый день! Столкнулся с необходимостью совмещения двух таблиц с одинаковой номенклатурой, но разными показателями. Для удобства взял...

Find, найденное в переменную - VBA
With ActiveDocument.Range.Find .Text = "<" & Первое_слово & "," 'поиск в начале слова .Wrap = wdFindStop 'поиск остановить,...

VBA-Excel-Find - VBA
Добрый день! Имеем: в ячейке A2 "2016" в ячейке B2 =ТЕКСТ("01.01." & A2;"дд.ММ.гг") в ячейках с C2 по ND2 =B2+1 .. =NC2+1 для...

Find по нескольким критериям - VBA
Как сделать поиск методом Find объекта RecordSet не по одному, по по нескольким полям?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru