В отладчике видно что в Массив2 2 элемента "Петя","Вася". Но на листе екселя в обеих строках "Петя","Петя." Т.е. берет первый элемент и пихает его во все строки.
Range.Value - двумерный, поэтому COMSafeArray нужно тоже создавать двумерным, с количеством элементов по второму измерению - 1
COMSafeArray(массив,"VT_BSTR",2,1)
Кстати вызовы через COM/OLE довольно долгие
На больших объемах выгодней сохранить из 1С файлик типа csv и запустить VBA код, который прочитает его, заполнив книгу excel как надо
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший