Помогите разобраться с настройками поиска ( методом Find )

Автор Николай Николаевич, 01.10.2012, 18:53

« назад - далее »

Николай Николаевич

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

Значение из колонки "B" листа "ДЗ" ищется в колонке "B" листа "ДЗ_нов".
Макрос пока не нашел ни одной записи. Для интереса перед очередным запуском программы, можно руками скопировать данные из листа "ДЗ_нов" в лист "ДЗ", чтобы точно убедиться, что данные совпадают. Но мне не помогло.
Но я надеюсь, что Вы подскажете, какой параметр к методу Find надо добавить для правильной работы поиска.

Заранее признателен за помощь.
NULL

kuklp

Тильда(~) - это спецсимвол. Чтоб его искать, нужно перед ним поставить еще одну тильду. Т.е. в строке поиска надо писать [x~~Жc- вместо [x~Жc-
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Николай Николаевич

Спасибо большое.

Конечно, искать и менять необходимо все возможные символы, которые Excel понимает своеобразно.
Не подскажете, где можно взять полный набор таких символов?

И, на всякий случай, точно нельзя указать параметр, например, "двоичного сравнения", чтобы программисту не заморачиваться поиском, в поступающих на обработку данных, специальных для Excel символов?
NULL

kuklp

Например "*" - любое к-во любых символов, или "?" - один любой символ. Чтобы их искать, надо ставить перед ними тильду. Для двоичного сравнения могут использоваться например, операторы instr, или знак равенства(для полной ячейки). Но тогда Вам придется перебирать ячейки циклом, что медленно. Можно пользоваться функцией листа match. Я приводил пример в теме:
https://forum.msexcel.ru/proekty_vba/perenos_dannyh_diapazonom_pomogite_s_sintaksisom-t8619.0.html
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Николай Николаевич

Заменил Find на Match. Мне не помогло.
Пример с Match привел.

Возможно, неправильно использовал предложенные функции.
Пожалуйста, помогите.
NULL

kuklp

Да, там тоже надо учитывать подстановочные знаки. Попробуйте:
Function Find_key_rdz(cKey As String, cNewList_NewDZ As String, _
                                        nRowEnd_NewDZ As Long) As Long
Dim rCells As Range
Dim rCell As Range
   
    Find_key_rdz = 0
    With Sheets(cNewList_NewDZ)
    cKey = Replace(Replace(Replace(cKey, "~", "~~"), "*", "~*"), "?", "~?")
    Set rCells = .Range(.Cells(1, 2), .Cells(nRowEnd_NewDZ, 2)) ' Задание диапазона поиска
    Set rCell = rCells.Find(What:=cKey, LookAt:=xlWhole, MatchByte:=-1) ' Поиск cKey в заданном диапазоне
    If Not rCell Is Nothing Then
        Find_key_rdz = rCell.Row
    End If
    End With   
End Function

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Николай Николаевич

С заменой "специальных" символов все записи, которые были в таблице,
находит, как положено.

Большое спасибо.
NULL