The laziest way is
s = join(Application.WorksheetFunction.Transpose([a1:a400]), ",")
This works because .Value
property of a multicell range returns a 2D array, and Join
expects 1D array, and Transpose
is trying to be too helpful, so when it detects a 2D array with just one column, it converts it to a 1D array.
In production it is advised to use at least a little bit less lazy option,
s = join(Application.WorksheetFunction.Transpose(Worksheets(someIndex).Range("A1:A400").Value), ",")
otherwise the active sheet will always be used.