For Each自体は良いものだ。しかし、

ひとつのシーケンスしか扱えない
→ arr1(i) + arr2(i) を簡単に書けない

同時に複数の要素にアクセスできない
→ arr(i+1) - arr(i) を簡単に書けない

コピーなので代入ができない(配列)
→ Each z... z = z * 2 とできない

コピーコストがある(配列)
→ ただループを回すだけで時間がかかることがある

というようなトレードオフがある。
最初の二つは標準のコンテナライブラリが充実してる言語だと大した問題にならないが、VBAにはそういうものがない。
For Eachの使いどころは相対的に狭いと思う。