●質問の主旨
下記コードのうち、
buf = buf & msg & vbCrLfについて
1.右辺の変数bufはどんな役割があるのでしょうか?
2.右辺のbufを省略したら、メッセージボックスに
表示される「Excel」の文字は3つから1つになります。
これはなぜでしょうか?
ご存知の方ご教示よろしくお願いします。
●コード
Sub Sample8()
Call Sample9("Excel", 3)
End Sub
Sub Sample9(msg As String, n As Long)
Dim i As Long, buf As String
For i = 1 To n
buf = buf & msg & vbCrLf
Next
MsgBox buf
End Sub
No.1ベストアンサー
- 回答日時:
Forループの1回目はbufには何も入っていないので、
buf = "" & "Excel" & vbCrLf
になります。2回目はbufは上記のものが入っているので、
buf = "" & "Excel" & vbCrLf & "Excel" & vbCrLf
になります。右辺のbufがその時点のbufの内容と置き換えられてbufに代入されます。
右辺にbufがなければ、bufの内容にかかわらず
buf = "Excel" & vbCrLf
なので、ループさせる意味はありません。
m-take0220様
ご回答ありがとうございます。
ご回答を繰り返し読んでいると、
右辺の変数bufの役割が分かってきました。
No.4
- 回答日時:
こんなことは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か。
判らないではないが、表現には注意。プログラムを造ろうとする人は特に神経質であれ。
No.3
- 回答日時:
>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様
ご回答ありがとうございます。
ご回答の文章を繰り返し読んでいると
直感的にではありますが、私の疑問が
解けてきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
C#で年月を比較する
-
VBAでの Replace関数で、ワイル...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
Excelで指数表現しないようにす...
-
VBの「As String * 128」とは?
-
エクセルで文字列をtxtファイル...
-
ダブルコーテーションでアンド...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
MS SQLServer のSQLで文字列の...
-
同一セル内に関数と文字列を同...
-
CSV書込みの際、カンマで位置が...
-
16進数を10進数に簡単に変換す...
-
【Excel VBA】複数ある特定の文...
-
Msgboxの×が押されたとき
-
1 OR 1=1 は どんな論理(約束事...
-
アクセスでのインポート時の改...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
Left関数とRight関数を合わせた...
-
同一セル内に関数と文字列を同...
-
アクセスで特定の数字以外(複...
-
MS SQLServer のSQLで文字列の...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
ORCLEでの小数の表示方法の変更...
-
エクセル 数値データを桁をそ...
-
VBの「As String * 128」とは?
-
CStringの文字列検索&抜き出し...
-
エクセルでセル内の文字列の最...
-
Msgboxの×が押されたとき
おすすめ情報