Есть диапазон "Лист1!H7:J" В нем находится много-много различного текста. Также в столбце E7:E на Лист1 - находятся отметки года.
На листе "Список" - находится таблица, которую нужно заполнить. В ячейке C5 - этого листа (над таблицей) - указан год. В столбце "B" этой таблицы находятся ключевые слова.
Как пользовательской функцией извлечь из диапазона "Лист1!H7:J" - от ключевого слова - до ограничителя - числовые отметки и просуммировать их с учетом года (заданного в ячейке C5) ?
(ограничитель это что угодно, что не является числом, например символ "," или "-" или просто буква. Например в текстовой отметке "mw.я5," - по ключевому слову mw.я будет извлечено число до первого символа не являюзегося цифрой - то есть "5")
Здравствуйте. Помогите решить задачу.
Есть диапазон "Лист1!H7:J" В нем находится много-много различного текста. Также в столбце E7:E на Лист1 - находятся отметки года.
На листе "Список" - находится таблица, которую нужно заполнить. В ячейке C5 - этого листа (над таблицей) - указан год. В столбце "B" этой таблицы находятся ключевые слова.
Как пользовательской функцией извлечь из диапазона "Лист1!H7:J" - от ключевого слова - до ограничителя - числовые отметки и просуммировать их с учетом года (заданного в ячейке C5) ?
(ограничитель это что угодно, что не является числом, например символ "," или "-" или просто буква. Например в текстовой отметке "mw.я5," - по ключевому слову mw.я будет извлечено число до первого символа не являюзегося цифрой - то есть "5")kNNeR
Function parse(r, p$) s = 0 With CreateObject("VBScript.RegExp") .Pattern = "(" & p & ")(\d+)" For Each cell In r If .test(cell) Then s = s + .Execute(cell)(0).SubMatches(1) Next End With parse = s End Function
проблемой отсутствия года в каждой строке не занимался - тупо протянул
сама UDF parse[vba]
Код
Function parse(r, p$) s = 0 With CreateObject("VBScript.RegExp") .Pattern = "(" & p & ")(\d+)" For Each cell In r If .test(cell) Then s = s + .Execute(cell)(0).SubMatches(1) Next End With parse = s End Function
проблемой отсутствия года в каждой строке не занимался - тупо протянул
Подскажите - как же сделать так , чтобы функция - не считала те строки - в которых не проставлен год ?
У меня же написано в вопросе - что речь идет о диапазоне "Лист1!H7:J" То есть J - не имеет конкретного адреса строки - он идет вниз от 7 строки до бесконечности. А у вас указана 33 строка: Лист1!$H$7:$J$33
В общем почему-то если диапазон составляет 2000 строк - эта функция выдает ошибку формулы "#ЗНАЧ"
проблемой отсутствия года в каждой строке не занимался - тупо протянул
Подскажите - как же сделать так , чтобы функция - не считала те строки - в которых не проставлен год ?
У меня же написано в вопросе - что речь идет о диапазоне "Лист1!H7:J" То есть J - не имеет конкретного адреса строки - он идет вниз от 7 строки до бесконечности. А у вас указана 33 строка: Лист1!$H$7:$J$33
В общем почему-то если диапазон составляет 2000 строк - эта функция выдает ошибку формулы "#ЗНАЧ"kNNeR
Сообщение отредактировал kNNeR - Воскресенье, 08.11.2020, 21:49
в общем это только слова, не подкрепленные примером
зато вы нарушаете правила двух форумов и игнорируете замечания модераторов - дело ваше, конечно, но рассчитывать на помощь с таким отношением весьма самонадеянно
в общем это только слова, не подкрепленные примером
зато вы нарушаете правила двух форумов и игнорируете замечания модераторов - дело ваше, конечно, но рассчитывать на помощь с таким отношением весьма самонадеяннопрохожий2019
не только моя UDF, но и любая экселевская функция выдаст ошибку
Нет, я записываю нормально. И в общем - функция тоже работает нормально.
Но есть одно ограничение. Функция работает только тогда - когда текст во всех ячейках диапазона - либо отсутствует вовсе, либо короткий. Если текст хотя бы в одной ячейке из указанного диапазона - длинный (например 400 символов) - то функция тут же выдает ошибку. Она почему-то не может воспринимать длинный текст в ячейке.
Мне вот этот момент непонятен - почему пользовательская функция может воспринимать короткий текст, и не может воспринимать длинный текст. Нигде в коде записей об ограничении количества символов - я не вижу.
не только моя UDF, но и любая экселевская функция выдаст ошибку
Нет, я записываю нормально. И в общем - функция тоже работает нормально.
Но есть одно ограничение. Функция работает только тогда - когда текст во всех ячейках диапазона - либо отсутствует вовсе, либо короткий. Если текст хотя бы в одной ячейке из указанного диапазона - длинный (например 400 символов) - то функция тут же выдает ошибку. Она почему-то не может воспринимать длинный текст в ячейке.
Мне вот этот момент непонятен - почему пользовательская функция может воспринимать короткий текст, и не может воспринимать длинный текст. Нигде в коде записей об ограничении количества символов - я не вижу.kNNeR