Passing a 1D array (single column of a Range object) to .NET to manipulate it without loops and returning it back to VBA
I don't know much about VBA or COM, so I'm going to focus on the single C# function:

If you know that all elements in the input sequence are of the same type, you should use Cast, not OfType. OfType filters out all elements of the wrong type, which could easily hide bugs.



You don't need to call ToList to start using LINQ methods, they work on anything that's IEnumerable&lt;T&gt;, which includes the results of Cast and OfType.



When calling a method like Distinct, you don't need to specify the type parameter (string in your case), the compiler is able to infer it itself.