If the columns in question have a specific value at the top, a header, then you can spot the location of the column(s) at any given moment by searching for that specific value in the row the headers are found in, typically row1.
Sub CreateExportSheet()
Dim ColCopy As Long
Dim Dest As Worksheet
If Evaluate("ISREF('Export Sheet'!A1)") Then
MsgBox "The sheet Export Sheet already exists"
Exit Sub
Else
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Export Sheet"
End If
Application.ScreenUpdating = False
Set Dest = Sheets("Export Sheet")
On Error Resume Next
With Sheets("Sheet1")
ColCopy = .Rows(1).Find("First Name", After:=.Cells(1, .Columns.Count), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
If ColCopy > 0 Then
.Columns(ColCopy).Copy Dest.Range("A1")
ColCopy = 0
End If
ColCopy = .Rows(1).Find("Last Name", After:=.Cells(1, .Columns.Count), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
If ColCopy > 0 Then
.Columns(ColCopy).Copy Dest.Range("B1")
ColCopy = 0
End If
ColCopy = .Rows(1).Find("Telephone", After:=.Cells(1, .Columns.Count), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
If ColCopy > 0 Then
.Columns(ColCopy).Copy Dest.Range("C1")
ColCopy = 0
End If
'...etc
End Sub
It's lengthy, but robust...
Bookmarks