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

所定の休憩時間を除いた、 労働時間を簡単に求めたい

 

ユーザー定義関数を使う方法があります

VBA(Visual Basic for Applications)は、Microsoft Office製品(Excel、Word、Accessなど)で使用されるプログラミング言語です。VBAを使用してユーザー定義関数(User-Defined Function、UDF)を作成することで、独自の関数を作成してセルの計算などを簡単にするすることができます。

VBAのユーザー定義関数の基本的な構文は、次のようになります。

Function 関数名(引数1 As データ型, 引数2 As データ型, ...) As 戻り値のデータ型

 ' 関数の本体(処理を記述)

 ' ...

 ' 戻り値の設定

 関数名 = 戻り値

End Function

 

Function: ユーザー定義関数を宣言するキーワードです。

関数名: 作成する関数の名前を指定します。

(引数1 As データ型, 引数2 As データ型, ...): 関数に渡す引数を指定します。引数の数やデータ型を指定し、必要な場合には複数の引数を定義できます。

As 戻り値のデータ型: 関数が返す値のデータ型を指定します。

関数の本体(処理を記述): 関数が行う具体的な処理を記述します。これは関数が呼び出されたときに実行されます。

関数名 = 戻り値: 関数の最後に、計算結果や処理結果を戻り値として設定します。

 

所定の休憩時間を除いた、 労働時間を求めるためのユーザー定義関数は、次のようなコードになります。

なお、このユーザー定義関数では、

労働時間が6時間(休憩時間を含めると6時間45分)以上になる場合には45分を所定の休憩時間とし、

労働時間が8時間(休憩時間を含めて9時間)以上になる場合には、さらに15分を加算して、1時間を所定の休憩時間としています。

 


Function CalculateWorkingHours(出社時刻 As Date, 退社時刻 As Date) As Single

 ' 労働時間の計算

 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

 

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

 CalculateWorkingHours = 労働時間

End Function

 

@関数を利用したいブックに、標準モジュールを挿入します

ユーザー定義関数をブックの標準モジュールに作成すると、他の関数と同様に、一覧から選んで入力できるようになります。

Aユーザー定義関数は、Functionを使って作成します

このVBAのユーザー定義関数は、出社時刻と退社時刻から労働時間を計算するものです。所定の休憩時間を考慮して実際の労働時間を算出します。

Function CalculateWorkingHours(出社時刻 As Date, 退社時刻 As Date) As Single

 ' 労働時間の計算

 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

所定の休憩時間の計算

労働時間が特定の時間を超える場合、所定の休憩時間が追加されます。例えば、労働時間が6時間45分以上の場合、45分の休憩が加算されます。

同様に、9時間以上の場合には15分が加算され、1時間の休憩時間となります。

 

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

休憩時間の差し引き

所定の休憩時間を労働時間から差し引き、実際の労働時間を計算します。

 CalculateWorkingHours = 労働時間

End Function

戻り値の設定

最終的な実際の労働時間を戻り値として、関数の結果を表す CalculateWorkingHours に代入します。

B関数の一覧から、作成したユーザー定義関数を選びます

C出社時刻と、退社時刻の2つを引数として指定します

 

D関数の結果がシリアル値になった場合は、隣接する時刻のセルの書式のみをコピーして、表示形式を整えます

フィルハンドルを右ドラッグすると、左図のようなメニューから「書式のみコピー」を選べます。

Eユーザー定義関数を使った数式は、通常の関数と同じように、コピーして利用できます

   
   
   
   
   
   
   
   
   
   
   
   
 

 

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

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を非表示にしたい
表示形式を「#」にします

 

 

 

 

 

出前館

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