How about:
Public Function CSVList(rng As Range) As String
Dim r As Range, ary1, ary2
For Each r In rng
v = r.Text
If InStr(1, v, "-") = 0 Then
CSVList = CSVList & "," & v
Else
ary = Split(v, "-")
For i = CLng(ary(0)) To CLng(ary(1))
CSVList = CSVList & "," & CStr(i)
Next i
End If
Next r
CSVList = Mid(CSVList, 2)
End Function

or:

EDIT#1:
This UDF treats any non-numeral as a separator:
Public Function CSVList2(rng As Range) As String
Dim r As Range, ary1, ary2, L As Long, i As Long, C As String
For Each r In rng
v = r.Text
L = Len(v)
C = ""
For i = 1 To L
If Not Mid(v, i, 1) Like "[0-9]" Then C = Mid(v, i, 1)
Next i
If C = "" Then
CSVList2 = CSVList2 & "," & v
Else
ary = Split(v, C)
For i = CLng(ary(0)) To CLng(ary(1))
CSVList2 = CSVList2 & "," & CStr(i)
Next i
End If
Next r
CSVList2 = Mid(CSVList2, 2)
End Function