Hi Andy,
Yes, this can be done of course. For this kind of application, you need to control the flow of your code. To do that, you've to closely monitor each one of your instructions on how they react to when you execute them. Following is the code what I have used to cater your needs. Am also attaching your sample file on which I have worked.
Sub AutoFillColumn()
Dim firstcell As Range
Dim lastcell As Range
Dim v_count As Long
Sheet1.Activate
Sheet1.Range("A1").Select
Set firstcell = ActiveCell
Set lastcell = firstcell.End(xlDown)
v_count = firstcell.Offset(0, 1).End(xlDown).Row - firstcell.Row
For i = 1 To v_count
Range(firstcell, Cells(lastcell.Row - 1, lastcell.Column)).Select
If Selection.Count > 1000000 Then
Range(firstcell, Cells(v_count + 1, lastcell.Column)).Select
End If
If Selection.Count > 1 Then Selection.FillDown
LastPart:
If Selection.End(xlDown).Row = v_count + 1 Then Exit For
Set firstcell = firstcell.End(xlDown)
Set lastcell = firstcell.End(xlDown)
firstcell.Select
Next i
End Sub
I have used column B to get the total filled count so that we can get an bottom limit. This is used to ensure when we reach the last filled row and when there is no bottom limit to the rows when trying to find next filled row.
v_count = firstcell.Offset(0, 1).End(xlDown).Row - firstcell.Row
Hope, this helps! 
P.S. I have changed the file format to xlsm so that the macro gets included as xlsx won't store macro codes.
Bookmarks