I'd use a loop to check the cell values in your header row. You could record some parts of this like the column insert, but most of this you will need to write code or copy from a good example and modify to meet your requirements. I'm giving 2 examples one checking the column names within a sub procedure and the other example is using a Function to return true/false based on the results. For simplicity used the number 20 to check 1-20 columns or loop until a match is found. You'd need to set a higher number if you have more columns or check the number of used cells and set a variable for the columns used.
Code:
' Example checking column names
' used integer 20 to check through column 20
Sub checkcol()
Dim numCol As Integer
Dim strName As String
Dim bExists As Boolean
Dim i As Integer
numCol = 20
strName = "MyCol"
bExists = False
For i = 1 To numCol
colName = ActiveSheet.Cells(1, i)
If UCase(strName) = UCase(colName) Then
bExists = True
Exit For
End If
Next
If Not bExists Then
Columns(4).Insert
With Cells(1, 4)
.Value = strName
.Font.Bold = True
End With
End If
End Sub
' Here is a function you can call from a sub proc.
' Then take action based on true or false return
' bColExists = fColumnExists("MyCol")
Function fColumnExists(strName) As Boolean
Dim numCol As Integer
Dim bExists As Boolean
Dim i As Integer
numCol = 20
For i = 1 To numCol
colName = ActiveSheet.Cells(1, i)
If UCase(strName) = UCase(colName) Then
fColumnExists = True
Exit For
End If
Next
End Function