Если вы ищете высокую производительность, вы можете удовлетворить свои требования, используя функцию листа Excel, а не VBA.
=LEFT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),LEN(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""))-2)&"-"&RIGHT(SUBSTITUTE(SUBSTITUTE(A1,"_",""),"-",""),2)
Предполагая, что целевой диапазон начинается в ячейке A1, введите его в первую строку ископировать весь диапазон.Excel на моем компьютере сделал c.45 000 строк за <1 секунду. </p>
(Примечание: я предлагаю этот подход только потому, что вы пометили свой вопрос как excel-vba)