Вы можете сделать это без участия VBA.Однако этот метод довольно нелепый.Но, просто для удовольствия ...
В ячейку B4
Я поместил одну из строк, которую вы хотите "разобрать":
B4: pcmsh15(232);pcmsh16(232);pcmsh17(136);
Затем я поместил следующие формулы в ячейкиуказано:
B6: =SUBSTITUTE(B4,"pcmsh", """dummy")
B8: =SUBSTITUTE(B6,"(",""";")
B10: =SUBSTITUTE(B8,")","")
B12: =MID(B10, 1, LEN(B10)-1)
B14: ="{"&B12&"}"
Преобразует начальный текст в текстовое представление допустимого массива Excel:
B14: {"dummy15";232;"dummy16";232;"dummy17";136}
Вы можете заставить Excel оценить эту строку и вернуть фактический массив с помощью следующеготрюк.Создайте именованную формулу, которую мы назовем eval_left
.Убедитесь, что ячейка C14
выбрана при создании именованной формулы:
=EVALUATE(B14)
Обратите внимание, что в формуле используется относительная ссылка, поэтому, если вы используете это имя из ячейки, отличной от C14
, вы 'Вы увидите, что B14
изменился на любую ячейку слева.
Используется старая макрос-функция Excel 4 EVALUATE
, которая принимает строку и возвращает значение, которое представляет эта строка.Теперь мы можем поместить окончательную формулу в ячейку C14
:
C14: =SUM(eval_left)
Поскольку SUM
игнорирует нечисловые строки, вы получите нужный ответ без VBA.(Вы все еще получаете предупреждение о макросе, хотя из-за использования EVALUATE
.)
Как я уже сказал, я считаю это просто забавным любопытством.Вам намного лучше использовать VBA для подобных вещей.
РЕДАКТИРОВАТЬ:
В маловероятном случае, когда вы захотите сделать что-то подобное, вы столкнетесь с пределом длиныEVALUATE
может справиться.Вам придется разделить более длинные строки на менее чем 65 значений, не использовать «пустышку» и т. Д., Но это все равно будет выполнимо.