LibreOffice Basic 制御構文 条件分岐
If構文
条件分岐は、なんらかの条件によって処理を分岐する制御構文。その代表的なものがIf構文。その書式はIf 条件式 Then 処理内容 ElseIf 条件式 Then 処理内容 Else 処理内容 End Ifのようになる。ただし、ElseIf文とElse文は必要なければ用いなくてよい付属文。
次のコードは、身長と体重の入力を促し、その値が0以下であるかどうかを検証し、0以下であればその値が無効であるとメッセージボックスに出力し、0以下でなければボディマス指数(BMI)を計算する函数を呼び出してその計算結果をメッセージボックスに出力するもの。
REM **** BMIを計算 ****
'変数を明示的に宣言して使う
Option Explicit
Sub Main
'局所変数をSingle型で宣言
Dim height As Single
Dim weight As Single
Dim bmiValue As Single
'身長と体重の値の入力を促す
height = InputBox("あなたの身長(cm)を入力してください")
weight = InputBox("あなたの体重(kg)を入力してください")
'If構文を用いて入力された値を検証
If height <= 0 Then
MsgBox "身長が無効な値です"
ElseIf weight <= 0 Then
MsgBox "体重が無効な値です"
Else
'BMIを計算する函数を呼び出して返り値を代入
bmiValue = funBmi(height,weight)
'計算結果をメッセージボックスに出力
MsgBox "あなたのボディマス指数は" & bmiValue & "です"
End If
End Sub
'BMIを計算する函数
Private Function funBmi(height As Single, weight As Single)
'身長と体重からBMIを計算した値を返す
funBmi = weight / (height/100)^2
End FunctionIf height <= 0 Thenは身長の値が0以下の場合という意味。ElseIf weight <= 0 Thenは体重の値が0以下の場合という意味。Elseはいずれでもない場合。
IIf函数
制御構文ではないが、条件分岐の機能を持つ函数としてIIf函数というものがある。IIfはImmediate If(緊急のIf)という意味。IIf函数の引数に条件式、真の場合、偽の場合を渡すとIf構文と同じような働きをしてくれる。
次のコードは整数の入力を促し、IIf函数の第一引数でその値を2で割って0に等しくなるかを判定し、真ならば第二引数である"偶数"という文字列を、偽ならば第三引数である"奇数"という文字列を返してメッセージボックスに出力するもの。
REM ***** 奇数か偶数か判別 *****
'変数を明示的に宣言して使う
Option Explicit
Sub Main
Dim x As Integer
Dim a As String
x = InputBox("整数を入力してください")
a = IIf((x MOD 2) = 0, "偶数", "奇数")
MsgBox x & "は" & a & "です"
End Subただしこのコードでは、InputBoxに小数を入力するとInteger型の変数に代入されるので四捨五入される。また、整数でなく文字列を入力するとすべて0となるのでIIf函数によって偶数と判定される。
Select Case構文
条件分岐にはIf構文の他にSelect Case構文がある。C言語でswitch構文と呼ばれているものにそれは似ている。その書式はSelect Case 変数名 Case 値1: 処理内容 Case 値2: 処理内容 Case 値3: 処理内容 Case Else: いずれにも該当しないときの処理内容 End Selectのようになる。ただし、各Caseの値の部分は、値の範囲(値 to 値)であってもよいし、複数の値をカンマで区切って並べてもよいし、論理演算子を用いた条件式であってもよい。
WeekDay函数はその引数をdateやnowにすると今日の曜日をInteger型の番号で返してくれるが、次のコードはその曜日番号をSelect Case構文で識別することによってString型の曜日名に切り替えて出力するもの。WeekDay函数から返された今日の曜日番号を変数に代入し、Select Case構文によってその番号がどのCaseに当てはまるかで分岐し、その番号に対応する曜日名を変数に代入してメッセージボックスに出力する。
REM ***** BASIC *****
'変数を明示的に宣言して使う
Option Explicit
Sub Main
'局所変数を宣言
Dim weekdayNumber As Integer
Dim weekdayName As String
'WeekDay()函数から曜日番号を取得
weekdayNumber = WeekDay(now)
'曜日番号から曜日名を得るSelect構文
Select Case weekdayNumber
Case 1:
weekdayName = "日曜日"
Case 2:
weekdayName = "月曜日"
Case 3:
weekdayName = "火曜日"
Case 4:
weekdayName = "水曜日"
Case 5:
weekdayName = "木曜日"
Case 6:
weekdayName = "金曜日"
Case 7:
weekdayName = "土曜日"
End Select
'曜日名をメッセージボックスに出力
MsgBox "今日は" & weekdayName & "です"
End SubこのコードではCase Else文を使わなかったが、最後のCase 7:の部分をCase Else:と書き換えても同じように動作するはず。
次のコードは、入力された身長と体重からボディマス指数(BMI)を計算し、その値をWHOの基準に則してSelect Case構文を用いて評価した結果をメッセージボックスに出力するもの。
REM ***** BMIを計算して評価 *****
'変数を明示的に宣言して使う
Option Explicit
Sub Main
'局所変数をSingle型で宣言
Dim height As Single
Dim weight As Single
Dim bmiValue As Single
'身長と体重の入力を促す
height = InputBox("あなたの身長(cm)を入力してください")
weight = InputBox("あなたの体重(kg)を入力してください")
'入力された値を検証
If height <= 0 Then
MsgBox "身長が無効な値です"
ElseIf weight <= 0 Then
MsgBox "体重が無効な値です"
End If
'BMIを計算する函数を呼び出す
bmiValue = funBmi(height,weight)
'Select Case構文を用いた出力
Select Case bmiValue
Case < 16.0:
MsgBox "やせすぎです"
Case 16.0 to 16.99:
MsgBox "やせています"
Case 17.0 to 18.49:
MsgBox "やせぎみです"
Case 18.5 to 24.99:
MsgBox "ふつう体型です"
Case 25.0 to 29.99:
MsgBox "太りぎみです"
Case 30.0 to 34.99:
MsgBox "肥満度1です"
Case 35.0 to 39.99:
MsgBox "肥満度2です"
Case > 40.0:
MsgBox "肥満度3以上です"
Case Else:
MsgBox "不明です"
End Select
End Sub
'BMIを計算する函数
Private Function funBmi(height As Single, weight As Single)
'身長と体重からBMIを計算した値を返す
funBmi = weight / (height/100)^2
End FunctionCase < 16.0:は16.0未満の場合を意味し、Case > 40.0:は40.0より大きい場合を意味している。Case 16.0 to 16.99:は値が16.0から16.99の範囲にある場合を意味している。
コメント
コメントを投稿