Здравствуйте форумчане, помогите с формулой, если это конечно возможно с помощь нее сделать. Есть файл (во вложении), там производят запись такого вида "4 от 13;15 от 6;7 от 9;15;4 от 18" примерно, она может изменять, т.е. "4 от 15" и т.д. Но единственное что, всегда новое значение идет после знака ";". мне важно вытащить только цифры после знака ";" после "от" меня не интересуют, а потом сложить. Должно получиться примерно это "4+15+7+15+4 = 59", т.е. мне важно число только 59.
Здравствуйте форумчане, помогите с формулой, если это конечно возможно с помощь нее сделать. Есть файл (во вложении), там производят запись такого вида "4 от 13;15 от 6;7 от 9;15;4 от 18" примерно, она может изменять, т.е. "4 от 15" и т.д. Но единственное что, всегда новое значение идет после знака ";". мне важно вытащить только цифры после знака ";" после "от" меня не интересуют, а потом сложить. Должно получиться примерно это "4+15+7+15+4 = 59", т.е. мне важно число только 59.monstr_ork
Светлый, Да, она работает, но т.к. я не правильно написал, там формула считает 18, а не 4 в конце. Может поправите пожалуйста, потому что я ни чего в ней не понимаю [offtop]Буду очень благодарен, если напишите как она работает, ну это чисто для меня. для развития[/offtop]
Светлый, Да, она работает, но т.к. я не правильно написал, там формула считает 18, а не 4 в конце. Может поправите пожалуйста, потому что я ни чего в ней не понимаю [offtop]Буду очень благодарен, если напишите как она работает, ну это чисто для меня. для развития[/offtop]monstr_ork
Function monstr_ork(t As String) With CreateObject("VBScript.RegExp") .Global = True .Pattern = " от \d+" q = Split(.Replace(t, ""), ";") For i = 0 To UBound(q) monstr_ork = monstr_ork + Val(q(i)) Next End With End Function
Function monstr_ork(t As String) With CreateObject("VBScript.RegExp") .Global = True .Pattern = " от \d+" q = Split(.Replace(t, ""), ";") For i = 0 To UBound(q) monstr_ork = monstr_ork + Val(q(i)) Next End With End Function
Сначала заменяет " от " на ";", потом все ";" заменяет на 99 пробелов каждую. Потом в массив извлекает фрагменты получившейся строки по 99 символов с пропуском между ними по 99 символов. В этих фрагментах удаляет пробелы, слева присоединяет незначащий 0. (для чисел он ничего не меняет, а для пустых фрагментов он предотвращает появление ошибки при операции "--") -- преобразует текстовые фрагменты в числа и СУММ их суммирует. Таким образом получаем сумму нечётных (по порядку нумерации слева направо) чисел из исходной строки. Эта формула не обращает внимания на ; и от . Если это возможно, лучше исправить исходные данные, чтобы они были парами 4 от 9;7 от 20 и т.д. а там встречается ;15;
Сначала заменяет " от " на ";", потом все ";" заменяет на 99 пробелов каждую. Потом в массив извлекает фрагменты получившейся строки по 99 символов с пропуском между ними по 99 символов. В этих фрагментах удаляет пробелы, слева присоединяет незначащий 0. (для чисел он ничего не меняет, а для пустых фрагментов он предотвращает появление ошибки при операции "--") -- преобразует текстовые фрагменты в числа и СУММ их суммирует. Таким образом получаем сумму нечётных (по порядку нумерации слева направо) чисел из исходной строки. Эта формула не обращает внимания на ; и от . Если это возможно, лучше исправить исходные данные, чтобы они были парами 4 от 9;7 от 20 и т.д. а там встречается ;15;Светлый
Программировать проще, чем писать стихи.
Сообщение отредактировал Светлый - Четверг, 05.04.2018, 11:26
Светлый, мне не важно какое число, четное или нет. Это просто подсчет первое число это шт. а второе это дата. Но очень благодарен за разбор формулы. А почему вы берете диапозон строк до 19? Это что то значит или просто как пример взяли? sboy, спасибо за функцию.
Светлый, мне не важно какое число, четное или нет. Это просто подсчет первое число это шт. а второе это дата. Но очень благодарен за разбор формулы. А почему вы берете диапозон строк до 19? Это что то значит или просто как пример взяли? sboy, спасибо за функцию.monstr_ork