• ベストアンサー

DO~LOOP でのLOOPの抜け方

コマンドボタンを押して(スタートボタン)DO~LOOPで実行しているときにストップコマンドボタンを押してストップさせるときの LOOPの抜け方がわかりません。すみませんがよろしくお願いします。

noname#10506
noname#10506

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

#2と#4のtinu2000です。 stop_flag を共通変数にしないと、それぞれ別の変数とみなします。 ここから下をコピー&ペーストして見て下さい。 Public stop_flag As String Private Sub CommandButton1_Click() Dim i As Integer, n As Integer, b As Integer, a As Integer stop_flag = False Do a = 1 For i = 0 To 7 Range("a1") = a For n = 0 To 500 Next n a = a + 1 Next i a = 2 For b = 0 To 7 Range("b1") = a For n = 0 To 500 Next n a = a * 2 Next b DoEvents If stop_flag = True Then Exit Do Loop End Sub Private Sub CommandButton2_Click() stop_flag = True End Sub

noname#10506
質問者

お礼

IF文を置く位置が悪かったのがわかりました。わざわざプログラムを書いていただいて有難うございました。

noname#10506
質問者

補足

回答有難うございました。とりあえずLoop地獄から出ることが出来ました。有難うございました。ただMovingWalk様のところにも書いたのですが、Loopが終わらないと出ない・・。STOPButtonを押したらその場でLoopから出るようにするにはどのようにすればいいのでしょうか?すみませんがよろしくお願いします。

その他の回答 (6)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.7

#1,5です。 #6の回答について。 >Public stop_flag As String stop_flag は、True/False の値を持つ型なので String ではなく Boolean ですよね。

noname#10506
質問者

お礼

わかりました!IF文を置く場所が悪かったのがわかりました。回答有難うございました。

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.5

#1です。#2の補足について。 If stop_flag = False Then Exit Do  ではなく If stop_flag = true Then Exit Do  でなければ... 念のため、DO の前の行に stop_flag = False をいれておいてください。

noname#10506
質問者

補足

回答有難うございます。とりあえずLoopから出ることが出来ました。有難うございました。ただ、STOPButtonを押せば直ぐに止まらずにLoopから出ないと止まらないんですね・・。(考えてみれば当たり前ですが・・)押したら直ぐにLoopから出られる(Loopする数字が押した瞬間に止まる)ようになるにはどのようにしたらいいのでしょうか?すみませんがよろしくお願いします。

回答No.4

#2のtinu2000 です。 maruru01さん、そうでしたそうでした、DoEvents を忘れていました。 質問を見て、瞬間的なイメージは DoEvents はあったんですが、 書いている内に忘れてしまいました。(汗) maruru01さん、ありがとうございました。 あれではストップボタンが割り込まないですね。

noname#10506
質問者

補足

続きです。すみませんよろしくお願いします。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 基本的には、No.2の方のように、フラグを立てる方法です。 ただ、ストップボタンをクリックする割り込み処理を入れるために、DoEventsを入れます。 No.2の方のを拝借して、 Private Sub Command1_Click() 'スタートボタン   ExitSw = 0   Do     DoEvents     ・・・     If ExitSw = 1 Then Exit Do     ・・・   Loop   ・・・ End Sub Private Sub Command2_Click() 'ストップボタン   ExitSw = 1 End Sub

noname#10506
質問者

補足

回答有難うございます。ただ全然初心者なのでまだ出来ません・・。tinu2000様の補足に抜けられないプログラムを出したのですが、わかりません。すみませんよろしくお願いします。

回答No.2

Private Sub Command1_Click() 'スタートボタン ExitSw = 0 Do  ・・・  If ExitSw = 1 Then Exit Do  ・・・ Loop  ・・・ End Sub Private Sub Command2_Click() 'ストップボタン  ExitSw = 1 End Sub 他にも方法があると思うけど、こんなんでいいんでない?

noname#10506
質問者

補足

回答有難うございます。ただ・・どうしても抜けられません・・。全然初心者なのでまだわかりません。 Private Sub CommandButton1_Click() Dim i As Integer, n As Integer, b As Integer, a As Integer Do a = 1 For i = 0 To 7 Range("a1") = a For n = 0 To 500 DoEvents Next n a = a + 1 Next i a = 2 For b = 0 To 7 Range("b1") = a For n = 0 To 500 DoEvents Next n a = a * 2 Next b If stop_flag = False Then Exit Do Loop End Sub Private Sub CommandButton2_Click() stop_flag = True End Sub 7回まわってLOOPする形のものを中身を変えて出したのですが、どうしても止まりません・・。何がわるいのでしょうか?

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

強制的にループを抜けるには、exit do を使えばいいんじゃないでしょうか?

関連するQ&A

  • "DO LOOP"

    テキストボックスに数値を入れると Do Loopでその数値の整数部分が何桁かを計算して、 ラベルに表示させるプログラムを作りたいです。 その時の、終了条件がわかりません。 (出来れば繰り返し実行されるステートメントお願いします。) 教えてください。お願いします。

  • VB2005 Do Loopについて

    VB2005 でDo Loopを使用していますが、このDo Loop内の処理をしている時にイベント(例えばボタンをクリック)が発生した場合、その処理をしたいのですがどうすれば良いでしょうか? VB6の時は、DoEventsを使用していましたが、VB2005でも使用できるのでしょうか? ご存知の方がいらっしゃいましたら、教えて頂きたいのですが。 よろしくお願いします。

  • 2重のDo~Loopは?

    Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop

  • マクロのプログラミングで Do Loopステートメントです

    明後日学校の情報の授業でエクセルのマクロを使ってプログラミングするんですが語句について教えてください エクセルのマクロなんですが Do Loopスタートメントって言うのをやります そこでコマンドの意味を教えてほしいんです 明後日なんでなるべく早くお願いします 今回のコマンド(と、バリエーション)って書いてあります 1) dim i as→ 2) Do While 条件式 処理 Loop 3) Do Until 条件式 処理 Loop 4) i=i+1 5)Integer この5つです お願いしますm(_ _)m

  • VBA Do…Loopについて

    お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。

  • Exit Doで二つのloopを抜けるには?

    Do Do For Each If 値 = "" Then Exit Do End If Next Loop Until 条件1 Loop Until 条件2 のようなネストをした場合、Exit Doでloopを抜ける時、条件1と条件2のどちらに移動するのですか? もし条件1に移動する場合、条件2を抜けたいのならどうすればいいのでしょうか? Exit Do Do みたいな事がしたいです。

  • Do~Loopステートメント

    Do~Loopステートメントで使わな方が良いステートメントとは? Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが どれの事だか忘れてしまいました。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do While i < 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これは一般的だから使ってもよいと思います。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do Until i = 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これもよく見かけます。 Do While,Do Until以外にもloopステートメントってありますか? あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

  • Do..Loopステートメントの使い方について

    現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。

  • VBA DO~LOOPのネスト方法について

    エクセルマクロの構文でDO~LOOPのネストを行った際に、EXIT DOで飛び出した後のLOOP条件が無効になるようです。どなたかご教授願います。 Sub TEST() y = 1 Do Do If y = 2 Then Exit Do End If y = y + 1 Loop Loop While y = 3 End Sub

  • Do...Loopにつてご教授ください

    Visual Basicの課題で、 3+3²+3³+・・・3n乗で、500から50000の間に入る数字は 何個あるか?を求めるアプリを作らなければいけないのですが、 Do...Loop構造の繰り返し処理が理解できていないために解答 することができません。 解答と考え方をご教授いただけば大変助かります。 どうぞよろしくお願いいたします。

専門家に質問してみよう