• ベストアンサー

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でとまってしまいます。 ぜひとも間違いご指摘ください。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

オーバーフローは関係ないと思いますけど.... 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 の 限りループが継続する。 違いの詳細はヘルプで。

dadao
質問者

お礼

なるほど、わかりました。FalseからTrue,TrueからFalseにの条件見極めが必要なわけですね。もっと試して理解できるようになりたいと思います。

その他の回答 (2)

回答No.3

Do Loop While (****) は「*****」が真の間ループを廻ります。条件をお確かめになって下さい。私が試しに「****」箇所を修正したところ、ちゃんと動作しました。私もマクロ初心者です。お互い、頑張りましょう!

dadao
質問者

お礼

不等式を逆にすればできましたね。まだまだ理解不足ですね。 実用できるプログラムを作るまでは時間がかかりそうです。 今回はポイント対象外とさせていただきますが、今回は3人ともわかりやすい回答で悩みました。おそらくこういう質問をたくさんしていくことになると思うので機会があればよろしくお願いします。

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.1

Loop While t>10 こいつは「tが10より大きい間はループを回せ」ですから、 ずっとループを回ってtがオーバーフローするんじゃ? Loop Until t>10 じゃないかと。

dadao
質問者

お礼

できました。まだまだ理解が足りないですね。 もっと試してみます。

関連するQ&A

専門家に質問してみよう