I looked at using TableDefs to remove field and still required the actual field name, not a field index.
CurrentDb.TableDefs("tablename").Fields.Delete("fi eldname")
So, assuming you always want the field with index 3 (that's the 4th field because index begins with 0 and Jan-17 is the 4th field, not 3rd), consider:
Code:
Sub CreateCalculatedField()
Dim rs As DAO.Recordset, strField As String
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Table1")
strField = rs.Fields(3).Name
rs.Close
CurrentDb.TableDefs("Table1").Fields.Delete (strField)
'or use SQL action statement
CurrentDb.Execute "ALTER TABLE Table1 DROP COLUMN " & strField
End Sub
However, since you are repeatedly adding and deleting fields, can't be certain field order in table is the same as displayed in the image. So need more code that cycles through the recordset field names, converts those month abbreviations to a month number to determine which is the earliest month and delete that field by name.
I also recommend you normalize data structure and retain records only for 6-month period. Delete records that are dated prior to specified date. Or just apply filter criteria to view only the desired 6-month period. I really cringe at the thought of deleting data. I guarantee you will regret it someday.