スポンサーリンク

Excel VBAエキスパート体験記11(値渡しと参照渡し)

VBAエキスパート

前回はExcel VBAエキスパートスタンダード1章のFunctionの勉強をしました。
前回の記事はこちら

今回はスタンダードの値渡しと参照渡しについてレポートしていきます。

なお今回もわかった文言を絵や表を使ってまとめていくことにします

理解が間違っているところもあるかもしれませんがわからない人と同じ視点に立てるのは今しかないので細かいところはご容赦ください。
間違えに気づいたら修正していきます(笑)。

なおこの体験記は短時間で効率よく勉強することを目的として書いていますので勉強の際に参考にしてもらえれば幸いです。

<今回の目的>

値渡しと参照渡しを理解する

今回の勉強方法
  1. 1章を精読する
  2. 値渡し参照渡しをわかりやすく説明する

スポンサーリンク

今の立ち位置

以前の記事で説明しましたが私の今の立ち位置は以下です。

概要内容勉強時間完了の有無
(Basic)
完了の有無
(Standard)
1 公式テキストの購入安く購入できる方法を探す1時間1時間済
2 公式テキストの把握テスト形式、単元を知る1時間15分済7分済
3 公式テキスト問題集実施1スタンダード2回、ベーシックで1回実施4時間50分済30分
4 公式テキスト勉強(×部分)間違えた単元の勉強を実施。暗記はボイスメモで3時間1時間10分
5 公式テキスト勉強(〇部分)会っていた単元の勉強を実施。暗記はボイスメモで3時間1時間
6 公式テキスト問題集実施2スタンダード 3回実施4時間
7 3~6の繰り返し3セット実施20時間
 36時間4時間5分47分

今回は第1章の値渡し参照渡しについて説明します。

結論

いきなりですが今回の結論です。

値渡し:関数に読み取り専用の変数を渡す

参照渡し:関数に編集可能な変数を渡す

値渡しと参照渡しとは?

値渡しと参照渡しとは関数に変数を(引数として)渡すときの「渡し方の種類」です。

言い換えると関数にデータを渡すときにどういったものにするかを考えているということです。

この議論が出ているのは前回Functionをならったことによるものです。Function事態関数ですので。


ちなみに値渡しで渡す場合は引数の最初に「ByVal」(By Value)、参照渡しで渡す場合は「ByRef」(By Reference)を変数の前につけることになっています。

値渡しを分かりやすく説明する

前回同様登場人物を2人用意して説明します。
上司・・・メインのプロシージャにあたる。仕事を部下に頼もうと思っている

エクセル作れるさん・・・Functionプロシージャにあたる。資料までは作れないがデータ加工が得意

①「上司」は「エクセル作れるさん」にグラフ作成の為のデータ加工をお願いする。
その際に必要な情報のリンク先を教える。ただしデータは読み取り専用となっている

②「エクセル作れるさん」はデータを加工し、完了の報告をする。
合わせて成果物として新しいデータも送付する

③上司は新しいデータをもとにグラフを作成する。


なおこの場合元のデータは書き換えられないのでそのまま利用することができます。

まとめると値渡しで渡したデータは加工されることがありません。その為渡す以前の状態のまま再度使用することができます。

参照渡しを分かりやすく説明する

同様に2人の登場人物で考えます。

①「上司」は「エクセル作れるさん」にグラフ作成の為のデータ加工をお願いする。
その際に必要な情報のリンク先を教える。なおデータは編集可能となっている

②「エクセル作れるさん」はデータを加工する。必要に応じてリンク先の情報も変更する。
終了後完了報告をし、合わせて成果物として新しいデータも送付する。

③「上司」は新しいデータをもとにグラフを作成する。


なおこの場合元のデータは変更されているのでその状態から使用することになります。

まとめると参照渡しで渡したデータは関数内で変更されます。その為関数内での処理も把握しておく必要があります

ここでのまとめ

値渡しと参照渡しは読み取り専用か編集可能かの違いです。なお対象は変数のみなので引数に数値や文字列を入れた場合は該当しません。

どちらを使うかはケースバイケースですが渡す側がいじってほしいのかほしくないのかで決めればよいと思います(なおつけるのは渡す側ではなく受け取る関数側になるので注意が必要です。ここは少しわかりにくいです)

これらは引数を指定していくうちにわかっていくと思います。

今回のテキスト勉強時間は10分でした(ブログ作成に別に時間はかかっています汗)。


次回は2章に入っていきたいと思います。

コメント

タイトルとURLをコピーしました