
プログラミングの初歩ではありますが。ByVal
とByRef
の違いで混乱する人がいるみたいなので。
単純化してざっくりと考えてみましょうね。

ByVal と ByRef
値渡し と 参照渡し
細かいことは置いといて、ひとまず、ByVal
とByRef
を使うとこう違うってことを考えてみましょう。
時計で考えようってことで。
ことばの違いが分かれば理解も深まるので、さいごに触れます。
VBAを前提に書いてるけど、考え方はほかのプログラミング言語でも同じ。
モジュール同士の関係をどう作るかってことを考えてね~

時計から渡してもらうことで考えよう

とにかく実践あるのみってことで。
こんな感じで考えてみよう。
時計の時分秒を使うことあるでしょ。
それぞれ、値渡しでもらうか、参照渡しでもらうか。
で、だいぶ様相が違うでしょ。

いま何時?
(何時何分何秒??)
ちなみに、クロックからの情報でその後どうこうするって処理はけっこうあるからな。
値渡し(ByVal)
値をもらったその瞬間のまま変わらない。
値渡しで時間を取得したら、その後の行でもそのまま。
たとえば、今が10:15:30(十時十五分三十秒)なら、後処理での時刻もそのまま。
タイムスタンプをファイル名に付けようとしたら、処理に何分かかっても「101530」ってことになる。
参照渡し(ByRef)
時の流れとともに変わる。
その後の処理(その後の行)でのタイミングのリアルな時間。
たとえば、今が10:15:30(十時十五分三十秒)でも、後処理での時刻はまた別の話。
タイムスタンプをファイル名に付けようとしたら、処理に何分かかったかによってどうなるか変わってくるよ。
1秒かかってからの生成なら「101531」。
1分かかってからの生成なら「101630」。
ByVal と ByRef は略称だから

どうやって覚えましょうか。
それぞれ、何の略かを覚えとけばいいんだけど。
この際どっちかで大丈夫でしょ。2つしかないんだから!
- ByVal: by Value = 値
- ByRef: by Reference = 参照
英語だから。
がんばれるよ。

ご意見やご感想などお聞かせください! コメント機能です。