Here is my code adjusted to delete all the rows together. Please use the whole code because I have added variables etc. Hopefully this will run much faster. It will be interesting to find out.
How the code collects all the rows
Rather than use an array, I have instead made use of Union which allows you to join ranges together.
Set Del_RngA = Union(Del_RngA, TableA(i))
and then deleted the range comprising all the rows with
Del_RngA.EntireRow.Delete
In case you are wondering, the first "Set" of Del_RngA etc is the last row in Excel because I had to use something that could be safely deleted later. The Union would not work without the range being Set earlier in the code!
The whole code is now
Sub Delete_Row_If_No_Match_In_ColA()
'declare variables etc
Dim i As Integer, LastRowA As Long, LastRowB As Long
Dim TableA As Range, TableB As Range, Del_RngA As Range, Del_RngB As Range
'determine last rows and set ranges
LastRowA = Worksheets("SheetA").Range("A1048576").End(xlUp).Row
LastRowB = Worksheets("SheetB").Range("A1048576").End(xlUp).Row
Set TableA = Worksheets("SheetA").Range("A2:A" & LastRowA)
Set TableB = Worksheets("SheetB").Range("A2:A" & LastRowB)
Set Del_RngA = Worksheets("SheetA").Range("A1048576")
Set Del_RngB = Worksheets("SheetB").Range("A1048576")
'now delete anything in SheetA not in sheet B
For i = LastRowA To 1 Step -1 ' Loop backwards if deleting rows
If IsError(Application.Match(TableA(i).Value, TableB, 0)) Then
Set Del_RngA = Union(Del_RngA, TableA(i))
End If
Next i
Del_RngA.EntireRow.Delete
'now delete anything in SheetB not in sheet A
For i = LastRowB To 1 Step -1 'Loop backwards if deleting rows
If IsError(Application.Match(TableB(i).Value, TableA, 0)) Then
Set Del_RngB = Union(Del_RngB, TableB(i))
End If
Next i
Del_RngB.EntireRow.Delete
End Sub