Of course if your string has a trailing vbCrLf set of codes then stripping it is the first step as p45cal inferred. One of several methods can be used to do that.
To semi-colon or not seems to be the question, in the general writing of code to not add a trailing vbCrLf for Print.
e.g.
Sub ArrayToFile() Dim F As Integer, s As String, a() As String, fn As String
fn = "c:\temp\ArrayToFile.csv"
s = "Kenneth,Ray,Hobson"
s = Replace(s, ",", "|")
a() = Split(s, "|")
s = Join(a, vbCrLf)
MsgBox s
'Save file
F = FreeFile()
Open fn For Output As F
Print #F, s;
Close F
Shell "cmd /c Notepad " & fn
End Sub