ご教示願います。。。
Sub Product_add()
Dim Judge_1 As String
Dim Judge_2 As String
Dim Judge_3 As String
Dim Judge_4 As String
Dim Judge_5 As String
Dim Judge As String
Judge_1 = ×
Judge_2 = ○
Judge_3 = ×
Judge_4 = ○
Judge_5 = ×
JudgeNo = 1
Do
If JudgeNo <= 5 Then '---JudgeNo5まで繰り返す。
Judge = "Judge_" & JudgeNo '---[Judge_]文字と変数JudgeNoを組み合わせて
Judge_*にしてJudge変数に入れる
If Judge = "×" Then '---Judge_*が×であれば<処理1>を実施。
<処理1> ←##問題##これが流れず、なぜかElseで判定される。
Else
JudgeNo = JudgeNo + 1
End If
End If
Loop Until JudgeNo = 5 '---JudgeNoが5になると終了。
<処理2>
End Sub
##問題##の箇所で、最初のJudgeNo = 1が走ると、Judge変数はJudge_1が組み込まれ、
Judge_1 = × (Judge_1には×を変数で指定しているので)になり、
<処理1>が走るはずだが、なぜか素通りしてElseが実行される。
ちなみに、Judgeを直接Judge_1に明記すると、<処理1>は流れる。
デバッグ(ステップイン)でも確認して、Judge変数にJudge_1が格納されていることは
確認済み。
なぜ Judge = × が有効にならないのかさっぱり分かりません。
お分かりになられる方、ご教示願います。
Judge_1 = ×
はXが文字列なんだから、Judge_1 = "×"だろう。
回数が決っているようだからFor Nextのくり返しの利用を勧める。を
書き換えて
Sub Product_add()
Dim Judge_1 As String
Dim Judge_2 As String
Dim Judge_3 As String
Dim Judge_4 As String
Dim Judge_5 As String
Dim Judge As String
Judge_1 = "×"
Judge_2 = "○"
Judge_3 = "×"
Judge_4 = "○"
Judge_5 = "×"
JudgeNo = 1
For i = 1 To 5 '---JudgeNo5まで繰り返す。
Judge = "Judge_" & i '---[Judge_]文字と変数JudgeNoを組み合わせて
MsgBox Judge ' Judge_*にしてJudge変数に入れる
If Judge = "×" Then '---Judge_*が×であれば<処理1>を実施。
MsgBox "<処理1>" ' ←##問題##これが流れず、なぜかElseで判定される。
Else
Msgbox "<処理2>"
End If
Next i '---JudgeNoが5になると終了。
MsgBox "<処理3>"
End Sub
これをやってみると<処理1>の表示は出ない。
あくまで変数JudgeはJudge = "Judge_" & iにより、中身はJudge_1などで”X”ではない。当たり前のこと。
変数について大きな誤解が在る。
変数の1部の添え字的な数を頼りに、繰り回しはできない。
繰り回すのには配列以外はやりにくい。なにか他の言語をかじったあとで混乱しているのかな。
===
普通は配列を使うが、
VBAなら
Sub Product_add2()
Dim Judge As Variant
Judge = Array("", "×", "○", "×", "○", "×")
For i = 1 To 5
MsgBox Judge(i) '
If Judge(i) = "×" Then
MsgBox "<処理1>"
Else
MsgBox "<処理2>"
End If
Next i '---JudgeNoが5になると終了。
MsgBox "<処理3>"
End Sub
と言う手も在る。すっきりしているだろう。
お礼
うっわ!すげぇー!! サクッと解決しました。。。 確かによく考えてみたら、単に文字列指定してただけですね・・・。 お恥ずかしい(--; 詳細な説明と、解決案、ほんっとにありがとうございました。 今回も勉強させていただきました!!