発展1講座第4章 - Do Loop構文 概要

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

くり返しの構文「Do Loop構文」は、プログラムを書く段階では、何回繰り返すのか検討がつかない場合によく使われます。
例えば、桁数がバラバラの数字を「No-数字4桁」の文字列にしたい場合です。次回、Do Loop構文を使って、この作業をマクロで書いていきます。

この教材についての過去の質問・感想

11490 : 小川慶一の回答 (2019-06-30 13:04:04)

受講生 さん:

> 小川慶一さん:
>
> > > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
>
> 自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print を活用していませんでした。失礼いたしました。

やはり...。ですよね。
自力で問題解決できるうになるためには、上に示したようなスキルは大切です。

基礎編ベーシックの演習も、「これらの機能を学ぶため」というようにしっかり目的を持ちつつ、最低でも一周はしっかり復習されることをおすすめします。

ところで、

> もし本件について継続してサポートを受けたいということでしたら

と書きました。
こちらについては、どうですか。


11488 : 受講生さんのコメント (2019-06-30 08:33:16)

小川慶一さん:

> > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。

自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print を活用していませんでした。失礼いたしました。



> 受講生 さん:
>
> > あの後、さらにケアレスミスなどを修正して、
> > 一応、変数を使わない方法で、やってみたら、うまく動きました。
> > ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
>
> ありえないことないですよ。使い勝手は悪いですが。
> でも、現状で満足なら、手直しはしないでよいと思います。
>
> > ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
>
> 基礎編の内容をしっかり理解し、基礎編の演習で出てきた課題をスラスラ解けるようになってください。
> そうなったころには、この質問がいかにバカバカしいものか?ということが分かるでしょう。
>
> 演習不足です。
>
> 本件のサポートは継続して行います。
> が、基礎編のフォローアップベーシックをしっかり復習することを強くおすすめします。
>
> 復習の方法は、自分で手を動かして、くり返し練習します。
> 動画も見本のコードもみないで自力でスラスラ解けるようになるまで、くり返し練習します。
> 少なくとも、動画16までのお題は、すべて動画も見本のコードもみないで自力でスラスラ解けるようになる必要があります。
>
> 発展編1に進むのはそれからでも遅くはありません。
>
> > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
> ↑
> もし本件について継続してサポートを受けたいということでしたら、こういう質問には答えていただけますか。
> でないと、何を指導すればピンポイントな助けになるかわかりません。
>
> よろしくお願いいたします。
>


11463 : 小川慶一の回答 (2019-06-19 15:36:36)

受講生 さん:

> あの後、さらにケアレスミスなどを修正して、
> 一応、変数を使わない方法で、やってみたら、うまく動きました。
> ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?

ありえないことないですよ。使い勝手は悪いですが。
でも、現状で満足なら、手直しはしないでよいと思います。

> ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?

基礎編の内容をしっかり理解し、基礎編の演習で出てきた課題をスラスラ解けるようになってください。
そうなったころには、この質問がいかにバカバカしいものか?ということが分かるでしょう。

演習不足です。

本件のサポートは継続して行います。
が、基礎編のフォローアップベーシックをしっかり復習することを強くおすすめします。

復習の方法は、自分で手を動かして、くり返し練習します。
動画も見本のコードもみないで自力でスラスラ解けるようになるまで、くり返し練習します。
少なくとも、動画16までのお題は、すべて動画も見本のコードもみないで自力でスラスラ解けるようになる必要があります。

発展編1に進むのはそれからでも遅くはありません。

> 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。

もし本件について継続してサポートを受けたいということでしたら、こういう質問には答えていただけますか。
でないと、何を指導すればピンポイントな助けになるかわかりません。

よろしくお願いいたします。


11462 : 受講生さんのコメント (2019-06-19 13:12:12)

小川慶一さん:

お世話になっております。
アドバイス、ありがとうございました。

あの後、さらにケアレスミスなどを修正して、
一応、変数を使わない方法で、やってみたら、うまく動きました。
ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?


> 受講生 さん:
>
> 以下の式の演算結果が、 -0.1 < a < 0.1 を満たしていないのでしょうね。
> それで、Do Loop の中でも a の値が書き換わることがないので、いったんループに入ると、そのまま永久に抜けられないのでしょう。
>
>

a = 1 - (Worksheets("詳細算定③その他").Range("P43").Value - Worksheets("詳細算定③その他").Range("M36").Value)

>
> 以下の2つのセルの値を知りえないので、これ以上はコメントしかねます。
> Worksheets("詳細算定③その他").Range("P43")
> Worksheets("詳細算定③その他").Range("M36")
>
> 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
>
> 僕なら、以下の[1]の箇所にブレークポイントを入れてマクロを実行し、イミディエイトウィンドウの中身を見てみるところです。
> (コードが短いので、ブレークポイントなしで、ステップイン実行だけでもよいですが)
>
>
Sub syousai3()
>     Dim a
>     a = 1 - (Worksheets("詳細算定③その他").Range("P43").Value - Worksheets("詳細算定③その他").Range("M36").Value)
>     
>     Debug.Print a
>     Do
>         Worksheets("詳細算定③その他").Range("P36").Value = Worksheets("詳細算定③その他").Range("M43").Value
>         Debug.Print a
>         Debug.Print Abs(a)
>         If Abs(a) < 0.1 Then '[1]
>             Exit Do ' これが無いと無限ループになる
>         End If
>     Loop
> End Sub

>


11459 : 小川慶一の回答 (2019-06-19 12:01:56)

受講生 さん:

以下の式の演算結果が、 -0.1 < a < 0.1 を満たしていないのでしょうね。
それで、Do Loop の中でも a の値が書き換わることがないので、いったんループに入ると、そのまま永久に抜けられないのでしょう。

a = 1 - (Worksheets("詳細算定③その他").Range("P43").Value - Worksheets("詳細算定③その他").Range("M36").Value)


以下の2つのセルの値を知りえないので、これ以上はコメントしかねます。
Worksheets("詳細算定③その他").Range("P43")
Worksheets("詳細算定③その他").Range("M36")

基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。

僕なら、以下の[1]の箇所にブレークポイントを入れてマクロを実行し、イミディエイトウィンドウの中身を見てみるところです。
(コードが短いので、ブレークポイントなしで、ステップイン実行だけでもよいですが)

Sub syousai3()
    Dim a
    a = 1 - (Worksheets("詳細算定③その他").Range("P43").Value - Worksheets("詳細算定③その他").Range("M36").Value)
    
    Debug.Print a
    Do
        Worksheets("詳細算定③その他").Range("P36").Value = Worksheets("詳細算定③その他").Range("M43").Value
        Debug.Print a
        Debug.Print Abs(a)
        If Abs(a) < 0.1 Then '[1]
            Exit Do ' これが無いと無限ループになる
        End If
    Loop
End Sub


11458 : 受講生さんのコメント (2019-06-19 10:31:06)

小川先生

大変失礼しました。コードでいくつかタイプミスもあったので、さらに修正しました。下記のコードで記載しても、ループから抜けることができないのです。どうしたらよいでしょうか?

Sub syousai3()

Dim a

a = 1 - (Worksheets("詳細算定③その他").Range("P43").Value - Worksheets("詳細算定③その他").Range("M36").Value)


Do

Worksheets("詳細算定③その他").Range("P36").Value = Worksheets("詳細算定③その他").Range("M43").Value

If Abs(a) < 0.1 Then

Exit Do ' これが無いと無限ループになる
End If

Loop

End Sub



受講生 さん:

> 小川先生
>
> いつもお世話になっております。
>
> 実務で下記のようなプログラムを書きましたが、うまくいかないです。何が原因かわかりますでしょうか?おそらく、If Abs(a) < 0.1 Thenのところが、おかしいのではないかと個人的には思うのですが、絶対値のとり方が間違っているのでしょうか?
>
> Sub syousai3()
>
> Dim a
>
> a = 1 - (Worksheets("詳細算定③").Range("P43").Value - Worksheets("詳細算定③").Range("M36").Value)
>
>
> Do
>
> Worksheets("詳細算定③").Range("P36").Value = Worksheets("詳細算定③").Range("PM43").Value
>
> If Abs(a) < 0.1 Then
>
> Exit Do ' これが無いと無限ループになる
> End If
>
> Loop
>
> End Sub


11457 : 受講生さんのコメント (2019-06-19 10:23:40)

小川先生

いつもお世話になっております。

実務で下記のようなプログラムを書きましたが、うまくいかないです。何が原因かわかりますでしょうか?おそらく、If Abs(a) < 0.1 Thenのところが、おかしいのではないかと個人的には思うのですが、絶対値のとり方が間違っているのでしょうか?

Sub syousai3()

Dim a

a = 1 - (Worksheets("詳細算定③").Range("P43").Value - Worksheets("詳細算定③").Range("M36").Value)


Do

Worksheets("詳細算定③").Range("P36").Value = Worksheets("詳細算定③").Range("PM43").Value

If Abs(a) < 0.1 Then

Exit Do ' これが無いと無限ループになる
End If

Loop

End Sub


10460 : 受講生さんのコメント (2018-08-20 07:49:01)

小川先生
次の講義を見て驚きました。
凄いですね。
後は、これを使いこなせるイメージが私には必要と思いました。

> 受講生 さん:
>
> > 今のところ、数字が何文字かを計算するときに使う構文なのかと理解したがどうだろう。
>
> そんな茶地なものではないです。
>
> DoLoopは、くり返し作業開始段階ではくり返し作業の回数が予め分からないときに使う構文です。


10442 : 小川慶一の回答 (2018-08-17 11:21:28)

受講生 さん:

> 今のところ、数字が何文字かを計算するときに使う構文なのかと理解したがどうだろう。

そんな茶地なものではないです。

DoLoopは、くり返し作業開始段階ではくり返し作業の回数が予め分からないときに使う構文です。


10435 : 受講生さんのコメント (2018-08-17 07:10:08)

Do Loop構文 のイメージを掴んだ。
今のところ、数字が何文字かを計算するときに使う構文なのかと理解したがどうだろう。
次に進んでいきます。


9368 : 小川慶一の回答 (2018-01-26 14:21:55)

受講生 さん:

発展編1の講座本編で言うと、以下ですね。
発展1講座第4章 - For Each構文 伝票作成マクロ解説
https://online.pc5bai.com/movie/index/29/214

For Next構文で削除すべきシートを見つけて削除していく場合は、後ろにあるものから削除対象かどうかを調べていくのがセオリーです。
シートを1枚削除するごとに、削除したシート以降のシートのインデックス番号が変わるからです。
ハマったとしたら、そこでしょうか。

基礎編演習でも、「所定の条件に一致しない行を削除する」というものがありました。
これも、後ろの行から処理していきます。
理由はシート削除のときと同じ。削除した行以降の行の行番号が変わるからです。

なお、この手のハマりをする人にありがちなNG例をついでに示しておくと、「前から調べていって、削除処理をしたあとはカウンター変数の値をループ内で自分で変更する」みたいなマクロを書く人がいますが、これは典型的なダメ例です。
For Next構文のカウンター変数は、ループ内で自分で値を変更したりしないのが大原則です。それをするならDoLoopで。

いずれにしても、通勤時間を使ってでも何としてでも、動画はひととおり見られてしまうことをお勧めします。


9357 : 受講生さんのコメント (2018-01-24 14:05:50)

実務で、こんなマクロを考えています。

対象となるブックファイルにはたくさんのシートがある。今後必要なのは
最初の4シートだけなので、それ以外のシートをすべて削除したい。

ブック内のシート数を求める.countプロパティを利用し、
Worksheets(Worksheets.Count) .delete
とすれば、、一番右側のシートが削除されます。
これを繰り返し行っていき、
Worksheets(Worksheets.Count) = 4 となったら、
シート削除をやめる。

カウント変数がなくても、worksheets.count は、
シート削除を実行するたびに一つずつ減っていきますから、
これをloop構文に使えないだろうかと思ったのですが
自分で書こうとすると、うまくいきませんでした;
gooska


4353 : 小川慶一の回答 (2015-05-22 09:39:25)

ライスミルク さん:

条件判断の方法を式として表現することだけがキモです。

>数字の大小でなく、文字数でのジャッジというシンプルな思考に変わりました!!


4306 : 山田 将之さんのコメント (2015-05-18 20:52:25)

んー。今一つイメージが湧きません。


4296 : 山本 茂生さんのコメント (2015-05-18 13:45:02)

数字の大小でなく、文字数でのジャッジというシンプルな思考に変わりました!!


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 発展1講座イントロダクション - 使用するファイル、PDFの確認
    【動画1】 発展1講座イントロダクション - 使用するファイル、PDFの確認 未習得
  2. 【動画2】 発展1講座イントロダクション - デバッグ イミディエイトウィンド
    【動画2】 発展1講座イントロダクション - デバッグ イミディエイトウィンド 未習得
  3. 【動画3】 発展1講座第1章 - オープニング 第1章1
    【動画3】 発展1講座第1章 - オープニング 第1章1 未習得
  4. 【動画4】 発展1講座第1章 - オープニング 第1章2
    【動画4】 発展1講座第1章 - オープニング 第1章2 未習得
  5. 【動画5】 発展1講座第1章 - データの「型」1
    【動画5】 発展1講座第1章 - データの「型」1 未習得
  6. 【動画6】 発展1講座第1章 - データの「型」2
    【動画6】 発展1講座第1章 - データの「型」2 未習得
  7. 【動画7】 発展1講座第1章 - 変数の初期値
    【動画7】 発展1講座第1章 - 変数の初期値 未習得
  8. 【動画8】 発展1講座第1章 - ハンガリアン記法
    【動画8】 発展1講座第1章 - ハンガリアン記法 未習得
  9. 【動画9】 発展1講座第1章 - 変数宣言の強制1
    【動画9】 発展1講座第1章 - 変数宣言の強制1 未習得
  10. 【動画10】 発展1講座第1章 - 変数宣言の強制2
    【動画10】 発展1講座第1章 - 変数宣言の強制2 未習得
  11. 【動画11】 発展1講座第1章 - 総称オブジェクト型
    【動画11】 発展1講座第1章 - 総称オブジェクト型 未習得
  12. 【動画12】 発展1講座第1章 - 固有オブジェクト型
    【動画12】 発展1講座第1章 - 固有オブジェクト型 未習得
  13. 【動画13】 発展1講座第1章 - バリアント型
    【動画13】 発展1講座第1章 - バリアント型 未習得
  14. 【動画14】 発展1講座第2章 - オープニング 第2章
    【動画14】 発展1講座第2章 - オープニング 第2章 未習得
  15. 【動画15】 発展1講座第2章 - コレクション
    【動画15】 発展1講座第2章 - コレクション 未習得
  16. 【動画16】 発展1講座第2章 - コレクション(インデックス)
    【動画16】 発展1講座第2章 - コレクション(インデックス) 未習得
  17. 【動画17】 発展1講座第2章 - コレクション(インデックス)の具体例
    【動画17】 発展1講座第2章 - コレクション(インデックス)の具体例 未習得
  18. 【動画18】 発展1講座第2章 - プロパティ 従属要素のオブジェクト
    【動画18】 発展1講座第2章 - プロパティ 従属要素のオブジェクト 未習得
  19. 【動画19】 発展1講座第2章 - プロパティ 上位のオブジェクト
    【動画19】 発展1講座第2章 - プロパティ 上位のオブジェクト 未習得
  20. 【動画20】 発展1講座第2章 - プロパティ 同レベルのオブジェクト
    【動画20】 発展1講座第2章 - プロパティ 同レベルのオブジェクト 未習得
  21. 【動画21】 発展1講座第2章 - プロパティ 値として表現できるデータ
    【動画21】 発展1講座第2章 - プロパティ 値として表現できるデータ 未習得
  22. 【動画22】 発展1講座第2章 - プロパティ Offset
    【動画22】 発展1講座第2章 - プロパティ Offset 未習得
  23. 【動画23】 発展1講座第2章 - プロパティ Offsetの使い方
    【動画23】 発展1講座第2章 - プロパティ Offsetの使い方 未習得
  24. 【動画24】 発展1講座第2章 - End プロパティの使い方
    【動画24】 発展1講座第2章 - End プロパティの使い方 未習得
  25. 【動画25】 発展1講座第2章 - メソッド1
    【動画25】 発展1講座第2章 - メソッド1 未習得
  26. 【動画26】 発展1講座第2章 - メソッド2
    【動画26】 発展1講座第2章 - メソッド2 未習得
  27. 【動画27】 発展1講座第3章 - マクロの自動記録 イントロダクション
    【動画27】 発展1講座第3章 - マクロの自動記録 イントロダクション 未習得
  28. 【動画28】 発展1講座第3章 - マクロの自動記録 オートフィルタ1
    【動画28】 発展1講座第3章 - マクロの自動記録 オートフィルタ1 未習得
  29. 【動画29】 発展1講座第3章 - マクロの自動記録 オートフィルタ2
    【動画29】 発展1講座第3章 - マクロの自動記録 オートフィルタ2 未習得
  30. 【動画30】 発展1講座第3章 - マクロの自動記録 フォントの設定
    【動画30】 発展1講座第3章 - マクロの自動記録 フォントの設定 未習得
  31. 【動画31】 発展1講座第3章 - マクロの自動記録 カラーインデックス
    【動画31】 発展1講座第3章 - マクロの自動記録 カラーインデックス 未習得
  32. 【動画32】 発展1講座第3章 - マクロの自動記録 アンダースコア
    【動画32】 発展1講座第3章 - マクロの自動記録 アンダースコア 未習得
  33. 【動画33】 発展1講座第3章 - マクロの自動記録 途中改行1 入力支援機能
    【動画33】 発展1講座第3章 - マクロの自動記録 途中改行1 入力支援機能 未習得
  34. 【動画34】 発展1講座第3章 - マクロの自動記録 途中改行2
    【動画34】 発展1講座第3章 - マクロの自動記録 途中改行2 未習得
  35. 【動画35】 発展1講座第3章 - マクロの自動記録 並べ替え
    【動画35】 発展1講座第3章 - マクロの自動記録 並べ替え 未習得
  36. 【動画36】 発展1講座第3章 - マクロの自動記録 個人用マクロブック
    【動画36】 発展1講座第3章 - マクロの自動記録 個人用マクロブック 未習得
  37. 【動画37】 発展1講座第4章 - 論理演算子 イントロダクション
    【動画37】 発展1講座第4章 - 論理演算子 イントロダクション 未習得
  38. 【動画38】 発展1講座第4章 - 論理演算子 解説
    【動画38】 発展1講座第4章 - 論理演算子 解説 未習得
  39. 【動画39】 発展1講座第4章 - 構造文 イントロダクション
    【動画39】 発展1講座第4章 - 構造文 イントロダクション 未習得
  40. 【動画40】 発展1講座第4章 - For Each構文 イントロダクション1
    【動画40】 発展1講座第4章 - For Each構文 イントロダクション1 未習得
  41. 【動画41】 発展1講座第4章 - For Each構文 イントロダクション2
    【動画41】 発展1講座第4章 - For Each構文 イントロダクション2 未習得
  42. 【動画42】 発展1講座第4章 - For Each構文 イントロダクション3
    【動画42】 発展1講座第4章 - For Each構文 イントロダクション3 未習得
  43. 【動画43】 発展1講座第4章 - For Each構文 演習
    【動画43】 発展1講座第4章 - For Each構文 演習 未習得
  44. 【動画44】 発展1講座第4章 - For Each構文 伝票作成マクロ解説
    【動画44】 発展1講座第4章 - For Each構文 伝票作成マクロ解説 未習得
  45. 【動画45】 発展1講座第4章 - For Each構文 セルのコレクション
    【動画45】 発展1講座第4章 - For Each構文 セルのコレクション 未習得
  46. 【動画46】 発展1講座第4章 - For Each構文 カンニングペーパー
    【動画46】 発展1講座第4章 - For Each構文 カンニングペーパー 未習得
  47. 【動画47】 発展1講座第4章 - Do Loop構文 概要
    【動画47】 発展1講座第4章 - Do Loop構文 概要 未習得
  48. 【動画48】 発展1講座第4章 - Do Loop構文 マクロの流れ
    【動画48】 発展1講座第4章 - Do Loop構文 マクロの流れ 未習得
  49. 【動画49】 発展1講座第4章 - Do Loop構文 4つのパターン
    【動画49】 発展1講座第4章 - Do Loop構文 4つのパターン 未習得
  50. 【動画50】 発展1講座第4章 - Do Loop構文 マクロの強制終了
    【動画50】 発展1講座第4章 - Do Loop構文 マクロの強制終了 未習得
  51. 【動画51】 発展1講座第4章 - Exit For、Exit Do、Exit Sub
    【動画51】 発展1講座第4章 - Exit For、Exit Do、Exit Sub 未習得
  52. 【動画52】 発展1講座第4章 - Select Case 概要
    【動画52】 発展1講座第4章 - Select Case 概要 未習得
  53. 【動画53】 発展1講座第4章 - Select Case If文との比較
    【動画53】 発展1講座第4章 - Select Case If文との比較 未習得
  54. 【動画54】 発展1講座第4章 - Select Case 比較する条件の順番
    【動画54】 発展1講座第4章 - Select Case 比較する条件の順番 未習得
  55. 【動画55】 発展1講座第4章 - Select Case 複数条件の並べ方
    【動画55】 発展1講座第4章 - Select Case 複数条件の並べ方 未習得
  56. 【動画56】 発展1講座第4章 - Select Case 条件の範囲選択
    【動画56】 発展1講座第4章 - Select Case 条件の範囲選択 未習得
  57. 【動画57】 発展1講座第5章 - Sub プロシージャの分割と呼び出し
    【動画57】 発展1講座第5章 - Sub プロシージャの分割と呼び出し 未習得
  58. 【動画58】 発展1講座第5章 - Sub プロシージャを分割するメリット
    【動画58】 発展1講座第5章 - Sub プロシージャを分割するメリット 未習得
  59. 【動画59】 発展1講座第5章 - ステップアウト、ステップオーバー
    【動画59】 発展1講座第5章 - ステップアウト、ステップオーバー 未習得
  60. 【動画60】 発展1講座第5章 - モジュールレベル変数
    【動画60】 発展1講座第5章 - モジュールレベル変数 未習得
  61. 【動画61】 発展1講座第5章 - モジュールレベル変数の操作
    【動画61】 発展1講座第5章 - モジュールレベル変数の操作 未習得
  62. 【動画62】 発展1講座第5章 - モジュールレベル変数 変数の重複
    【動画62】 発展1講座第5章 - モジュールレベル変数 変数の重複 未習得
  63. 【動画63】 発展1講座第5章 - モジュールレベル変数 まとめ
    【動画63】 発展1講座第5章 - モジュールレベル変数 まとめ 未習得
  64. 【動画64】 発展1講座第5章 - モジュールレベル変数 アクセシビリティ設定
    【動画64】 発展1講座第5章 - モジュールレベル変数 アクセシビリティ設定 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ