- ベストアンサー
VBAでln関数の計算
VBAでln関数から以下のようなプログラムを組みましたが、 オーバーフローします。どこが原因でしょうか? 初心者なので初歩的なところで間違えていると思います。 Sub log関数() Dim i As Double Dim t As Double i = 2 Do i = i + 1 t = Log(i) Loop While (t > 10) MsgBox (i & "はin(x)が最初に10を超える数字です") End Sub 値として最初の数字の3でとまってしまいます。 ぜひとも間違いご指摘ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
オーバーフローは関係ないと思いますけど.... Loop While (t > 10) → Loop Until (t > 10) に変更して下さい。 Do ~ Loop While(条件句): 条件句が True である限りループする。逆に言えば条件句が False に なればループが終了する。 > i = 2 > Do > i = i + 1 '<--- i=3 > t = Log(i) '<--- t= 1.09861228866811 > Loop While (t > 10) '<--- (t > 10) で 評価 False でループ終了 Do ~ Loop Until(条件句): 条件句が True になるまでループする。逆に言えば条件句が False の 限りループが継続する。 違いの詳細はヘルプで。
その他の回答 (2)
- judas_2006
- ベストアンサー率56% (82/145)
Do Loop While (****) は「*****」が真の間ループを廻ります。条件をお確かめになって下さい。私が試しに「****」箇所を修正したところ、ちゃんと動作しました。私もマクロ初心者です。お互い、頑張りましょう!
お礼
不等式を逆にすればできましたね。まだまだ理解不足ですね。 実用できるプログラムを作るまでは時間がかかりそうです。 今回はポイント対象外とさせていただきますが、今回は3人ともわかりやすい回答で悩みました。おそらくこういう質問をたくさんしていくことになると思うので機会があればよろしくお願いします。
- FEX2053
- ベストアンサー率37% (7995/21381)
Loop While t>10 こいつは「tが10より大きい間はループを回せ」ですから、 ずっとループを回ってtがオーバーフローするんじゃ? Loop Until t>10 じゃないかと。
お礼
できました。まだまだ理解が足りないですね。 もっと試してみます。
お礼
なるほど、わかりました。FalseからTrue,TrueからFalseにの条件見極めが必要なわけですね。もっと試して理解できるようになりたいと思います。