牛、豚、鶏、どれか一つ食べられなくなるとしたら?

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

A 回答 (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 の
限りループが継続する。

違いの詳細はヘルプで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/16 11:04

Do


Loop While (****)

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

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

お礼日時:2006/11/16 11:08

Loop While t>10



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

Loop Until t>10

じゃないかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/16 11:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!