
No.4ベストアンサー
- 回答日時:
こんばんは。
#1のWendy02です。>気になることはGotoを使って一気に抜け出すと、DoLoopの戻り番地のスタック領域はそのまま残ってしまうのかなあ?
それは、どうなんでしょうね。私にはわかりませんが、VBAでは、それを抜け出したところで、End Sub の後に、通常は問題が発生する話は聞いたことがありません。ExcelはExcel独自のスタック領域の中での割り当てのようですね。時々、初心者さんで、シートも詰め込みで、VBAも1000行以上を超えるようなであまり長いコードなどを書いている人がいますが、Excelはそれだけでハングしますが。
私自身、使うべきか迷うときがありますが、エラー・トラップでは使わざるをえませんしね。エラー・トラップで、Goto ステートメントをきちんと使いこなせなくてはなりません。今後、VBAの次のVSTAでは、どうなるかはわかりませんが、おそらくは、その問題は出てくるかもしれませんね。
それと、#3 s_husky さんのように組み合わせで書いても良いかもしれませんね。今、私の書いたものを調べてみると、Do~Loop と For~Next の組み合わせなどをしている例があるかと思えば、やはり、初期のころ、Goto を使って抜けている例などありますが、何百の中に1件程度で、二重ループは少ないです。有名なクイクック・ソートアルゴリズムのように、配列の添え字を全部使い切りで、二重ループするのは、この件とは別ですからね。
Wendy02さん
色々と詳しい解説どうもありがとうございます。
そうですか?今度、VSTAが出るのですか?初耳でした。
色々、学習してみます。よろしくお願いします。
No.3
- 回答日時:
Private Sub CommandButton1_Click()
Dim StopNow As Boolean
Dim I As Integer
Dim J As Integer
For J = 0 To 1
Do
I = I + 1
StopNow = (I = 20)
If Not StopNow Then
Debug.Print I
Else
Exit For
End If
Loop Until J <= 2
J = J - 1
Next J
End Sub
For-Next文で Do-Loop文 を代用するという手もあります。
s_huskyさん
早速のご回答ありがとうございます。
その前の、hana-hana3さんのご回答も拝見して、さすがテクニックですね。
色々、工夫して頭を使えば出来るわけですね。
参考にさせていただきます。ありがとうございました。
No.1
- 回答日時:
こんにちは。
>Goto関数を使うしかないでしょうか?
要するに、VB/VBAの暗黙の禁止ルールを破るか破らないかっていう話ですよね。(それとも、単なる質問かな?こういう質問は、正直、きついです。)
ドイツかどこかの偉い人が、禁止ルールを打ち立てて、構造化しろっていうわけですね。Goto(Goto ステートメントですが) を使うと、読みにくくなるというわけですよね。
あまり使うべきでないのは、私も知っています。でも、しょせん、VBAは、素人が書くものだと割り切っていればよいと思います。システム開発しているわけではありませんからね。
掲示板で、Gotoを使うと、めちゃくちゃな文句つける人がいますね。(「おまえに、VBAを使う資格などない!」とか)では、その人のコードを見せてもらうと、たいしたコードを書いていないのに、良く言えるなって思うことがあります。
それを使いたくないなら、サブルーチンにして、Exit Subにすればよいです。そうすれば、抜けられます。私は、どちらでもよいと思います。しかし、サブルーチンにすると、引数や引数の型を気にして作らなくてはならないので、面倒ですよね。
この後にも、別なことを書く人はいるだろうけれども。
Wendy02さん
早速のご回答どうもありがとうございます。
そうですね。Gotoは好ましくないと聞いていますが、
簡単だから使ってしまったりしています。
要は結果が良ければ、中身はどうでもいいですからね。プロではないし。
それで、気になることはGotoを使って一気に抜け出すと、DoLoopの戻り番地のスタック領域はそのまま残ってしまうのかなあ?と思うんです。気にしなくてもいいかも知れないけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Ruby VBA 2 2023/01/14 14:14
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
PowerPointのスライドの途中で...
-
パワーポイント「スライドショ...
-
エクセル・パワーポイントなど...
-
パワーポイントの表
-
PowerPointで、作成されたファ...
-
音声マークを一括非表示にしたい。
-
Microsoft Office2016をOffice2...
-
パワーポイントをプロンプター...
-
MS Officeソフト
-
パワーポイントで資料を作る時 ...
-
パワーポイント2016でデザイン...
-
PowerPointのアニメーションで...
-
PowerPointのオプションの設定...
-
パワーポイントで矢印を風が切...
-
Vba 白黒印刷で網掛けが消える...
-
PowerPointVBAでスライドマスタ...
-
パワーポイントについて。背景...
-
パワーポイント、円グラフの1...
-
PowerPoint ブロックされたアッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
PowerPointのスライドの途中で...
-
パワーポイントの表
-
パワーポイント「スライドショ...
-
音声マークを一括非表示にしたい。
-
エクセル・パワーポイントなど...
-
MS Officeソフト
-
PowerPointで、作成されたファ...
-
Microsoft Office2016をOffice2...
-
パワーポイント2019 図の透...
-
PowerPointのアニメーションで...
-
ExcelのグラフをPowerPointに貼...
-
PowerPointでスライドマスタの...
-
【パワーポイントのフォントが...
-
パワーポイントで説明しながら...
-
プレゼン時のポインター
-
パワーポイントをプロンプター...
-
パワーポイントのアニメーショ...
-
パワーポイントについて。背景...
-
PowerPointのオプションの設定...
おすすめ情報