Essa macro só funciona enquanto não há dado na célula. Quando há dado, dá erro na linha do if.
Gostaria que a macro preenchesse todo o intervalo mencionado dentro dela.
Sub gerar()
col = 1
While col < 20
lin = 0
While lin < 20
lin = lin + 1
If Not Cells(lin, col) Then
Cells(lin, col) = "x"
End If
Wend
col = col + 1
Wend
End Sub