エクセル実践塾 > エクセル実践塾2016

ユーザー定義関数の結果を、 場合に応じて切り替えたい

 

Boolean型の引数を追加して、 その指定の有無でユーザー定義関数の結果を切り替える方法があります

Boolean型の引数は、VBA(Visual Basic for Applications)や他のプログラミング言語で関数やサブルーチンに渡すことができる引数の一つです。Boolean型は真(True)または偽(False)の値を持つ論理型のデータ型で、主に条件やフラグを渡すために使用されます。

関数内での特定の動作を有効化または無効化するためのフラグとしても利用することができます。

たとえば、次のようにBoolean型の引数を追加すれば、このユーザー定義関数では、3つ目の引数TRUEを指定したときには◯.◯時間の形式で、省略したときには時刻形式で結果が返ってくるようになります。


Function CalculateWorkingHours(出社時刻 As Date, 退社時刻 As Date, Optional AsHours As Boolean = False) As Variant

 ' 労働時間の計算

 Dim 労働時間 As Single

 労働時間 = 退社時刻 - 出社時刻

 

 ' 所定の休憩時間の計算

 Dim 休憩時間 As Single

 If 労働時間 >= TimeValue("6:45") Then

  休憩時間 = 休憩時間 + TimeValue("0:45")

 End If

 If 労働時間 >= TimeValue("9:00") Then

  休憩時間 = 休憩時間 + TimeValue("0:15")

 End If

 

 労働時間 = 労働時間 - 休憩時間

 

 ' 労働時間が0の場合は、0ではなく何も表示しない

 If 労働時間 = 0 Then

  CalculateWorkingHours = ""

 Else

  If AsHours Then

   ' ◯.◯時間形式で返す

   CalculateWorkingHours = Format(労働時間 * 24, "0.00")

  Else

   ' 時刻形式で返す

   CalculateWorkingHours = Format(労働時間, "h:mm")

  End If

 End If

End Function

 

@Boolean型の引数を追加した場合は、左図のような条件分岐(If ステートメント)で処理を使い分けることができます

 

Function CalculateWorkingHours(出社時刻 As Date, 退社時刻 As Date, Optional AsHours As Boolean = False) As Variant

出社時刻 と 退社時刻 は必須の引数であり、As Date はそれぞれの変数が日付として扱われることを示しています。

Optional AsHours As Boolean = False はオプションの引数で、AsHours というBoolean型の引数となり、省略された場合は False が自動的に使用されます。

  If AsHours Then

   ' ◯.◯時間形式で返す

   CalculateWorkingHours = Format(労働時間 * 24, "0.00")

  Else

   ' 時刻形式で返す

   CalculateWorkingHours = Format(労働時間, "h:mm")

  End If

ユーザー定義関数 CalculateWorkingHours において、オプション引数 AsHours が True の場合とそれ以外の場合で異なる形式で結果を返すための条件分岐です。

If AsHours Then

AsHours が True の場合の条件分岐を開始します。

CalculateWorkingHours = Format(労働時間 * 24, "0.00")

Format 関数を使用し、24を乗算した労働時間を、◯.◯時間の形式にします。

Else

AsHours が False の場合の条件分岐を開始します。

CalculateWorkingHours = Format(労働時間, "h:mm")

Format 関数を使用し、労働時間を時刻形式にしています。

 

このようにして、オプション引数 AsHours の値に応じて、異なる形式で労働時間が返されるようになります。

A3つ目の引数は、TRUEで指定します

 

B3つ目の引数を指定した場合は、労働時間が◯.◯時間の形式で表示されるようになります

必要に応じて、右寄せにします。

   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

 

●出社時刻と退社時刻から、 所定の休憩時間を除いた労働時間を求めるための、 ユーザー定義関数を作る動画です

Dyson(ダイソン)オンラインストア

関連する他のページ

出退の時刻を簡単に記録したい
簡単なマクロを作れば、 「出社」や「退社」をクリック(タップ)するだけで現在日時を入力できる タイムカードを用意できます

セル範囲を対象とするユーザー定義関数を作りたい
For Each...Next ステートメントを使って、選択範囲に含まれるセルを順番に処理します

オリジナルの関数(ユーザー定義関数)を作りたい
Functionプロシージャとして、Visual Basicで作成できます

マクロを作りたい
「開発」タブを表示しておけば、 そこから「Visual Basic」を実行してマクロを作ることができます

“セキュリティの警告”が表示されるんだけど・・・
マクロを含むブックを開くときには、注意を促すべく、「セキュリティの警告」が表示されます

マクロ有効ファイルって何?
マクロを含むブックは、 マクロ有効ファイル(マクロ有効ブック)として保存しなければ、マクロが失われてしまいます

『セル範囲を検索して、 該当セルの右隣の値を取り出す』ユーザー定義関数を利用して、 文字列全体を置換したい
同じモジュールにあるユーザー定義関数は、 別のユーザー定義関数から利用することができます

セル範囲を検索して、 該当セルの右隣の値を取り出したい
10行程度のユーザー定義関数で可能です

指定色で塗りつぶされているセルの個数を求められる、 ユーザー定義関数を作りたい
ユーザー定義関数は、その処理を拡張できます

指定色で塗りつぶされているセルの個数を求めたい
塗りつぶし色を数値で表すユーザー定義関数を作れば、数式で求めることができます

平日夕方の指定時間帯の労働時間を確認したい
平日と夕方を条件として、 MIN関数で該当時間数を得ます

土日に祝日を加えた労働時間を集計したい
祝日であるか否かは、 COUNTIF関数を使った対象日の検索で確認できます

土日の労働時間を集計したい
WEEKDAY関数を使った配列数式で行えます

シフト時刻より遅れた出社時刻を強調したい
TIME関数で時刻化したシフトを、 出社時刻と比較して、 条件付き書式で強調する方法があります

残業時間を求めたい
労働時間から、 8時間を表す"8:00"を減算します

労働時間を求めたい
退社時刻から出社時刻と休憩時間を減算します

休日の早出時間の計算を無効にしたい
IF関数を使えば、 計算式に空セルが含まれるときなど、 計算結果を別の値に置き換えることができます

残業時間や深夜時間、早出時間を計算したい
MAX関数を使えば、 それが存在するときにだけその時間が表示されるようにできます

所定労働時間を求めたい
MIN関数を使って、 法定労働時間の8時間を最大値とする数式を設定します

勤務時間0を非表示にしたい
休日の勤務時間0は、 表示形式をユーザー定義することで非表示にできます

勤務時間を計算したい
退勤時刻から出勤時刻を減算することで、 勤務時間を求められます

労働時間や残業時間などの集計を行いたい
時間の集計は通常の数式で行えますが、 ○.○時間のようにしたいときには1時間で除算します

出勤していない日の計算は行わないようにしたい
IF関数式への条件の追加は、AND関数などを使って行います

残業があったときにだけ、その時間を表示したい
IF関数を使って、労働時間が8時間を越えるときにだけ、残業時間の計算を行うようにします

計算結果が0になるとき、それが表示されないようにしたい
表示形式で、値が0のときだけ白色で表示されるようにできます

土曜日の日にちを青色で、日曜日の日にちを赤色で表示したい
WEEKDAY関数を使った、条件付き書式を設定します

勤務時間0を非表示にしたい
休日の勤務時間0は、 表示形式をユーザー定義することで非表示にできます

勤務時間を計算したい
退勤時刻から出勤時刻を減算することで、 勤務時間を求められます

深夜時間を求めたい
深夜時間への区切りとなる22時を "22:00"という形で指定して演算し、 24(時間)を乗算して○.○時間で表示します

残業時間を求めたい
勤務時間を○.○時間という形ですでに求めているなら、 そこから8(時間)を引けば、 残業時間を求められます

勤務時間が0になるときには非表示にしたい
「ゼロの表示形式」を#にすると、計算結果が0のときに非表示になります

勤務時間を○.○時間という形で計算したい
時刻同士の演算に24を乗算すれば、○.○時間になります

計算結果の0を無効にしたい
IF関数を使えば、計算結果の0を無効にできます

計算結果の0を非表示にしたい
表示形式を「#」にします

 

 

 

 

 

出前館

アウトドア&フィッシング ナチュラム