dポイントプレゼントキャンペーン実施中!

以下のマクロをご覧ください
-Excel-Excel-Excel が答えとなります

B = B & "-" & "Excel"  ←この処理を3回
実施した結果かとは思います

B & の部分が分かりません。


●B=Bなら分かりますが、B = B & "-" & "Excel"
がなぜ、イコールになるのか?

●B & の部分を削除すれば良いですが、-Excel-Excel-Excel
 の結果は出ません

コードの意味が分かるかた教えて下さい
宜しくお願いします


【コード】
Sub B()

Dim i As Long, B As String

For i = 1 To 3

B = B & "-" & "Excel"

Next i

MsgBox B

End Sub

A 回答 (9件)

>私は、変数は、こちらで何かを定義するものかと


>思っていました

そういうことです。

本来は変数定義の後に初期値を格納するのが礼儀です。
 i = 0
 B = ""
などと記述します。
C言語系のプログラミングでは初期値を設定する必要がありますが、
VBAでは省略しても問題にはなりません。
    • good
    • 1
この回答へのお礼

分かりやすい解説、ありがとうございました

お礼日時:2024/06/23 15:41

1回目のBには何も入っていない。


Bという変数を使うという宣言がされただけで、中には何もない状態です。

・・・

同様に、変数の i も空の状態から始まります。
i は、For文で
 i に1を格納し中の値を3まで(1つずつ増やしながら)ループする。 
と宣言しています。
※ 「2つずつ増やす」とか「3つずつ増やす」という宣言もできます。
  増やす量の宣言を省略する場合「1つずつ増やす」として扱われます。
    • good
    • 1
この回答へのお礼

変数は、最初は何も入っていないのですね
私は、変数は、こちらで何かを定義するものかと
思っていました
↓最初は、何も入っていないという前提なのですね
Bという変数を使うという宣言がされただけで、中には何もない状態です。

お礼日時:2024/06/22 00:40

>Bとは何を示しているのでしょうか?


Dim i As Long, B As String
で文字列での変数宣言をしているので、変数ですよ。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
sting⇒文字列ということですね。了解です。

お礼日時:2024/06/21 23:45

(。

´・ω・)ん?

1回目
Bの値は空。
 B = B & "-" & "Excel"
 ↓
 B = "" & "-" & "Excel"
 ↓
 Bの値は ”-Excel”

2回目
Bの値は ”-Excel”。
 B = B & "-" & "Excel"
 ↓
 B = "-Excel" & "-" & "Excel"
 ↓
 Bの値は ”-Excel-Excel”

3回目
Bの値は ”-Excel-Excel”。
 B = B & "-" & "Excel"
 ↓
 B = "-Excel-Excel" & "-" & "Excel"
 ↓
 Bの値は ”-Excel-Excel-Excel”


・・・これで分からない場合、
    CPUの内部では次の手順で演算されているので
     理解するようにしてください・・・


1回目の演算の手順を示してみます。
演算はCPUのアキュムレータと呼ばれる場所に入れられて行われます。


Bの値をアキュムレータと呼ばれる演算する場所に格納する。
├─────┤
│  空  │
├─────┤
│  空  │
├─────┤
→ 空(値) │
┴─────┴

アキュムレータを一つ押し上げ空ける。
├─────┤
│  空  │
├─────┤
│ 空(値) │
├──↑──┤
│  空  │
┴─────┴

空いたアキュムレータに ”-” を入れる。
├─────┤
│  空  │
├─────┤
│ 空(値) │
├─────┤
→   ”-”   │
┴─────┴

押し上げたアキュムレータの値と、今入れた ”-” を結合する。
├─────┤
│  空  │
├─────┤
│  空  │
├──↓──┤
│  ”-”  │
┴─────┴

アキュムレータには ”-” が入る。
├─────┤
│  空  │
├─────┤
│  空  │
├─────┤
│  ”-”  │
┴─────┴

アキュムレータを一つ押し上げ空ける。
├─────┤
│  空  │
├─────┤
│  ”-”  │
├──↑──┤
│  空  │
┴─────┴

空いたアキュムレータに ”Excel” を入れる。
├─────┤
│  空  │
├─────┤
│  ”-”  |
├─────┤
→ ”Excel” |
┴─────┴

押し上げたアキュムレータの値と、今入れた ”Excel” を結合する。
├─────┤
│  空  │
├─────┤
│  空  |
├──↓──┤
│ ”-Excel” |
┴─────┴

アキュムレータに入っている ”-Excel” をBに格納する。
├─────┤
│  空  │
├─────┤
│  空  |
├─────┤
← ”-Excel” |
┴─────┴

2回目は ”空(値)” ではなく ”-Excel” の値を入れるところから
3回目は ”空(値)” ではなく ”-Excel-Excel” の値を入れるところから
始まる。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
Bの値は空。 という決め事?が分かりません。
何か、最初、Bは空 という定義があればわかるのですが

突然、Bは空と言われた感じがします。
もちろん、銀鱗 様の解説が正当なのはわかってはいます

決め事であれば、理解はできます。
他、解説あればお願いします

お礼日時:2024/06/21 23:43

●B=Bなら分かりますが、B = B & "-" & "Excel"


がなぜ、イコールになるのか?

ifがないので比較ではなく、右の結果を左へ代入です。

●B & の部分を削除すれば良いですが、-Excel-Excel-Excel
 の結果は出ません

B&のBの中身を先頭に使い、&で後ろを連結してBに入れなおすです
    • good
    • 1
この回答へのお礼

イコールではなく、右の部分を左に代入しているんですね
理解しました。ありがとうございます

お礼日時:2024/06/21 23:46

この場合の & は接続詞です。


BASIC では ; ですね。

B = B & "-" & "Excel"

B{に入っている文字列}に続けて ハイフン{-のこと}、さらに続けて Excel{という文字列} を Bという変数に入れなさい
という意味です   

実行すれば
一回目 で -Excel
二回目 で -Excel-Excel
三回目 で -Excel-Excel-Excel
になります
    • good
    • 1
この回答へのお礼

分かりやすい解説ありがとうございます

お礼日時:2024/06/21 23:46

VBA(←マクロに使う構文)では、比較演算子(=,>,<など)と代入演算子が同じなのでこうなってしまします。


ここでは代入演算子として使用していますので、
>B = B & "-" & "Excel"
は、元々あったB(の文字列)に、「-」と「 Excel」を付けたしなさい!という処理をしているのです。
最初Bの中身は空白ですから、1回目の処理で"-Excel”という文字列になり、それを3回繰り返すことにより、”-Excel-Excel-Excel”となるのです。
>●B & の部分を削除すれば良いですが、
とすると、Bに"-Excel"という文字を代入しなさい!という処理を3回行っているだけですので、結果は前述のようにはなりません。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます
この文言⇒最初Bの中身は空白ですから が分かりません。
決め事なのでしょうか?

ご指導お願いします

お礼日時:2024/06/21 23:44

>なぜ、イコールになるのか?


マクロの基本的な部分かと思います。
変数に代入のような部分を復習なさってください。
B=B+D
の意味わかりますか?
変数Bの内容に変数Dの内容を加算して変数Bに代入するって。
余計なお世話(?)ならスルーしてください。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます

B & "-" & "Excel" の処理を3回するって指示かと思います

Bとは何を示しているのでしょうか?

お手すきな時に、お願いします

お礼日時:2024/06/21 09:20

これね。

数式っぽいけど数式じゃないんだ。

「イコール(=)の左側の変数に、イコールの右側の変数または式の【値を入れろ】」

って事を示しているんです。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます

B & "-" & "Excel" の処理を3回するって指示かと思います

Bとは何を示しているのでしょうか?

お手すきな時に、お願いします

お礼日時:2024/06/21 09:19

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