Здравствуйте. Решил тут на работе ускорить рутинные процессы и вот, встал вопрос. Я получаю из автокада такой файл (примерно), как в примере. E-I (Уровни неких элементов по длинам) таблица 20 столбцов Х МНОГО строк. (пока 100 строк, может быть больше). Т.е, Элемент L1 - на уровне 1 и 2, L2 - на ур. 3,4,5 и т.д. K - уровни поврежденных элементов. На выходе нужно получить таблицу с разбиением поврежденных элементов по длинам. Таблицу руками составил.
Т.е, получается, в строке 6: Сравниваем E6 и К6 - совпали 1 и 2, в результате M6=2 F6 и K6 - ответ в N6=0, т.к. 3,4,5 в К6 нет.
Кажется, понятно описал?
В общем, нужно посчитать, сколько символов совпадает с символами в ячейках столба К. Я так, понимаю, там нужно массивами делать?
Здравствуйте. Решил тут на работе ускорить рутинные процессы и вот, встал вопрос. Я получаю из автокада такой файл (примерно), как в примере. E-I (Уровни неких элементов по длинам) таблица 20 столбцов Х МНОГО строк. (пока 100 строк, может быть больше). Т.е, Элемент L1 - на уровне 1 и 2, L2 - на ур. 3,4,5 и т.д. K - уровни поврежденных элементов. На выходе нужно получить таблицу с разбиением поврежденных элементов по длинам. Таблицу руками составил.
Т.е, получается, в строке 6: Сравниваем E6 и К6 - совпали 1 и 2, в результате M6=2 F6 и K6 - ответ в N6=0, т.к. 3,4,5 в К6 нет.
Кажется, понятно описал?
В общем, нужно посчитать, сколько символов совпадает с символами в ячейках столба К. Я так, понимаю, там нужно массивами делать?Zelbr
Function Ex(ByRef Повреждения As Range, ByRef Уровень As Range) As Integer Ex = 0 sLevel = Split(Уровень.Value, ",") sBreak = Split(Replace(Повреждения.Value, "\P", ""), ",") For x = LBound(sLevel) To UBound(sLevel) For y = LBound(sBreak) To UBound(sBreak) If sLevel(x) = sBreak(y) Then Ex = Ex + 1 Next y Next x End Function
[/vba]
Вариант пользовательской функцией [vba]
Код
Function Ex(ByRef Повреждения As Range, ByRef Уровень As Range) As Integer Ex = 0 sLevel = Split(Уровень.Value, ",") sBreak = Split(Replace(Повреждения.Value, "\P", ""), ",") For x = LBound(sLevel) To UBound(sLevel) For y = LBound(sBreak) To UBound(sBreak) If sLevel(x) = sBreak(y) Then Ex = Ex + 1 Next y Next x End Function
\P - так автокад, откуда я данные получаю, обозначает "Энтер". Без него чертеж будет выглядеть пострашнее, чем сейчас. А это поможет избавиться от тех ошибок, что сейчас получились? Можно, в принципе, сделать промежуточную колонку, где избавиться от подставить вместо \Р пустоту.
\P - так автокад, откуда я данные получаю, обозначает "Энтер". Без него чертеж будет выглядеть пострашнее, чем сейчас. А это поможет избавиться от тех ошибок, что сейчас получились? Можно, в принципе, сделать промежуточную колонку, где избавиться от подставить вместо \Р пустоту.Zelbr