昔々、VBAの先祖であるBASICには、サブルーチン(Subプロシージャ)しかなく、関数という概念がありませんでした
更に、変数はすべてプロシージャの外で宣言し利用されていました
しかし、これでは大変見づらいし使いづらいしで大変だったため、あるとき「関数」と「スコープ」という概念を取り入れました
これにより、実行すると内部で計算を行いただ一つの値を返すFunctionプロシージャが誕生しました
一方で、Subプロシージャにもスコープの概念が取り入れられ、引き続き使われました

要は、使い方次第でどちらをどのように使ってもOK
ただ>>36の人も書いたとおり、Functionプロシージャはマクロとして直接実行することはできない
他方、Subプロシージャはワークシート上から直接実行することはできない