- ベストアンサー
ループと条件文を使って・・・
ループと条件文を使ってプログラムを作るのですが、 一日の食費と、何日間生活したいか を入力して、実行すると『○○○円の予算がかかる』というのを友達が作ってくれました。 (友達と一緒に課題を制作することになっているので) 食費を「en」、日数を「hi」、実行した後表示されるラベルを「ans」とすると、 コードは Private Sub Command1_Click() If en.Text="" And hi.Text="" Then ans="数字を入力して下さい" Else e=en.Text h=hi.Text If IsNumeric(e) And IsNumeric(h) Then For i=1 to h Kotae=kotae + e Next ans="あなたが"& e &"円の食事を"& h &"日間食べるには、"& kotae &"円の予算がかかる。" Else:ans="数字を入力して下さい。" End If End If End Sub となっていました。 私が理解していないのか、このコードでは腑に落ちません… 分かる方、わかりやすく説明していただけたらとても助かります。 また、こうした方がもっといいプログラムになる などアドバイスなどでも結構ですので、 よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>Else:ans="数字を入力して下さい。" ここでエラーになりませんか。昨日も同じ質問がOKWEBに載りました。 Else ans="数字を入力して下さい。" のようにすること。 > e=en.Text enはVBのコントロールを示すオブジェクトだと思いますが。LabelかTextBoxでしょうか。 でもen.Textと書けないし、ラベルのときは、TEXTプロパティはありましたっけ。Captionしかないのでは。 貼りつける台紙のForm1.Label1.Captionのようになるのでは。 私の場合はVBのコントロールの勉強がむしろ大変です。 この点も勉強しないと、ロジックは正しくても動きませんよ。
その他の回答 (4)
- taknt
- ベストアンサー率19% (1556/7783)
あ、ansは、ラベルでしたね。 でしたら ans.caption="~~ と 記述しないとダメです。
- taknt
- ベストアンサー率19% (1556/7783)
Private Sub Command1_Click() ans = "数字を入力して下さい" If en.Text = "" Or hi.Text = "" Then Exit Sub End If If IsNumeric(en.Text) And IsNumeric(hi.Text) Then ans = "あなたが" & en.Text & "円の食事を" & hi.Text & "日間食べるには、" & en.Text * hi.Text & "円の予算がかかる。" End If End Sub これで 上記のが できると思います。 ansは、グローバル変数であることを前提としています。
補足
ans.caption は見落としていました ありがとうございました! そして、作ってくださったプログラムなのですが、 やはり、掛け算にすれば済むんですよね(笑)・・・ ここは思い切って違うプログラムを考えた方が良さそうですね・・・・・・
- craftsman
- ベストアンサー率49% (166/336)
ポイントは、For to ~ Next文で、kotaeにh回、eを足しているのですね。 しかし・・・単にこの計算をするだけなら、For to ~ Nextを使わずに、単純にkotae=e*hのかけ算だけで良いと思います。 これは、For to ~ Next文の使い方を説明するサンプルじゃないんですか? つまり、実際に結果を求める為に書いたコードでは無い訳で。 例の取り方が悪いとも言えますね。(^^; ま、解説本の記事等にはありがちですが。
補足
そうなんです!! それを友達に言ったんですが、あまりわかってもらえてないようで・・・ ちなみに授業では、1000円以下の数字を入力し、実行したら 硬貨の最小枚数が出る などということをやりました。 この食費の計算ではなくて、何かいいプログラムを考えだせればいいんですけど・・ なかなか難しいです。 ありがとうございました
- taknt
- ベストアンサー率19% (1556/7783)
プログラムの解説ですが、 まず enと hiの 両方に何も入ってなかったら、 数字を入力して下さい が、表示されます。 両方に何か入ってたら、 次に、enと hiの中身が両方とも 数字だったら計算にいきます。 Kotaeに enを hi回分、足して結果を表示します。 どちらかが数字でなかったら 数字を入力して下さい を表示しています。 このプログラムの問題点は、 Kotaeを初期化していない点だと思います。 VBのことだから、初期化しなくても動くとは 思いますが、念のために初期化 しておいたらいいですね。あとへんすうの宣言とかもしておいたほうがいいでしょう。 Kotae=0 For i=1 to h Kotae=kotae + e Next としたらいいでしょう。 ま、プログラムは いろいろ作り方があるので これでもいいかもしれませんが、 私だったら、もっとチェックの仕方をスマートにしたいと思います。
補足
ありがとうございます。 スマートにした形をもしよろしければ、教えていただけないでしょうか? 授業で習った範囲内で、そちらが使えそうならば、参考にしたいと思います。
お礼
enはテキストボックスだと思います。 ansのところがラベルです。 昨日と同じ質問だったんですね・・・ ありがとうございました