Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521

Find и Select

08.06.2017, 11:33. Показов 4474. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2017, 11:33
Ответы с готовыми решениями:

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

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

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

40
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
09.06.2017, 15:59  [ТС]
Студворк — интернет-сервис помощи студентам
Ну, пожалуйста, давайте на этом примере. У меня нет возможности предоставить больше данных. Мне кажется, я оставила всё, что принципиально для Currentregion.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
09.06.2017, 16:18
Нет, не оставили:
1. что скрывается в first_row - неизвестно.
2. что является currentregion ячейки Cells(first_row, 2) - естественно тоже неизвестно.
3. Выполните [a22].currentregion.select - должна выделиться целиком таблица, если не так - значит с currentregion нужно разбираться в файле.
0
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
10.06.2017, 22:11
Цитата Сообщение от 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
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
10.06.2017, 22:19
Цитата Сообщение от nodirstein Посмотреть сообщение
Cells(22,1).end(xlDown).Row
скорее всего наврёт, т.к. скорее всего в Cells(23,1) пусто (файла нет...)
Но конечно можно туда что-нибудь написать, и тогда использовать такой вариант.
1
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
10.06.2017, 22:23
Не самая понятная просьба если честно ))
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
10.06.2017, 22:27
Я думаю нужно определить координаты таблицы.
Глядя на каритнку - должно нормально отработать с currentregion, а если неизвестно где/от чего плясать - find можно привлечь, поискать например "№№"
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2017, 08:00  [ТС]
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
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
13.06.2017, 08:34
Не ну так не пойдет, я вообще не понимаю что требуется сделать.
Я из этой темы ухожу.
И вряд ли кто-то сможет помочь, т.к. вы хотите универсальное решение, а универсальное решение, без каких либо файлов примеров невозможно. Да и как-то не договариваете (((
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
13.06.2017, 08:53
Чую мои сообщения читаете невнимательно... А там возможно есть ответ... Без примера файла точно сказать невозможно.
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2017, 10:00  [ТС]
Вот на этом листе таблица содержит одну строку. 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
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
13.06.2017, 10:12
Цитата Сообщение от Simply me Посмотреть сообщение
Вот на этом листе
?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2017, 10:14  [ТС]
Не прикрепился
Миниатюры
Find и Select  
0
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
13.06.2017, 10:30
Цитата Сообщение от Simply me Посмотреть сообщение
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
Эх не удержался
Сделайте просто
Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row-1, 2).End(xlDown).Row
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
13.06.2017, 12:17  [ТС]
last_row=Sheets.Item(i).Cells(first_row-1, 2).End(xlDown).Row
Так получается слишком много случаев, когда last_row=first_row. А должно быть всего 2.
0
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
13.06.2017, 15:19
Цитата Сообщение от Simply me Посмотреть сообщение
Так получается слишком много случаев, когда last_row=first_row. А должно быть всего 2.
Такое может происходить только в том случае если в списке одно наименование
А если не так, но всё равно выходит first_row=last_row значит у вас first row неправильно определяется
Покажите пример того как вы определяете first_row в том неправильном случае?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
14.06.2017, 07:23  [ТС]
Например, картинка из сообщения #17. Должно быть, first_row=24, last_row=27.
Visual Basic
1
2
Set C1=Sheets.Item(i).Range("A1:A1000").Find("N")
first_row=C1.Row+2
C1.Row=22. Это правильно. Вообще first_row везде правильно определяет.
Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row, 2).End(xlDown).Row
last_row=27
Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row-1, 2).End(xlDown).Row
last_row=24
0
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
14.06.2017, 08:21
Цитата Сообщение от Simply me Посмотреть сообщение
last_row=Sheets.Item(i).Cells(first_row-1, 2).End(xlDown).Row
В таком случае номер столбца должен быть не 2 а один, т.к. если я правильно понял вы считаете last_row как последний элемент списка, т.е. нужно идти вниз по номеру в списке.

Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row-1, 1).End(xlDown).Row
или

Visual Basic
1
last_row=Sheets.Item(i).Cells(first_row, 1).End(xlDown).Row
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
14.06.2017, 09:32  [ТС]
Что-то не получается. Выписала, какие значения должны быть у first_row и last_row на всех листах, и какие получаются разными способами нахождения last_row. Неправильные раскрасила красным.
Миниатюры
Find и Select  
0
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 16
14.06.2017, 10:06
Может так?

Set C1 = Sheets.Item(i).Range("A1:A1000").Find("№ ")
first_row=C1.Row+2
if Sheets.Item(i).Cells(first_row+1, 1)="" then
last_row=first_row
Else
last_row=Sheets.Item(i).Cells(first_row, 1).End(xlDown).Row
End if
1
32 / 32 / 8
Регистрация: 12.04.2015
Сообщений: 79
14.06.2017, 15:11
Цитата Сообщение от Simply me Посмотреть сообщение
Неправильные раскрасила красным.
Как то скрин не о чём получился.
Как я уже говорил нужно видеть что конкретно на тех или иных листах что-бы разработать уникальный код...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2017, 15:11

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

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

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

метод find
Добрый день! Имеются столбцы А и B с данными необходимо написать макрос методом find найти значения А, которых нет в В и вывести их в...

Использование метода Find
Уважаемые программисты. Подскажите пожалуйста. У меня в коде встречается такая вот строчка: Vib(v) =...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru