- ベストアンサー
VBAの改善点を教えてください(初心者)
- VBAの改善点を教えてください。初心者が作成した印刷プログラムの改善点を教えてください。
- EXCEL2000を使用している初心者です。印刷枚数を入力して印刷するプログラムを作成しましたが、もっと簡単な記述や改善点があれば教えてください。
- VBA初心者です。印刷プログラムを作成しましたが、もっと効率的な記述や改善点があれば教えてください。EXCEL2000を使用しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1.>一応、動きますが、勉強中なのでご教授をお願いいたします 本当にエラーが起きずに動いたのかどうか疑問、コピーして動かしたらエラーが起きた inputbox 使うなら文字列で受けてすべての条件をチェックした方が良いと思う 2. If ElseIf は乱用しないほうがベター、プログラムを修正してると時々わからなくなる 異論もあるかもしれないが If 文は If Else End If 程度に抑えたほうが後々楽です Select Case 使ったほうがプログラムが読みやすい
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
きちんと作動しているとは思えないですが、一応アドバイスとして ElseIf aaa <= 31 Then MsgBox "31日までの範囲で入力してください" な、本当にご希望ですか? <=が逆では? 別案ですが、 InputBoxは、必ず 文字列を返してきます。 似たような関数で Application.InputBox で試してみてください。 機能が増えていて、Typeが指定できます。詳しくはWebで検索してみてください。 Type:=1 は数値しか入力できない様に指定しています。 それを利用すると aaa = 0 aaa = Application.InputBox(Prompt:="印刷枚数を入力してください", Title:="印刷枚数", Default:="", Type:=1) If aaa > 31 Or aaa < 1 Then MsgBox "1~31日までの範囲で入力してください" Else MsgBox "印刷を開始します" For i = 1 To aaa Worksheets(1).PrintOut Worksheets(1).Range("k23").Value = Range("k23") + 1 Next i End If では十分ではないでしょうか。 aaa = 0 は。メッセージボックスで キャンセルを押されたときの為に おいておきました。 For i = 0 To aaa もご希望かどうかわかりませんが For i = 1 To aaa にしておきました。
お礼
ご回答ありがとうございます。 期待通りのご回答に感謝しています。 またよろしくお願いいたします(^^♪
- imogasi
- ベストアンサー率27% (4737/17069)
(1)>If 1 <= aaa And aaa <= 31 Then はおかしくないですか? (2)Inputbox の応答で、とらえられるデータは、文字列の数字ではないですか? 数値化(Val関数で)して比較すべきでは? (3)私もSelect Caseを使うのを勧めます。 ElseIfの連続はわかりにくい。 (4)こういう勉強も良いが、インプトチェックなどより、もっとエクセルを使う(データを・データで処理する)ことを中心にすえた 勉強をしたほうが良いのでは。こんな程度の質問を連発しても、余りエクセルVBAの中の課題に入っていないと思う。 VBAらしいのは、Worksheets(1).PrintOutと次行だけ。 ーー VBAの本を買ってきて、例題をその通り自分でもやってみて、勉強すべきでしょう。 まだこんな質問コーナーに、質問を出すレベルではないのでは。
お礼
早速のご回答ありがとうございました。 なかなか参考書を勉強しても、難しいですね・・・! 確かに、自分で見てもWorksheets(1).PrintOutと次に行はvbaらしくなっていると、 いまさらながら思いました(^^) またよろしくお願いします。
お礼
さっそくのご回答ありがとうございました。 なかなか周辺に質問できる環境がないので、非常に参考になりました。 Select Case についても参考書にあるので勉強していきたいと思います。 またよろしくお願いします。