В вашем вопросе не указано, какую формулу вы хотите применить, и рассказывается, как вы можете применить формулу для всего столбца, если число строк неизвестно.
Несколько идей
Range("A:A") 'this grabs the entire range
Итак, вы могли бы сделать
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("A1:C2")
For Each row In rng.Rows
For Each cell in row.Cells
'logic
Next cell
Next row
Или вы можете продолжать переходить к следующему ряду, пока следующий ряд не станет пустым
dim row as integer
row = 1
do while (Range("A" & row).value<>"")
'logic
row= row + 1
loop
Ваш вопрос также указывает на то, что он выполняет весь рабочий лист только при первой его загрузке, после того как, когда вы нажмете кнопку, он не будет применять его к новым записям. Это означает, что он неправильно учитывает общее количество строк, поэтому вы можете использовать что-то подобное, чтобы гарантировать, что оно всегда проходит по всем строкам.