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

ExcelVBAで、プログラムを書いて実行したら、なぜかある部分がカットされてしまい、その部分をF8で試したり、その部分を個別で実行するとできるようになります。
なぜこのようなことが起きるのでしょうか。
プログラム側の問題ですか?

質問者からの補足コメント

  • 「カット」は、その部分が実行されていないことです。
    ifがありますが、条件はtrueなので、本来実行されるはずです。
    その部分のみを、別のマクロに書いて実行すると、できるようになります。

      補足日時:2018/06/16 17:27
  • コードです。

    If 結果の保存 = True Then
    入力行 = Range("A1").End(xlDown).Row+1
    With Worksheets("結果")
    .Cells(入力行, 4).Value = Time
    .Cells(入力行, 5).Value = 結果出題数
    .Cells(入力行, 6).Value = 正答数
    .Cells(入力行, 7).Value = 誤答数
    .Cells(入力行, 10).Value = user
    .Cells(入力行, 3).Value = DateDiff("n", Worksheets("結果").Cells(入力行, 2).Value, Worksheets("結果").Cells(入力行, 4).Value)
    End with
    問題を出して、その正答数や誤答数、時間を合計して、結果のシートに入力するプログラムです。

      補足日時:2018/06/16 17:35
  • プログラムを書き直したところ、解決できました。
    原因はわかっていません。
    とりあえず解決したということで、皆様には大変ご迷惑をおかけしました。
    解答してくださった皆様、ありがとうございました。

      補足日時:2018/06/16 22:16

A 回答 (10件)

No.2です。



> 「カット」は、その部分が実行されていないことです。
> ifがありますが、条件はtrueなので、本来実行されるはずです。

であればそれは「カット」とは言いません。
「if文の判定結果通りに動かないように見える」などと明確にロジックがわかるように言い表しましょう。(^^;


> その部分のみを、別のマクロに書いて実行すると、できるようになります。

であれば「if文の判定結果がtrueの場合のロジックが実行されていないように見えているだけ」だと思います。
ブレークポイントを設けて実行するか、その部分にデバッグ用の何か(例えば特定のセルに値を入れるとかでもよいでしょう。音を鳴らすというのもあります)を入れましょう。

参考まで。
    • good
    • 0

「入力行 = Range("A1").End(xlDown).Row+1」の下に次の命令を入れてみてもらっていいですか?



MsgBox Range("A1").End(xlDown).Row + 1
    • good
    • 0

当てずっぽうです。


入力行 = Range("A1")~が、Withブロックの外にある理由って何かありますか?
On Error ステートメントでエラーをスキップしてたりしませんよね?
    • good
    • 0
この回答へのお礼

理由はありません on errorも使ってません

お礼日時:2018/06/16 20:39

No4です。


>一応OKと表示されましたが。
OKと表示されたなら、必ずそれ以降の行が実行されます。

つまり
if True Then
msgbox("OK")
入力行 = Range("A1").End(xlDown).Row+1・・・・①
With Worksheets("結果")
.Cells(入力行, 4).Value = Time
.Cells(入力行, 5).Value = 結果出題数
.Cells(入力行, 6).Value = 正答数
.Cells(入力行, 7).Value = 誤答数
.Cells(入力行, 10).Value = user・・・・③
.Cells(入力行, 3).Value = DateDiff("n", Worksheets("結果").Cells(入力行, 2).Value, Worksheets("結果").Cells(入力行, 4).Value)
End with・・・・②

①から②まで実行されているはずです。
実行されていないように見えるだけではないでしょうか。

それでも、実行されていないと思われるなら
③にブレイクポイントを設定して実行されてはいかがでしょうか。③で止まるはずです。
If 結果の保存 = True Then ではなく
if True Then にして実行してください。
    • good
    • 0

『ifがありますが、条件はtrueなので、本来実行されるはずです。


筈じゃ無くて
実際に「結果の保存」とやらの中身はなんなの?

部分を切り出して実行すると流れるってことは、
その条件判断が成立してないってことでしかない

そのifの処理にelseを追加して見て、else側のステップが実行されているなら
理由は明らかだよね?
    • good
    • 0
この回答へのお礼

elseを書いてみましたが、実行されていませんでした。
「結果の保存」は、ユーザーフォームで、チェックボックスがあって、それの値です。

お礼日時:2018/06/16 17:52

No4です。


No4については無視してください。(意味不明なことを書いてしまいました。失礼しました。)
    • good
    • 0
この回答へのお礼

一応OKと表示されましたが。

お礼日時:2018/06/16 17:50

>If 結果の保存 = True Then


>入力行 = Range("A1").End(xlDown).Row+1

上記を
If True Then
MsgBox ("OK")
入力行 = Range("A1").End(xlDown).Row+1
かえたらどうなりますか?
OKが表示されるなら、「結果の保存」は間違いなくtrueでthenの側が実行されています。
もし、OKが表示されないなら「結果の保存」はtrueになっていません。
    • good
    • 0

式を示さず、何故x=1なんでしょうか?と同じ類の質問だ!

    • good
    • 0

「ある部分がカットされてしまい」とは具体的にどういうことでしょう?


その直前にIF文があり、その条件に見合わないため処理されないだけなのではありませんか?
プログラムは思った通りには動かず、作った通りに動きます。
ロジックを「思い」で追っても原因はつかめません。書いてあることをしっかり見て理解してどう動くかを追いましょう。

参考まで。
    • good
    • 0

条件分岐の条件が一致しないから



『その部分をF8で試したり』
その部分とは?関数なのか、更にその内部のステップなのか

F8のステップ実行は分かった、個別で実行とは何か?
サブ関数になっていて、その関数を呼んだらってことか?

#if ディレクティブとか何か使っていないか?
コンパイルオプションは?
    • good
    • 0

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