Try this, it chops out any invalid characters just for good measure
[vba]
Public Sub ProcessData()
Dim i As Long
Dim LastRow As Long
Dim LastCol As Long
Dim shName As String
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 5 To LastCol
shName = Left$(ValidName(.Cells(, i).Value2), 30)
.Parent.Worksheets.Add after:=.Parent.Worksheets(.Parent.Worksheets.Count)
ActiveSheet.Name = shName
.Columns("A
").Copy .Parent.Worksheets(shName).Range("A1")
.Columns(i).Copy .Parent.Worksheets(shName).Range("E1")
Next i
.Activate
End With
End Sub
Function ValidName(ByVal TheFileName As String) As String
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Pattern = "[\\/:\*\?""<>\|]"
RegEx.Global = True
ValidName = RegEx.Replace(TheFileName, "")
Set RegEx = Nothing
End Function
[/vba]