• ベストアンサー

エクセルVBA(初心者)

Sub 練習() a = InputBox("だれ") MsgBox a End Sub 「a =」よりも「InputBox("だれ")」が最初に実行されるのは、どのような文法の決まりからでしょうか? Sub 練習() InputBox "だれ" a = InputBox("だれ") MsgBox a End Sub この場合、InputBox が2回でてきてしまうのですが・・・?

質問者が選んだベストアンサー

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

a = InputBox("だれ") とは変数aの中にInputBoxからの戻り値を代入するという意味になります。 つまり a=2+3 だったらaの中には5が入ります。 「a=」は何か実行するというような意味はありません。 視覚的に分かりやすくするなら a←2+3 というような感じです。 2段目の例文は まず InputBox "だれ" が実行されますが、これは戻り値を受け取っていないのでただ表示させているだけです。 続いてa = InputBox("だれ") でaに代入され 最後に MsgBox a でaの値が表示されています。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

(1) a = b が等しいかどうかという式であるか代入であるかは文脈で決まります。 質問文の場合、代入であろうというわけですね。 if a = InputBox("誰") then … の場合、等しいかというテストが実行され代入はされません。 BASIC言語では、昔から代入と等値検査の記号が同じなので紛らわしいですが、それは、文法的な伝統なのでしょうがないです。 もともと文法的には、代入は Let a = InputBox("who") のようにLET を使って表すのですが、LETは伝統的に省略できます。 (2) InputBox "だれ" は、値を返す関数ではなく処理の実行のために実行するものです。 call InputBox("だれ") の省略されている形ですね。 InputBox "だれ" のような引数に( )を付けない形はcall だとして処理されます。 また、( )を付ける形はcall を付けないとFunction(つまり値を返す関数)だとして処理されます。 InputBox は、本来入力されたものを返す関数ですが、 InputBox "だれ" のような場合は、単純に返した値は(代入されるところがないので)捨てられます

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

基本的に=の右側の「値」や「関数が実行されて結果が値」になったあとで、その値が左辺の変数1つに代入されます。 手続き型言語はそういう約束で記述します。 文法といえば文法なのでしょうが、もっと基礎(本)的な約束ごとです。 ーーーーー Sub 練習() InputBox ("誰") '付け加えた InputBox "だれ" a = InputBox("だれ") MsgBox a MsgBox ("誰だ") End Sub 最初2つは、これは関数が実行されるが、受ける変数がないので あとでその値を使うことができず、徒労に終わる。だからそんな 使い方はしない。 MsgboxはMsgbox関数ですが、関数の戻り値を無視する場合は()カッコは必要ないことになっていて、()をつけるとエラーになりますと書いた本もあったがエラーにならなかった。 普通は()を書きません。最後の例も関数の戻り値を無視していますが、こちらの使い方も結構よく使います。

関連するQ&A