- 締切済み
excel vba thenが実行されない
No=1 for r=1 to 13 for c=1 to 13 select case masu(r,c) case 16 for n=-1 to 1 masu(r+2,c+n)=masu(r+2,c+n)+1 if r+2=a and c+n=b then p(No,1)=r:p(No,2)=c:No=No+1 next n end select next c next r 上記でif r+2=a and c+n=bの条件を成立させてもthenが実行されず、 r+2をr-2にして、if r-2=a and c+n=bの条件を成立させるとthenが実行される。 masu(r+2,c+n)=masu(r+2,c+n)+1はいずれの場合も実行される。 マクロはいずれもエラーとならず最後まで実行される。(r±、c±はインデックスの範囲内) 他のcase(16以外)でもr-の場合は実行され、r+の場合は実行されない。(if r+1=a and c+n=b then等) 原因がわからないのですが、どんなことが考えられるでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- lupin-333333
- ベストアンサー率31% (294/933)
まず、VBAなどのプログラミングは初めてでしょうか? 次を実行してみましょう(メモ帳等で a.vbsファイルを作成しダブルクリックで実行)。 --- ファイル名= a.vbs --- r=3 c=3 if r+2=a and c+n=b then wscript.echo "成功" wscript.echo "失敗" ------------ 失敗と表示されるはず。まず、この段階で成功となるようにしましょう。わからない場合、こうやってミニマムでデバックします。 http://www.google.co.jp/search?hl=ja&q=VBA+%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E3%80%80%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88&lr=lang_ja などとして、リファレンスとステートメントのサンプルをたくさん参考にしましょう。 ステートメントと演算子の組み合わせの動作は、うまくいかない場合、() などで明示的に順番を指定します。とくに=は比較演算子でもあるが、代入演算子でもあります。 その動作は、スクリプトレベルだと、いいほうに解釈されてしまい、誤動作します。C系などのプログラム言語だと、100%エラーになります。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
上記コードでは a と b の値がわかりませんので何故といわれてもわかりませんが、 http://www.excel-excel.com/vbachair/step1-7.html デバッグモードで実行しステップモードで観察しながら調べるか、 それぞれの値がどのように変化しているか、 debug.print などのコードを埋め込んでイミディエィトウインドウなどに出力することを お勧めします。 if r+2=a and c+n=b then p(No,1)=r:p(No,2)=c:No=No+1 Debug.Print "r = " & r & " a = " & a & " c = " & c & " n = " & n & " b = " & b end if みたいにね
お礼
回答いただきまして有難うございます。
補足
aとbは可変です。 正常に動作していたモジュール1とモジュール2を elseifで条件分岐して1つにしました。 if x=1 then 構文200行 elseif x=2 then 構文200行 end if
お礼
回答いただきましてありがとうございます。
補足
cells(r,c)の値を配列(r,c,1)に、書式を数値化(MS 明朝=1、@MS 明朝=2)して、配列(r,c,2)にしたら、p(No,1)とp(No,2)には「0(ゼロ)」しか入らなくなりました。