• ベストアンサー

Access VBA でのFor_Nextステートメントで使用例の意味が理解できず困っています

Access VBA の勉強を始めて間もないものですが、あるテキストのFor_Nextステートメント使用の一部分の意味がわかりません。教えてください。 Sub ループのネスト() Dim i As Integer, j As Integer Dim myStr As String '九九の結果を表示する For i = 1 To 9 For j = 1 To 9 myStr = myStr & i * j & " " Next j MsgBox myStr, , i & "の段" myStr = "" Next i End Sub 以上の文面で(1)『myStr = myStr & i * j & " "』でmystrにmyStr & i * j & " "を代入する意味だとは理解できますがmystr&を右辺に記載する意味がわかりません。何故必要でしょうか? (2)『mystr=""』は何故必要なのでしょうか?

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

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

Access VBAとあったのでどんな難しいことかと思ったら これなら、VB,エクセルVBAでも動くないようだ。 エクセルを持っておれば 標準モジュールに張り付け、実行して シートを見ると良くわかる。 Sub ループのネスト() Dim i As Integer, j As Integer Dim myStr As String '九九の結果を表示する For i = 1 To 9 For j = 1 To 9 Cells(i, j + 1) = myStr & i * j & " " Next j Cells(i, 1) = myStr & i & "の段" myStr = "" Next i End Sub &は文字列を結合するもの。 この場合エクセルのセルと違ってMsgboxなので1行で1回の表示にしているので1行分は文字列追加累積しているわけ。 これを使うときはある段階・単位で=””でクリアする。 次の行の文字列を作るに入る前に、前行のものは(同じ変数を使うがため)クリアしなければならない。 i*jは本来文字列の扱いだが、VBでは文字列化しなくても MsgBoxやエクセルのセル、テキストボックスにセットできる。 >右辺に記載する意味がわかりません Msgboxやエクセルのセルやテキストボックスにセットするとき セット・表示する内容は、右辺です。

sketch4910
質問者

お礼

なるほど。勉強になります。ありがとうございました。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

#2の回答で 間違いがあるようです myStr = myStr & i * j & " " の命令は myStrに i*jの演算結果の文字列とスペース1個を追加する と言った内容です i=2, j=3 だったら myStrには "6 "が追加されます "2*3 "の文字列生成はされません "2*3 "を生成するなら myStr = myStr & i & "*" & j & " " としないといけません

sketch4910
質問者

お礼

そうですね。最初、ちょっと戸惑いがありましたが理解できました。ありがとうございました

  • PPancho
  • ベストアンサー率27% (26/96)
回答No.2

(1)i=1,j=1の時はmyStr = myStr & i * j & " "に  「1*1 」という文字列になります。   i=1,j=2の時「1*1 1*2 」という文字列を生成するため。 (2)j=1~9の後でメッセージボックスの表示は   「1*1 1*2 ~(略)~1*9 」になります。   その後でiをカウントアップして2にする際、変数をリセット  (消去)させるため。(そうしないと文字列が延々長くなる) &は文字列と文字列をつなげる意味を表します。

sketch4910
質問者

お礼

なるほど。具体的な説明ありがとうございました。

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.1

1.プログラミング言語特有の書き方でもとのmyStrに i*j  を追加したものをmyStrに代入するとうことです。 2.についてはどんどん追加されていくので間にスペースをいれて見やすくしているのでしょう。

sketch4910
質問者

お礼

プログラミング言語特有の書き方なんですね。ありがとうございました