■ 値渡しと参照渡し

引数の渡し方には値渡しと参照渡しがあります
普通に関数を作成すると
  Private Function Test1 (atai As Integer) As Boolean
のように記述しますが、この場合、引数 atai は渡し方を指定していないため、参照渡しとなっているのです
上記を明示的に記述するのであれば、ByRef atai As Integer となります
逆に値渡しにする場合には ByVal atai As Integer となります
この2つは意味がまったく違ったものになるので、正確に把握しておきましょう

変数 atai = 5
コピーされる →  
変数 atai = 5
Call Test1(atai)Function Test1(ByVal atai ...
値渡し
変数 atai = 5
参照アドレスを渡す → 
Call Test1(atai)Function Test1(atai ...
参照渡し

値渡しでは、引数に指定した値はコピーされるため、呼び出した関数で引数として受け取った値を変更しても
呼び出し元の変数には影響を受けません
参照渡しでは、引数に指定した値の参照アドレスを渡すため、呼び出した関数でも同じアドレスの変数を処理
することになり、呼び出し元に戻ったときに、変数の値は変わっている可能性があるのです