これは私の推測部分が多い記事である、ということを前置きに・・。
しかし、プロシージャや関数では、引数を ByVal (値渡し)や ByRef (参照渡し)のどちらかで受け取るかを指定できることをご存じの方も多いだろう。
値渡しと参照渡しについての差異は、仕事を依頼されたときの資料の渡され方、という例だと分かりやすいと思う。
一方はその資料をコピーするので、、自分で好き放題落書きしても元の資料には影響がない場合。これは原本の内容を変えられては困る場合などには行うことである。
もう一方は資料を共有する場合。最近はやりのエコなどの影響で、必要な部分のみ修正を入れるような時がこれに該当する。
これ、前者が値渡し/後者が参照渡しの説明なのである。
もう少し言えば、値渡しはコピーするので、その分メモリという資源を食う。コピー用紙の無駄遣いの概念に重ね合わせれば分かりやすいだろう。
参照渡しは重要なモノで元の値を変えたくない場合には適さないが、場所を食わない。置き場さえきちんと決めておけばよいが、一時に大勢で利用するには向かない。
実際の使い分けもそのようにして使い分けるとよい。
さて、VBAには直接的に「ポインタ」という概念を意識することは通常ないだろう。しかし、上記の参照渡しこそ、ポインタの概念そのものなのである。
ポインタとは、「ここの場所(アドレス)のを見てね」とその場所(アドレス)を指し示す(ポイントする)ことで、該当するモノを使い回しメモリの消費を防ぐ(だけではないだろうけど)ことが出来る技術である。コピーする時間も、コピーして新たな置き場所を確保する必要もないため、その分高速になるといえる。
ただし、注意点がある。
該当するPC内での処理ならいいのだが、LANで繋がっているPCやインターネットサイト上のPCにポインタを渡してもダメである。相手のPCはこちらのメモリのアドレスを参照できるわけではないからだ。
しかし、プロシージャや関数では、引数を ByVal (値渡し)や ByRef (参照渡し)のどちらかで受け取るかを指定できることをご存じの方も多いだろう。
値渡しと参照渡しについての差異は、仕事を依頼されたときの資料の渡され方、という例だと分かりやすいと思う。
一方はその資料をコピーするので、、自分で好き放題落書きしても元の資料には影響がない場合。これは原本の内容を変えられては困る場合などには行うことである。
もう一方は資料を共有する場合。最近はやりのエコなどの影響で、必要な部分のみ修正を入れるような時がこれに該当する。
これ、前者が値渡し/後者が参照渡しの説明なのである。
もう少し言えば、値渡しはコピーするので、その分メモリという資源を食う。コピー用紙の無駄遣いの概念に重ね合わせれば分かりやすいだろう。
参照渡しは重要なモノで元の値を変えたくない場合には適さないが、場所を食わない。置き場さえきちんと決めておけばよいが、一時に大勢で利用するには向かない。
実際の使い分けもそのようにして使い分けるとよい。
さて、VBAには直接的に「ポインタ」という概念を意識することは通常ないだろう。しかし、上記の参照渡しこそ、ポインタの概念そのものなのである。
ポインタとは、「ここの場所(アドレス)のを見てね」とその場所(アドレス)を指し示す(ポイントする)ことで、該当するモノを使い回しメモリの消費を防ぐ(だけではないだろうけど)ことが出来る技術である。コピーする時間も、コピーして新たな置き場所を確保する必要もないため、その分高速になるといえる。
ただし、注意点がある。
該当するPC内での処理ならいいのだが、LANで繋がっているPCやインターネットサイト上のPCにポインタを渡してもダメである。相手のPCはこちらのメモリのアドレスを参照できるわけではないからだ。