プロが教えるわが家の防犯対策術!

ExcelVBAのオプションボタンによる条件分岐についての問題が分からないのでご教授ください。添付画像あります。
問題
年齢に応じた料金に出力するプログラムを作成しなさい。フォームにはオプションボタン、フレーム、複数のラベル、3つのコマンドボタンがある。
動作は以下のようなものです。
0.プログラムを開始する
1.水族館1(オプションボタン1)を選択した後、料金計算ボタンをクリックすると、年齢を入力するインプットボックスを表示する。
↑ここまではできました。

2.入力された年齢をもとに水族館の料金を調べ、年齢と料金を表示する。料金には3桁ごとの桁区切りを付ける。

水族館の料金表は
水族館1は
65歳以上 1800円
18歳以上2000円
12~17歳1500円
4~11歳1200円
3歳以下 無料

水族館2は
65歳以上 1600円
12歳以上 1800円
4歳~11歳1000円
3歳以下 無料
です。

If optionbutton1.Value=True Then

Elseif 年齢>=65 Then 料金=”1600”
Elseif 年齢>=618Then 料金=”1800”


(一部省略)

Else
この後に何を書いていいか分かりません(>_<)
Endif

このようなかんじで1つの水族館の料金を表示はできたのですが、2つの水族館の料金を表示させるにはどうしたらいいのか分かりません。

どなたかわかる方よろしくお願いしますm(_ _)m

「ExcelVBAのオプションボタンによる」の質問画像

A 回答 (2件)

If optionbutton1.Value=True Then


'水族館1の料金
Select case 年齢
Case >=65
料金 = 1800
Case 18 TO 64
料金 = 2000
Case 12 TO 17
料金 = 1500
Case 4 TO 11
料金 = 1200
Case <=3
料金 = 無料
End Select
Else  
'水族館2の料金
Select case 年齢
Case >=65
料金 = 1600
Case 12 TO 64
料金 = 1800
Case 4 TO 11
料金 = 1000
Case <=3
料金 = 無料
End Select
End If

水族館の選択と年齢はAnd条件です。
「水族館1を選択、且つ年齢が●●の場合・・・・」
なので、オプションボタンの選択(水族館の選択)のIF文で水族館1と水族館2で分けて参照する水族館の料金表を固定します。
その後で年齢の条件で設定する料金を返してあげると良いと思います。
    • good
    • 0

私なら、ユーザー定義関数で補完します。




Private Sub CommandButton1_Click()
Dim age As Variant
Dim chg As Variant
Dim j As Long
If OptionButton1.Value Then
 j = 0
ElseIf OptionButton2.Value Then
 j = 1
End If

age = Application.InputBox("年齢を入力してください", Type:=2)
If VarType(age) = vbBoolean Or Trim(age) = "" Then Exit Sub
 If age<0 then Exit Sub
 chg = IndexLists(age, j)
Label1.Caption = age
Label2.Caption = Format$(chg, "#,##0")
End Sub

Function IndexLists(ByVal age As Integer, ByVal sel As Integer)
 Dim aqua1
 Dim ages1
 Dim chg As Variant

 If sel = 0 Then
  Select Case age
  Case Is >= 65: chg = 1800
  Case Is >= 18: chg = 2000
  Case Is >= 12: chg = 1500
  Case Is >= 4: chg = 1200
  Case 0 To 3: chg = 0
  End Select
 ElseIf sel = 1 Then
  Select Case age
  Case Is >= 65: chg = 1600
  Case Is >= 12: chg = 1800
  Case Is >= 4: chg = 1000
  Case 0 To 3: chg = 0
  End Select
 End If
 IndexLists = chg
End Function
    • good
    • 0

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