Здравствуйте! Подскажите пож-та, есть ли альтернатива перебору всех строк таблицы в цикле для задачи поиска строки в таблице? Т.е. есть строка с значением, на листе есть таблица (границы таблицы, если нужно, можно узнать). Нужно узнать есть ли значение строки в таблице. Можно перебором в цикле, но таблица большая и очень много нужно проверить строк. Можно ли одной командой сделать эту проверку? Спасибо!
Здравствуйте! Подскажите пож-та, есть ли альтернатива перебору всех строк таблицы в цикле для задачи поиска строки в таблице? Т.е. есть строка с значением, на листе есть таблица (границы таблицы, если нужно, можно узнать). Нужно узнать есть ли значение строки в таблице. Можно перебором в цикле, но таблица большая и очень много нужно проверить строк. Можно ли одной командой сделать эту проверку? Спасибо!Serega-Sol
[/vba] на листе есть табл в А1:А30, пытаюсь найти в ней строку st
[vba]
Код
With ThisWorkbook.Worksheets("Маркеры")
st = "маркер_1" n = WorksheetFunction.Match(st, .Range(.Cells(1, 1), .Cells(.Range("A1").CurrentRegion.Rows.Count, 1)))
End With
[/vba] n = 1, если st = первой строки таблицы, но почему то n = последней строки во всех остальных случаях. Таблица будет добавляться, поэтому крайнюю строку нужно рассчитать [vba]
Код
.Range("A1").CurrentRegion.Rows.Count
[/vba] Что не так?
немного не пойму как работает этот метод [vba]
Код
Application.WorksheetFunction.Match
[/vba] на листе есть табл в А1:А30, пытаюсь найти в ней строку st
[vba]
Код
With ThisWorkbook.Worksheets("Маркеры")
st = "маркер_1" n = WorksheetFunction.Match(st, .Range(.Cells(1, 1), .Cells(.Range("A1").CurrentRegion.Rows.Count, 1)))
End With
[/vba] n = 1, если st = первой строки таблицы, но почему то n = последней строки во всех остальных случаях. Таблица будет добавляться, поэтому крайнюю строку нужно рассчитать [vba]
n = WorksheetFunction.Match("маркер_4", ThisWorkbook.Worksheets("Маркеры").Range("A1:A30"), 0)
[/vba] переменной n возвращается 4 - это номер строки в табл. Т.е. строка "маркер_4" в таблице есть. Все норм. Но выскакивает на ошибку, если строки в таблице нет. Напр: [vba]
Код
n = WorksheetFunction.Match("привет", ThisWorkbook.Worksheets("Маркеры").Range("A1:A30"), 0)
[/vba] Как мне записать условие по обработке "если искомой строки нет в таблице, то выполнить некие действия..."? Спасибо.
извиняюсь, не разберусь... в этом коде [vba]
Код
n = WorksheetFunction.Match("маркер_4", ThisWorkbook.Worksheets("Маркеры").Range("A1:A30"), 0)
[/vba] переменной n возвращается 4 - это номер строки в табл. Т.е. строка "маркер_4" в таблице есть. Все норм. Но выскакивает на ошибку, если строки в таблице нет. Напр: [vba]
Код
n = WorksheetFunction.Match("привет", ThisWorkbook.Worksheets("Маркеры").Range("A1:A30"), 0)
[/vba] Как мне записать условие по обработке "если искомой строки нет в таблице, то выполнить некие действия..."? Спасибо.Serega-Sol
Serge_007, снова затык у меня, помоги пож-та. Не могу понять почему не работает этот код: [vba]
Код
n = 0: n = WorksheetFunction.Match("маркер_1", rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров n = 0: n = WorksheetFunction.Match(mas(l), rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров
[/vba] при пошаговом выполнении первая строка возвращает значение "4" - тут все верно, а вот вторая строка возвращает 0. элемент массива mas(l) так же равен "маркер_1". Т.е. Match работает, если указана строка явно, а если в виде переменной, то нет. Массив определил так: [vba]
Код
Dim mas() As String
[/vba] Так то же не работает: [vba]
Код
s = mas(l) n = 0: n = WorksheetFunction.Match(s, rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров
[/vba] rg это диапазон ячеек: [vba]
Код
Set rg = .Range(.Cells(1, 1), .Cells(.Range("A1").CurrentRegion.Rows.Count, 1))
[/vba] Почему так получается? Спасибо.
Serge_007, снова затык у меня, помоги пож-та. Не могу понять почему не работает этот код: [vba]
Код
n = 0: n = WorksheetFunction.Match("маркер_1", rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров n = 0: n = WorksheetFunction.Match(mas(l), rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров
[/vba] при пошаговом выполнении первая строка возвращает значение "4" - тут все верно, а вот вторая строка возвращает 0. элемент массива mas(l) так же равен "маркер_1". Т.е. Match работает, если указана строка явно, а если в виде переменной, то нет. Массив определил так: [vba]
Код
Dim mas() As String
[/vba] Так то же не работает: [vba]
Код
s = mas(l) n = 0: n = WorksheetFunction.Match(s, rg, 0) 'проверяем - есть ли строка (элемент массива) в таблице с названием маркеров
[/vba] rg это диапазон ячеек: [vba]
Код
Set rg = .Range(.Cells(1, 1), .Cells(.Range("A1").CurrentRegion.Rows.Count, 1))