Variant型は調べれば調べるほど「???」ってなるから気をつけて
VB.Netでは廃止されたくらいの型だから

俺も最初調べててVariant型って内部型とか持ってるし
代入したものの参照でも抱えているだけのものと高を括ってたけど
Variant型の配列を作ってある要素には値型、ある要素には参照型を設定して関数の引数に値渡しで渡すと
きちんと値型の部分は値が、参照型の部分は参照が渡されるのは少し前にレスした通り

そもそも何で配列の値渡しは出来ないのにVariant型に入れると値渡しが出来るような思想で作られているのかも謎。そういうものだと思う他ない。

VBAがObject指向に片足を突っ込んでいるところで止まっているせいか、Objectでもそうでないものも代入出来る型として存在していて使い勝手が良い反面、
コンパイル時に内部型が違う場合でもエラーにならないから実行時に初めてエラーとなって気がついたり、
違う型のものを上書いてしまってエラーとならずに期待した挙動と変わってしまう場合が出て来る恐ろしい型でもある。

Variant型を使うなとは言えないけど
使う際にはその特性と挙動を十分把握していないと、ちょっと何か変わったことをしただけで期待した結果が得られないことになり得るから十分気をつけてね。