プロが教える店舗&オフィスのセキュリティ対策術

以下のコードを実行すると、メッセージBOXに OKOKOK
となります。

【A = A & "O" & "K"】が3回繰り返されると、OKOKOKになるのが分かりません。
A = A & "O" & "K"も、A=Aなる分かりますが、左と右が違うのが分かりません

A = A & "O" & "K"が、3回繰り返されるのは分かります

ご存じの方、教えて下さい

【コード】
Sub OK()

Dim i As Long, x As String


For i = 1 To 3

A = A & "O" & "K"

Next i


MsgBox A


End Sub

A 回答 (6件)

最初の


A = A & "O" & "K"
の右側Aは何も入っていませんのでOKをAに入れる

次回以降のAはOK・・・
でOKを追加していきます。
    • good
    • 0

もしかして、


A=1
A=A+1
をみて、「A=A+1と書いてあるが、左辺は1で、右辺は2なので等しくない」とか思うのでしょうか?

多くのプログラミング言語で、= は「等しい」という意味は無いです。「右辺の値を左辺に代入する」という意味です。

& が文字列を繋げる演算子であるというのは分かりますかね?
A = A & "O" & "K"
は、「A & "O" & "K"」 の値を変数Aに代入するという意味です。

多くのプログラミング言語では、「等しい」かどうかをチェックする演算子は「==」です。例えば「 1 == 2 」は偽で、「 1 == 1 」は真です。

ところが、VB系は「=」が文脈によって「等しい」と「右辺の値を左辺に代入する」の両方の意味に自動的に切り替わるので、初心者にわかりにくいところです。
「式」を書くところだと「等しい」という意味で、「文」を書くところだと「右辺の値を左辺に代入する」という意味です。
    • good
    • 0

私も、kanta2006さんと同様の感想を持ちました。


VBAの数式に登場する「=」は「左向き矢印」という風に捉えた方がイメージが掴み易いと思います。

つまり、以下のようになります。

一回目 i←1 のとき A←A&"O"&"K"を実行すると
最初(Dimで宣言しただけの状態※)、Aは空。従ってA←"O"&"K"となるので、Aは"OK"となる

二回目 i←2 のとき A←A&"O"&"K"を実行すると
Aにはすでに"OK"が入っている。従ってA←"OK"&"O"&"K"となるので、Aは"OKOK"となる

三回目 i←3 のとき A←A&"O"&"K"を実行すると
Aにはすでに"OKOK"が入っている。従ってA←"OKOK"&"O"&"K"となるので、Aは"OKOKOK"となる

※余計なお世話ですが、ご質問者が投稿されたコードの宣言文
Dim i As Long, x As String

Dim i As Long, A As String
の誤りだと思います。
    • good
    • 0

さっきの回答に補足説明



数学的には
A = A+10
なんて計算は成立しませんよね。

でもプログラミング言語では、普通に成立する式なんです。

右の式で演算した結果を左の変数に代入するので、Aに10を足した結果をAに入れることになるので、元のAの値が20だったら、それが30になります。
    • good
    • 0

for next ステートメントが分からないと言うよりも、=(イコール)演算子の意味で躓いておられるのではないかと感じました。



VBA(マクロ)に限らず、プログラミング言語における、=は、数学的=とは全く意味が違う事に気をつけなければいけません。

「=」(イコールが1つ)は値の代入を意味する演算子です。
右の式で計算した結果を、左の変数に入れます。

ですから、最初はAの中身が空だとして

A = A & "O" & "K"

を1回目に実行すると「A & "O" & "K"」の計算結果をAに代入します。
VBAでは&は文字列を連結する演算子ですから、ここでAに代入されるのは「OK」です。

この式をもう一度実行すると、先ほどのOKにさらにOとKが連結された結果を、またAに代入してOKOKになります。

3回目に実行すると、先ほどのOKOKにさらにOとKが連結された結果をAに代入するのでOKOKOKになります。

プログラミング言語を扱う場合、数学的なイコールと全く意味が違う事に慣れるまで戸惑うかもしれませんが、慣れれば気にならなくなると思います。
    • good
    • 0

Sub OK()


Dim i As Long, A As String
For i = 1 To 3
A = A & "OK"
Next
MsgBox A
End Sub
と書くと判り易いような気がします。

Aを文字列型の変数と宣言したので、文字列はダブルクォーテーション””で囲まなければなりません。
A=”OK”かA=”O”&”K”です。&には、文字列を繋げる意味があります。

For i = 1 To 3
A=”O”&”K”
A=A
Next
とすると、何回繰り返してもOKだけです。

式を、A = A & ”O”&”K”
にすると、最初のAは、ダブルクォーテーションで挟まれた文字だけですので、OKとなります。
2回目のループでは、式の右側のAに、最初のA = A & ”O”&”K”の文字列OKが代入されます。OKOKとなります。
3回目のループでは、式の右側のAに、2回目の文字列OKOKが代入されます。OKOKOKとなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A