まず、考え方としましては、Excelのバージョンに関わりなく、ワークシート上に存在する行(未使用の行も含む)の中で最下段の行の行番号は、1つの列の中に含まれている行数に等しいのですから、
=ROWS(A:A)
とか
=ROWS(Z:Z)
等の様な関数を使えば、最下段の行の行番号を求める事が出来ます。(なるべくなら、ROWS関数内で参照する列は、その関数を入力するセルが存在している列を使った方が、誤って列を削除したりする事に対する安全策となります)
この事を利用して、例えばA3以下にある文字列の入ったセルの個数を求める際には、次の様な関数にされると良いと思います。
=COUNTA($A3:INDEX(A:A,ROWS(A:A)))
但し、COUNTA関数では、関数が入力されているセルで、関数によって表示が空欄となっているものも、カウントしてしまいます。
つまり、一見すると空欄となっているセルばかりであっても、COUNTA関数の戻り値が0にはならない場合もあり得る訳です。
ですから、数値が入力されているセルの個数を求めるCOUNT関数と、条件に合致しているセルの個数を求めるCOUNTIF関数を組み合わせて、次の様にされた方が、関数によって空欄となっているセルを誤ってカウントに含めてしまう事がありませんので、御勧め致します。
=COUNTIF($A3:INDEX(A:A,ROWS(A:A)),"*?")+COUNT($A3:INDEX(A:A,ROWS(A:A)))