ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

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の範囲にある場合を意味している。

コメント

このブログの人気の投稿

LATEXで数式:指数と順列などで使う添数・添字

10の補数と9の補数と2の補数と1の補数

Visual Studio 2019にはC++のためのフォームデザイナーがない件