2011年6月4日土曜日

VBAにおける分岐とループ

分岐とループをテーマに、お年玉プログラムを作成。


からの〜



仕様は以下な感じ。

  • 名前をユーザーに入力させる。
  • 次に年齢を入力させる。
  • お年玉の金額が表示される。
  • 入力がなかった場合は無限に質問を繰り返す。
  • 一行ずつの処理



つかった構文などの紹介はプログラム内にコメントとして書きました。


 Sub Otoshidama()

 'とりあえずA2からスタート。
 '指定したセルに飛ぶには[指定したいセル].Select
 [A2].Select
    
    '現在のセルが空セルになるまでループを回す
    'if を始めたら必ず最後はend ifでif文を閉じる
    Do Until ActiveCell.Value = ""
         If (ActiveCell.Value <> "") Then
             ActiveCell.Offset(1, 0).Select
         End If
    Loop
    
    '----名前入力部分------
    
    '変数定義
    Dim name As String
    
    '値が入力されるまで質問を続ける
    '<>は「〜ではない」、""は空文字を示す。
    Do Until ActiveCell.Value <> ""
    
        'ユーザーに入力させるウィンドウはInputBox
        name = InputBox("お名前は?", "質問その1", "")
         If (name <> "") Then
             ActiveCell.Value = name
         End If
    Loop
    
    
    '----年齢入力部分------
    
    '移動して年齢入力にうつる
    ActiveCell.Offset(0, 1).Select
    
    '変数定義
    Dim ageString As String
    Dim age As Integer
    
    '値が入力されるまで質問を続ける
    Do Until ageString <> ""
        ageString = InputBox("年齢は?", "質問その2", "")
    Loop
    
    '文字列を整数型に変換し、0以上ならセルに入力させる
     age = CInt(ageString)
     If (age >= 0) Then
        ActiveCell.Value = age
    End If
    
    
    '----お年玉金額判定&入力部分------
    
    '移動して年齢入力にうつる
    ActiveCell.Offset(0, 1).Select
    
    If (age < 5) Then
         ActiveCell.Value = 500
    ElseIf (age < 10) Then
        ActiveCell.Value = 1000
    ElseIf (age < 15) Then
         ActiveCell.Value = 5000
    Else
        ActiveCell.Value = "自分で働け"
        
    End If
    
 End Sub


ちなみに、ifの中の条件はカッコでくくってても、カッコが無くてもあっても大丈夫みたいです。
VBAでメソッド分け的なことはどうするんでしょ。。。読みにくくて仕方ない(長いから)。

勉強します。

0 件のコメント:

コメントを投稿