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 Function
If 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 Function
Case < 16.0:
は16.0未満の場合を意味し、Case > 40.0:
は40.0より大きい場合を意味している。Case 16.0 to 16.99:
は値が16.0から16.99の範囲にある場合を意味している。
コメント
コメントを投稿