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
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
受講生さんの投稿
(投稿ID: 4508)
いつもお世話になっております。
実務で下記のようなプログラムを書きましたが、うまくいかないです。何が原因かわかりますでしょうか?おそらく、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
受講生さんのコメント
(コメントID: 6208)
大変失礼しました。コードでいくつかタイプミスもあったので、さらに修正しました。下記のコードで記載しても、ループから抜けることができないのです。どうしたらよいでしょうか?
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
小川 慶一さんのコメント
(コメントID: 6209)
以下の式の演算結果が、 -0.1 < a < 0.1 を満たしていないのでしょうね。
それで、Do Loop の中でも a の値が書き換わることがないので、いったんループに入ると、そのまま永久に抜けられないのでしょう。
以下の2つのセルの値を知りえないので、これ以上はコメントしかねます。
Worksheets("詳細算定③その他").Range("P43")
Worksheets("詳細算定③その他").Range("M36")
基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
僕なら、以下の[1]の箇所にブレークポイントを入れてマクロを実行し、イミディエイトウィンドウの中身を見てみるところです。
(コードが短いので、ブレークポイントなしで、ステップイン実行だけでもよいですが)
受講生さんのコメント
(コメントID: 6210)
お世話になっております。
アドバイス、ありがとうございました。
あの後、さらにケアレスミスなどを修正して、
一応、変数を使わない方法で、やってみたら、うまく動きました。
ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
> 受講生 さん:
>
> 以下の式の演算結果が、 -0.1 < a < 0.1 を満たしていないのでしょうね。
> それで、Do Loop の中でも a の値が書き換わることがないので、いったんループに入ると、そのまま永久に抜けられないのでしょう。
>
>
>
> 以下の2つのセルの値を知りえないので、これ以上はコメントしかねます。
> Worksheets("詳細算定③その他").Range("P43")
> Worksheets("詳細算定③その他").Range("M36")
>
> 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
>
> 僕なら、以下の[1]の箇所にブレークポイントを入れてマクロを実行し、イミディエイトウィンドウの中身を見てみるところです。
> (コードが短いので、ブレークポイントなしで、ステップイン実行だけでもよいですが)
>
>
>
小川 慶一さんのコメント
(コメントID: 6211)
> あの後、さらにケアレスミスなどを修正して、
> 一応、変数を使わない方法で、やってみたら、うまく動きました。
> ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
ありえないことないですよ。使い勝手は悪いですが。
でも、現状で満足なら、手直しはしないでよいと思います。
> ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
基礎編の内容をしっかり理解し、基礎編の演習で出てきた課題をスラスラ解けるようになってください。
そうなったころには、この質問がいかにバカバカしいものか?ということが分かるでしょう。
演習不足です。
本件のサポートは継続して行います。
が、基礎編のフォローアップベーシックをしっかり復習することを強くおすすめします。
復習の方法は、自分で手を動かして、くり返し練習します。
動画も見本のコードもみないで自力でスラスラ解けるようになるまで、くり返し練習します。
少なくとも、動画16までのお題は、すべて動画も見本のコードもみないで自力でスラスラ解けるようになる必要があります。
発展編1に進むのはそれからでも遅くはありません。
> 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
↑
もし本件について継続してサポートを受けたいということでしたら、こういう質問には答えていただけますか。
でないと、何を指導すればピンポイントな助けになるかわかりません。
よろしくお願いいたします。
受講生さんのコメント
(コメントID: 6227)
> > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print を活用していませんでした。失礼いたしました。
> 受講生 さん:
>
> > あの後、さらにケアレスミスなどを修正して、
> > 一応、変数を使わない方法で、やってみたら、うまく動きました。
> > ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
>
> ありえないことないですよ。使い勝手は悪いですが。
> でも、現状で満足なら、手直しはしないでよいと思います。
>
> > ただ、変数を使えないプログラム・・・変数を使えないシステム・・・というのは、ありうるものなのでしょうか?
>
> 基礎編の内容をしっかり理解し、基礎編の演習で出てきた課題をスラスラ解けるようになってください。
> そうなったころには、この質問がいかにバカバカしいものか?ということが分かるでしょう。
>
> 演習不足です。
>
> 本件のサポートは継続して行います。
> が、基礎編のフォローアップベーシックをしっかり復習することを強くおすすめします。
>
> 復習の方法は、自分で手を動かして、くり返し練習します。
> 動画も見本のコードもみないで自力でスラスラ解けるようになるまで、くり返し練習します。
> 少なくとも、動画16までのお題は、すべて動画も見本のコードもみないで自力でスラスラ解けるようになる必要があります。
>
> 発展編1に進むのはそれからでも遅くはありません。
>
> > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
> ↑
> もし本件について継続してサポートを受けたいということでしたら、こういう質問には答えていただけますか。
> でないと、何を指導すればピンポイントな助けになるかわかりません。
>
> よろしくお願いいたします。
>
小川 慶一さんのコメント
(コメントID: 6228)
> 小川慶一さん:
>
> > > 基礎編で学んだ自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print は活用されていますか。
>
> 自動データヒント、ブレークポイント、発展編1で学んだ Debug.Print を活用していませんでした。失礼いたしました。
やはり...。ですよね。
自力で問題解決できるうになるためには、上に示したようなスキルは大切です。
基礎編ベーシックの演習も、「これらの機能を学ぶため」というようにしっかり目的を持ちつつ、最低でも一周はしっかり復習されることをおすすめします。
ところで、
> もし本件について継続してサポートを受けたいということでしたら
と書きました。
こちらについては、どうですか。