- ベストアンサー
Excel2007VBAプロシージャの引数について
- Excel2007VBAプロシージャの引数について調べています。右辺の変数bufの役割や、bufを省略した場合の表示について教えてください。
- Excel2007VBAプロシージャの引数について質問があります。変数bufの役割と、bufを省略した場合の表示について教えていただけますか?
- Excel2007VBAプロシージャの引数について質問です。変数bufの役割と、bufを省略した場合の表示について詳しく教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Forループの1回目はbufには何も入っていないので、 buf = "" & "Excel" & vbCrLf になります。2回目はbufは上記のものが入っているので、 buf = "" & "Excel" & vbCrLf & "Excel" & vbCrLf になります。右辺のbufがその時点のbufの内容と置き換えられてbufに代入されます。 右辺にbufがなければ、bufの内容にかかわらず buf = "Excel" & vbCrLf なので、ループさせる意味はありません。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
こんなことはVBAの始のうちに学ぶことだ。 sは文字列として s=s & x は文字列の足し算のようなもので、 sの後にx という文字列を結合することの定石。 ーーー 単独では上記だが、繰返す場合は 上記のx にあたる部分が同じ文字列であると、実用性は無い。 xが変わる場合はx(i)などにデータがあるとして(エクセルのセル範囲でも良い。後述) Sub test01() x = Array("aa", "bb", "cc") s = "" For i = 0 To 3 - 1 s = s & x(i) Next i MsgBox s End Sub をやってみると、順次結合された文字列が返るのがわかるだろう。 セルの文字列の場合A2:C2については Sub test02() s = "" For Each cl In Range("A2:C2") s = s & cl Next MsgBox s End Sub ーーー bufなどはファイルからレコードを読んで変数に受け取る場合の変数名として使われる習慣みたいなものだが 質問ではその面は現れてない。 ちなみに なぜレコードのインプトエリアが、buf(=Bufferから来る)という用語になるのかは、昔からのプログラム経験などないと、わからないだろう。 ーーー >右辺の変数bufはどんな役割があるのでしょうか? 文章で言うなら直前の文字列に追加という意味で、概念的にはとらえる時点がヅレて入るのだが、プログラム書法では ほとんどの言語fでこう書く。 変数bufの箱から値を取り出して、別の場所(マシン(演算装置)のレベルのこと)で加工し、元の変数の箱に戻す(代入)するイメージ。 ーー >「Excel」の文字は3つから1つになります。 これはなぜでしょうか? なぜ突然Excelか。 判らないではないが、表現には注意。プログラムを造ろうとする人は特に神経質であれ。
お礼
imogasi様 ご回答ありがとうございます。 ご回答の内容につきまして今後の VBAの学習の参考とさせていただきます。
- mu2011
- ベストアンサー率38% (1910/4994)
>1.右辺の変数bufはどんな役割があるのでしょうか? ⇒Msgbox関数の引数文字型変数 >2.右辺のbufを省略したら、メッセージボックスに表示される「Excel」の文字は3つから1つになります。 ⇒常にSample9の引数1の文字列しかセットされない為です。 肝心なのは「&」でこの連結演算子を理解すれば自ずと判ります。 これは、For~Nextで文字列リピートする手法です。 例えば、x = x & "a"を実行するとxは"a"、繰り返すと前回xの"a"に"a"が 連結されxは"aa"のように繰り返した回数分文字列がリピートされます。 別例(リピート関数を利用した方法) Sub Sample(msg As String, n As Long) buf = Application.Rept(msg & vbCrLf, n) MsgBox buf End Sub
お礼
mu2011様 ご回答ありがとうございます。 ご回答の文章を繰り返し読んでいると 直感的にではありますが、私の疑問が 解けてきました。
- mt2008
- ベストアンサー率52% (885/1701)
百聞は一見にしかず [F8] でステップ実行しながらbufの値の変化を見る事をお勧めします。
お礼
mt2008様 ご回答ありがとうございます。 [F8] でステップ実行していると、 For~Next構文の中で3回実行が 繰り返されるのを見ていてたら、 直感的になんとなく分かってきました。
お礼
m-take0220様 ご回答ありがとうございます。 ご回答を繰り返し読んでいると、 右辺の変数bufの役割が分かってきました。