- 締切済み
excel vba call
1. if 条件 then call プロシージャ または 2. sub name() if 条件 then exit sub call プロシージャ end sub 1の場合、条件不成立 2の場合、条件成立 いずれも、call プロシージャが実行されてしまうのですが、callは無条件に実行されてしまうのでしょうか。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kmetu
- ベストアンサー率41% (562/1346)
No5さんの補足から内容の不明な変数に条件に合う数値を代入し、関係なさそうなところを削除してテスト、Call scoring2は実行されません。とりあえず、質問者さんが条件成立してると思っているところが条件成立していないということですね。ステップ実行などして実際のコードで確認してみるか、最初に私が回答したように、条件式を個々に true にしてみて正常に実行されるところがあれば、そこの条件式に間違いがあるということです。 Sub test() Dim UC3P(10, 10, 10) As Integer Dim UC3R(10, 10, 10) As Integer Dim UC3C(10, 10, 10) As Integer Dim UC4P(10, 10, 10) As Integer Dim Enter(1, 1) As Integer GR = 6 UC3P(3, 3, 3) = 112 UC3P(GR, 3, 1) = 1 UC3P(GR, 3, 2) = 1 UC3R(GR, 3, 1) = 1 UC3C(GR, 3, 1) = 1 UC4P(1, 1, 1) = 0 Enter(1, 1) = 0 Mas1 = "2wer" For SR = GR - 2 To 3 Step -1 If Left(Mas1, 1) <> 1 Then For SN = 1 To 5 Select Case UC3P(SR, 3, SN) Case 112, 122 If (SR <= 5 Or UC3R(SR, 3, SN) <= 5) And UC3P(SR, 3, SN) = 112 Then UC3P(SR, 3, SN) = 122 If UC3P(GR, 3, 1) <> 0 And Enter(1, 1) = 0 Then If UC4P(UC3R(GR, 3, 1), UC3C(GR, 3, 1), 1) = 0 Or UC3P(GR, 3, 2) <> 0 Then x = 10 - 5: Exit Sub End If End Select Next SN End If Next SR Call scoring2 End Sub
- mshr1962
- ベストアンサー率39% (7417/18945)
No.2です。補足読みました。 内容からすると、BまたはCの変数への代入時に問題があるように思えます。 BまたはCに入力される値が、例えば1とします。 入力される元のセルが手入力であれば問題ありませんが、数式の結果の場合 どちらかが、0.999999のようになっている可能性があります。 VBAにて、ブレークポイントを設定して、変数に代入された値を確認してみてください。 結果としてB=Cがなりたたない場合は、VBA上 または 元のセルの数式の修正を行ってください。
お礼
回答いただきましてありがとうございます
補足
For SR = GR - 2 To 3 Step -1 If Left(Mas1(SR, GC), 1) <> 1 Then For SN = 1 To 5 Select Case UC3P(SR, GC, SN) Case 112, 122 If Mas1(SR, GC) <> 0 Then MoP1(Right(Mas1(SR, GC), 1)) = MoP1(Right(Mas1(SR, GC), 1)) + 1 MoP1sum = Application.WorksheetFunction.Sum(MoP1) End If If (SR <= 5 Or UC3R(SR, GC, SN) <= 5) And UC3P(SR, GC, SN) = 112 Then UC3P(SR, GC, SN) = 122 Mas1(SR, GC) = UC3P(SR, GC, SN) Mas1(UC3R(SR, GC, SN), UC3C(SR, GC, SN)) = 0 Call Control If UC3P(GR, GC, 1) <> 0 And Enter(1, 1) = 0 Then If UC4P(UC3R(GR, GC, 1), UC3C(GR, GC, 1), 1) = 0 Or UC3P(GR, GC, 2) <> 0 Then Ch1(Ch1No, 7) = 10 - MoP1sum: Exit Sub End If Mas1 = Mas3: MoP1 = MoP3: MoP1sum = Application.WorksheetFunction.Sum(MoP1): GMoP1 = GMoP3: Call Control End Select Next SN End If Next SR call scoring2 (注)mop1sum=整数 条件成立でexit sub なのでcall scoring2は実行されないはずなのですが。
- kmetu
- ベストアンサー率41% (562/1346)
No3補足です。 sub name() if 条件 then exit sub call プロシージャ end sub というのは条件成立でもその後すぐにexit subなのでcall プロシージャは実行されませんが、exit subで無い場合には、条件成立の場合、その後のcall プロシージャも実行されてしまいます。 以下のコードで確認してみてください。 Sub kname() If True Then Debug.Print "True" Call プロシージャ End Sub また、条件不成立の確認で If 条件 then call プロシージャ を If False Then Call プロシージャ で確認してみてください。
お礼
回答いただきましてありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
Sub mname() If 条件 Then MsgBox "TRUE" Else: Call プロシージャ End Sub で条件が思った通りになっているか確認してみてください。 また、他の方の補足に書かれているコードの If b = c Then a = 50 を If True Then a = 50 で確認してみてください。
お礼
回答いただきましてありがとうございます。
- mshr1962
- ベストアンサー率39% (7417/18945)
1は条件が合ってれば、プロシージャをCALL 2は条件が合ってれば、name()サブから抜ける設定ですよね。 条件の内容が書かれてないので、判断は難しいけど 1の場合、条件成立 2の場合、条件不成立 の場合にプロシージャはCallされますか? よくあるのが条件セルの座標が間違って条件が無効になってたり AndやOr等の設定ミスで条件の成立・不成立が逆になってたり ということがあります。条件の動作チェックや見直しが必要だと思われます。
お礼
回答いただきましてありがとうございます
補足
(1)A=100 (2)if B=C then A=50 (3)if A=100 then call プロシージャ(A=20とする) (2)でB=Cの条件が成立し、A=50となるはずだが、A=20となってしまう。 (3)を削除または(’)をつけると、A=50となる。
- itu1989
- ベストアンサー率44% (37/83)
条件が合っていないだけでは?
お礼
回答いただきましてありがとうございます
お礼
回答いただきましてありがとうございます。