Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.161.43] |
|
Сообщ.
#1
,
|
|
|
На:
WorksheetFunction.Match Application.Match ругается: #1004 - невозможно получить свойство Match класса WorksheetFunction. Нужно найти именно НОМЕР строки. Либо всю строку запихнуть в переменную класса Range, чтобы я мог в ней другие столбцы менять. |
Сообщ.
#2
,
|
|
|
RangeToSearch.Select Selection.Find(What:=ValueToSearch).Activate MsgBox ActiveCell.Row |
Сообщ.
#3
,
|
|
|
Select не канает.
Надо просто получить эту строку, не меняя положения курсора. Если я сделаю Range("НужныйДиапазон").Find, то он мне найдёт непосредственно эту ячейку, верно? А как мне найти соседнюю справа, например? |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ как мне найти соседнюю справа, например? Если ты знаешь строку и столбец найденной ячейки, то взять "соседнюю справа" - это, конечно, задача совершенно нерешаемая... |
Сообщ.
#5
,
|
|
|
А кроме как через Address можно как-то узнать номер строки и столбца найденной ячейки?
|
Сообщ.
#6
,
|
|
|
Не понял... номер строки и номер столбца - недостаточно, что ли?
|
Сообщ.
#7
,
|
|
|
Address содержит строку вида $A$10 - выуживать из неё номер строки (особенно) и столбца не очень удобно.
Может, есть другое свойство, которое содержит эти номера в цифровом виде? |
Сообщ.
#8
,
|
|
|
Jin X, Если по каким-то причинам - Вы не хотите использовать свойства Row и Column (которые Вам и предлагал использовать Akina, смотрите сообщ.#2, 4), то есть и другие способы добраться до соседней ячейки
Private Sub Test() Dim RangeToSearch As Range, CellFind As Range, FindText As String FindText = "Чё мы ищем" Set RangeToSearch = Range("A:A") 'Columns(1) Set CellFind = RangeToSearch.Find(FindText, , xlValues, xlWhole) If Not CellFind Is Nothing Then MsgBox Cells(CellFind.Row, CellFind.Column + 1).Address 'Akina MsgBox CellFind.Next.Address MsgBox CellFind(1, 2).Address 'MsgBox CellFind.Item(1, 2).Address MsgBox CellFind.Cells(1, 2).Address MsgBox CellFind.Offset(, 1).Address 'Учитывает об'един. ячейки Else MsgBox "Ничего не найдено" End If End Sub |
Сообщ.
#9
,
|
|
|
Так, я не знал, что Row и Column будут выдавать нужные позиции, я думал, что там будет 1, 1
Добавлено Спасибо! |
Сообщ.
#10
,
|
|
|
Несмотря на то, что стандартная функция рабочего листа ПОИСКПОЗ()/MATCH() была отвергнута я всё-таки перечислю некоторые случаи, при которых применение WorksheetFunction.Match действительно приведёт к возникновению ошибки #1004 и может быть этот опус кому-нибудь да пригодится
1) Т.к. эта функция универсальна, т.е. она может искать не только в столбце, но и в строке, то при поиске нужно указывать диапазон состоящий только из одного столбца(если ищем номер строки) или из одной строки(если ищем номер столбца) Если изначально это сделать затруднительно, то можно воспользоваться, например, свойствами Columns/Rows об'екта Range, т.е. Dim iSource As Range, iFindText As String ', iRow As Variant Set iSource = Range("A1:C100") iFindText = "Что ищем ?" iRow = WorksheetFunction.Match(iFindText, iSource.Columns(1), 0) 2) Искомое значение банально отсутствует в столбце. 3) Искомое значение всё-таки наличествует, но функция его не находит, ибо чувствительна к типам, например, если мы ищем число 100, а в столбце наличествует текст "100" (или наоборот) Это кстати, очень распространённый вариант, из-за которого многие предпочитают мучить метод Find об'екта Range, который лишён этого недостатка(особенности) 4) Длина искомого текста больше 255 символов (касается и некоторых других функций, а также метода Find) P.S. И напоследок прилагается пример поиска, где нет необходимости мучить On Error Resume Next ( и т.п.) Dim iSource As Range, iFindText As Variant, iRow As Variant Set iSource = Range("A:A") 'можно указать свой столбец iFindText = 100 '"Что ищем ?" iRow = Application.Match(iFindText, iSource, 0) If Not IsError(iRow) Then ' MsgBox "Номер найденной строки #" & iRow Else MsgBox "Не срослось ..." End If |
Сообщ.
#11
,
|
|
|
Странно. Почему-то находит только при:
Set Res = .Range("Коды").Find(Int(Target), , xlValues, xlPart) а при: Set Res = .Range("Коды").Find(Int(Target), , xlValues, xlWhole) не находит ничего Target = "10" Столбец "Коды" содержит числа, без формул даже (формат ячеек - числовой) В чём дело? |
Сообщ.
#12
,
|
|
|
Если при вводе чисел не было допущено очепяток, то, по всей видимости, собака порылась именно в формате, например, указано число десятичных знаков больше 0, в результате чего 10 отображается как 10,00. Бороться с таким безобразием можно, например, так Range("Коды").Find(Target, , xlFormulas, xlWhole)
|
Сообщ.
#13
,
|
|
|
Да, собака в этом. Но там стояли не десятичные знаки, а вот так:
# ##0_ ;[Красный]-# ##0\ Разделение групп и... (пробел после?) Благодарю! Добавлено Сделал просто числовой формат 0 |