Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
#1

Find и Select

08.06.2017, 11:33. Просмотров 818. Ответов 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
Ответы с готовыми решениями:

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

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

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

Find Find
Здравствуйте, имею код: With ActiveDocument.Range.Find 'ищем текст ...

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

40
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
09.06.2017, 15:59  [ТС] #21
Ну, пожалуйста, давайте на этом примере. У меня нет возможности предоставить больше данных. Мне кажется, я оставила всё, что принципиально для Currentregion.
0
Hugo121
6265 / 2370 / 398
Регистрация: 19.10.2012
Сообщений: 6,994
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
6265 / 2370 / 398
Регистрация: 19.10.2012
Сообщений: 6,994
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
6265 / 2370 / 398
Регистрация: 19.10.2012
Сообщений: 6,994
10.06.2017, 22:27 #26
Я думаю нужно определить координаты таблицы.
Глядя на каритнку - должно нормально отработать с currentregion, а если неизвестно где/от чего плясать - find можно привлечь, поискать например "№№"
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 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
6265 / 2370 / 398
Регистрация: 19.10.2012
Сообщений: 6,994
13.06.2017, 08:53 #29
Чую мои сообщения читаете невнимательно... А там возможно есть ответ... Без примера файла точно сказать невозможно.
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 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
Hugo121
6265 / 2370 / 398
Регистрация: 19.10.2012
Сообщений: 6,994
13.06.2017, 10:12 #31
Цитата Сообщение от Simply me Посмотреть сообщение
Вот на этом листе
?
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
13.06.2017, 10:14  [ТС] #32
Не прикрепился
0
Миниатюры
Find и Select  
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
13.06.2017, 10:30 #33
Цитата Сообщение от 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
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
13.06.2017, 12:17  [ТС] #34
last_row=Sheets.Item(i).Cells(first_row-1, 2).End(xlDown).Row
Так получается слишком много случаев, когда last_row=first_row. А должно быть всего 2.
0
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
13.06.2017, 15:19 #35
Цитата Сообщение от Simply me Посмотреть сообщение
Так получается слишком много случаев, когда last_row=first_row. А должно быть всего 2.
Такое может происходить только в том случае если в списке одно наименование
А если не так, но всё равно выходит first_row=last_row значит у вас first row неправильно определяется
Покажите пример того как вы определяете first_row в том неправильном случае?
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
14.06.2017, 07:23  [ТС] #36
Например, картинка из сообщения #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
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
14.06.2017, 08:21 #37
Цитата Сообщение от 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
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 311
Завершенные тесты: 1
14.06.2017, 09:32  [ТС] #38
Что-то не получается. Выписала, какие значения должны быть у first_row и last_row на всех листах, и какие получаются разными способами нахождения last_row. Неправильные раскрасила красным.
0
Миниатюры
Find и Select  
Дмитрий 1755
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 16
14.06.2017, 10:06 #39
Может так?

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
nodirstein
25 / 25 / 8
Регистрация: 12.04.2015
Сообщений: 75
14.06.2017, 15:11 #40
Цитата Сообщение от Simply me Посмотреть сообщение
Неправильные раскрасила красным.
Как то скрин не о чём получился.
Как я уже говорил нужно видеть что конкретно на тех или иных листах что-бы разработать уникальный код...
0
14.06.2017, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2017, 15:11

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

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

VBA-Excel-Find
Добрый день! Имеем: в ячейке A2 "2016" в ячейке B2 =ТЕКСТ("01.01." &...


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

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

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