Даже если вы должны вернуть объект (который сопоставляется с вариантом в COM Interop), это не решит вашу проблему. VB сможет «удержать» его и «передать», но не сможет ничего с этим поделать.
Технически, в VB нет точного эквивалента для строки [] []. Однако, если ваш массив не является «зубчатым» (то есть все подмассивы имеют одинаковую длину), вы должны иметь возможность использовать двумерный массив в качестве возвращаемого типа. COM Interop должен быть в состоянии перевести это.
string [,] myReturnValue = new string[rowCount,colCount];
Независимо от того, формально ли ваш метод возвращает объект (который будет выглядеть как Variant для VB), или строку [,] (которая будет выглядеть как массив строк в VB), это несколько несущественно. Массив String является более хорошим возвращением, но не обязательным.
Если ваш массив является неровным, то вам придется придумать другой метод. Например, вы можете сделать свой возвращаемый 2D-массив таким же большим, как самый большой из под-массивов, а затем передать информацию о длине в отдельном параметре [out] int [], чтобы VB мог знать, какие элементы используются.