質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

8094閲覧

Functionプロシージャの戻り値

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/12/26 13:31

Functionプロシージャについて学習しております。

Functionプロシージャは、戻り値を返すということは理解出来たのですが、
オブジェクト型の戻り値について、イマイチ理解できません。

値を返すFunctionプロシージャ例
これは、理解できています。

vba

1Sub sample() 2 Dim n As Integer 3 n = 5 4 MsgBox "戻り値:" & addition(n) 5End Sub 6 7Function addition(n As Integer) As Integer 8 addition = n + 10 9End Function

オブジェクト型を返すFunctionプロシージャ例
この例が、イマイチ分かりません。rangeName = "A1"という箇所は、rangeNameという変数んい"A1"という文字列を入れているだけなのでしょうか?それとも、"A1"セルを代入しているのでしょうか?そもそも、このマクロを実行すると、なぜ、A1セルに"VBA"と入力されるのでしょう??
一日中考えましたが、混乱状態です。
もっと、分かりやすい例はありますでしょうか??

vba

1Sub sample() 2 Dim rangeName As String 3 Dim rangeA1 As Range 4 rangeName = "A1" 5 Set rangeA1 = objRange(rangeName) 6 rangeA1.Value = "VBA" 7 8End Sub 9 10Function objRange(rangeName As String) As Range 11 Set objRange = Range(rangeName) 12End Function

どなたかご教授下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rangeName = "A1"という箇所は、rangeNameという変数んい"A1"という文字列を入れているだけなのでしょうか?

その通りです。rangeNameは文字列(String)型なので、"A1"というのは単なる文字列です。

Range型は「セル範囲」を格納します。
この例では「範囲」の指定にはなっていませんが、rangeA1変数はセル範囲を格納する変数です。

このrangeA1変数にobjRange関数で値をセットしています。

Function objRange(rangeName As String) As Range

とあるので、objRange関数はセル範囲(Range)型で値を返す必要があり、また文字列(string)型の引数を必要とします。
呼出元側でobjRange関数の引数としてrangeName変数を指定しているので、objRange関数の処理としては

objRange = Range("A1")

となり、objRangeは「A1(だけですが)というセル範囲」となります。
ここでobjRangeに格納されているのは「A1セルの値」ではありません。格納されているのは「参照すべきセル範囲」だけです。
そしてobjRange関数の呼出元側ではrangeA1にobjRangeが代入されます。つまり、rangeA1の中身は「A1というセル範囲」です。

最後に

rangeA1.Value = "VBA"

とありますが、これは「「A1という範囲のセル」の値」(セルの中身)が"VBA"である、という意味です。
なので実行結果としてセルA1に"VBA"と入力されます。
回りくどい話ですが、意味するところは以下と同一です。

Range("A1").Value = "VBA"

投稿2016/12/26 13:56

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/26 14:08

物凄く分かりやすい解説有難うございます!!納得しました!! この様な説明を求めてました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問