エクセルVBAで時給計算表を作成。全工程と初回の初期設定項目入力シート

vbajikyukeisaneyecatch001

エクセルVBAで時給計算表を作ります。

時給計算は、手計算ではかなり面倒な作業です。エクセルでも普通に計算するには厄介なところがあります。

この厄介をこれから解決していきます。最初に初期設定項目からです。

 

これからのテーマとして、時給計算表をエクセルVBAで作成していきます。

まず最初にこの記事では、完成までの全工程の紹介と初期設定項目をセットできるシートを作成します。

こんにちは、じゅんぱ店長(@junpa33)です。

 

時間の計算は「けっこう苦手!」という人も多いのではないでしょうか。時給を扱うので大変です。

エクセルで時間計算を行うのも、チョッとしたテクニックを知っていないといけません。

そこで今回は、時間計算の最たる「勤務時間表」から時給を乗じた毎月の「時給計算表」を作成したいと思います。

 

時給計算に関連する記事の一覧

「時給計算」の記事一覧を開く

 

無料ソフトダウンロード
この時給計算表エクセルソフトの無料のダウンロードは、

無料DL!時給計算表エクセルソフト 個人別ブックで管理出来ます。

の記事で行うことが出来ます。

 

エクセルVBAで時給計算表を作成ー全工程の紹介ー

 

ここで作成する完成形の多機能時給計算表はこのようになります。

vbajikyuhyoupho020

グレイのセルに基本項目データを入力します。

 

vbajikyuhyoupho021

実労時間、支給金額を計算後計算シート保存すると、会計月別に別シートを作成して保存していきます。

(時給計算表は会計月毎に作成してください。)

 

このテーマで作る時給計算表の全工程

 

  1. 「初期設定項目」シートで環境基本条件をセットします。
  2. 支払い対象者一人毎に時給計算表Bookを複製します。(この「時給計算表.xlsm」はテンプレートBookになります。)
  3. 個人別に複製作成したBookでテンプレートシートを作成
  4. 日々勤務時間情報を入力
  5. 何かの基準期間の区切りで時間計算、給与計算、マルメ計算をします。
  6. 翌月に、前月の勤務時間計算表を「計算シートの保存」として、「月」シートとして作成保存します。
  7. シートをプリントアウトしたいときは、「シートリスト作成」をしてプルダウンメニューでシートを選択
  8. 「シート印刷」でプレビュー確認して印刷することが出来ます。
  9. 翌月「月」シートが増えた時は、一旦「シートリストクリア」からの同じ流れの作業で印刷出来ます。

 

はじめに初期設定項目を入力するシートを作る

 

エクセルの初期設定をします

 

Microsoft Excel でVBAをすでに使っている方はスルーでOKです。

先ず、領収書作成の「エクセルの初期設定 準備作業をします」の記事で事前準備をしてください。

こちらのエクセルVBA 始めての起動。VBEの立ち上げ、保存と終了の記事も参考に準備します。

 

シート名の変更をします

 

シートタブをダブルクリックして「初期設定項目」と「sheet1」に変更してください。

シートを削除したいときは、シートタブ上で右クリックのメニューで「削除」を選択です。

 

Book名を変更します

 

「ファイル」タブ→「名前を付けて保存」をクリックしてください。

保存場所は適宜分かり易い場所へ、

保存名は「時給計算表.xlsm」としてください。

必ずマクロ有効保存で保存します。

 

シートのデザインをします

 

「初期設定項目」シートのデザインをこのようにします。

項目入力セルの位置は変更できませんが、デザインはそれぞれでOKです。

vbajikyuhyoupho022

行と列のサイズ

このデザインの行列サイズは、

A列、I列・・・・・・・72ピクセル

B列、C列・・・・・・・160ピクセル

D列、E列、F列、G列・・80ピクセル

H列・・・・・・・・・・124ピクセル

1~13行・・・・・・・・36ピクセル

 

データ入力セル

データ入力セルは、

会計期間・・・D5、F5セル

対象者・・・・C6セル   役職・・・F6セル

基本給・・・・C7セル   時間外割増・・・F7

合計時間マルメ・・・C8

合計金額マルメ・・・C9

 

コマンドボタンの設置

コマンドボタンとコンボボックスを設置します。

コマンドボタンの設置はこちらの記事を参考にしてください。今回設置するのは「ActiveX」の方です。

エクセルVBA コマンドボタンをシートに設置する2つの方法

 

各ボタンのプロパティはこのようにセットしてください。

ボタン名 オブジェクト キャプション
計算表初期化 計算表初期化 計算表初期化
対象者計算book作成 対象者計算book作成 対象者計算book作成
テンプレート作成 テンプレート作成 テンプレート作成
勤務時間計算 勤務時間計算 勤務時間計算
給与計算 給与計算 給与計算
時間・金額マルメ マルメ 時間・金額マルメ
計算シートの保存 計算シートの保存 計算シートの保存
Bookを保存して終了 Book保存 Bookを保存して終了
シートリスト作成 シートリスト作成 シートリスト作成
シート印刷 シート印刷 シート印刷
シートリストクリア シートリストクリア シートリストクリア

 

VBAコードを作る(設定値を変数に代入)

 

「初期設定項目」シートで入力した設定値を変数に代入するコードなどを作成していきます。

記述する場所は、VBEで「Module1」に記述してください。

宣言セクションで宣言する変数

先ず、このプロジェクト(時給計算表ソフト)で共通で利用する変数を宣言セクションで宣言します。

宣言セクション

「Public」は全モジュールで有効、「Dim」はこのモジュールで有効になります。

参考記事として

変数の宣言方法で適用範囲をコントロールするVBA記述

をご覧ください。

宣言セクションコード
Option Explicit

Public EmpName As String, 年月日 As String
Public OriBName As String
Public TCos, TwCos, TMal, KMal
Public SD As Date, ED As Date
Dim SaName As String, SaNamea As String

 

 

設定値を変数に代入する

設定値を変数に代入するVBAコードを作成します。

設定値代入

会計期間は、始まりを「SD」終わりを「ED」

対象者名は「EmpName」空欄の場合は強制的に「年月日」を割り当てます。

基本給は「TCos」、時間外割増は「TwCos」

時間マルメは「TMal」、金額マルメは「KMal」を割り当てます。

 

MEMO

Format関数の使い方についてはこの記事を参考にしてください。

Format関数を書式設定のテッパン関数にする!実務での書式と重要5例

 

設定値代入コード
Sub 設定値代入()

Dim MB As Long
Worksheets("初期設定項目").Select

'Format,Year,Month関数を利用します
    年月日 = Format(Date, "yymmdd")

'会計期間をセット
    SD = Worksheets("初期設定項目").Range("D5").Value
    ED = Worksheets("初期設定項目").Range("F5").Value

'対象者名を変数に代入します
    EmpName = Worksheets("初期設定項目").Range("C6").Value
    
    If EmpName = "" Then
        EmpName = 年月日
        Range("C6") = 年月日
    End If

'基本時給をセット
    TCos = Worksheets("初期設定項目").Range("C7").Value

'時間外割増率をセット
    TwCos = Worksheets("初期設定項目").Range("F7").Value / 100

'時間マルメをセット
    TMal = Worksheets("初期設定項目").Range("C8").Value

'金額マルメをセット
    KMal = Worksheets("初期設定項目").Range("C9").Value

End Sub

 

 

計算表初期化ボタンに対応するVBAコード

計算表を初期化するボタンのVBAコードも作成しておきます。

計算表初期化

この初期化ボタンには、2つのプロシージャーを対応させます。

最初に起動させるのが「クリアH」プロシージャーです。

このプロシージャーは、

エクセルVBA シートのクリアーを目的のメソッド別に最速理解

で説明しているコードをほぼそのまま使っています。ただし、シート名が変更されていますので、デフォルトのシート名「Sheet1」にリネームしてからクリアの作業を行います。

 

MEMO

「For Each~Next」の使い方についてはこちらの記事を参考にしてください。

VBA 回数不定のループ処理はDo LoopとFor Each

With~End Withの使い方については、この記事を参考にしてください。

With~End Withの使い方。VBAコードを簡潔に記述する

Callステートメントの使い方についてはこの記事を参考にしてください。

Callステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解

 

クリアHコード
Sub クリアH()

Dim Sh As Worksheet

Call 設定値代入

If Worksheets("初期設定項目").Range("H5") = "" Then
 Worksheets("初期設定項目").Range("C6") = ""
End If

For Each Sh In Worksheets
    If Sh.Name = EmpName & "時給計算表" Then
        Sh.Name = "Sheet1"
        Exit For
    End If
Next

With Worksheets("Sheet1")
    .Cells.Clear
    .DrawingObjects.Delete
    .PageSetup.PrintTitleRows = False
    .PageSetup.PrintArea = False
    .PageSetup.RightHeader = ""
    .PageSetup.CenterFooter = ""
    .Cells.UseStandardHeight = True
    .Cells.UseStandardWidth = True
End With

End Sub

次に起動させるプロシージャーは、「シート削除」になります。

初期化なので、最初のシート数(「初期設定項目」と「Sheet1」)に戻します。

シート削除コード
Sub シート削除()

Dim Sh As Worksheet

For Each Sh In Worksheets
    If Sh.Name <> "初期設定項目" And Sh.Name <> "Sheet1" Then
'削除確認メッセージを出さなくする    
        Application.DisplayAlerts = False
        Sh.Delete
    End If
Next

'削除確認メッセージが出るようにする(元に戻す)
        Application.DisplayAlerts = True

End Sub

 

 

時給計算表の全工程と初期設定項目入力シートのまとめ

 

エクセルVBAで作る時給計算表の全体としての工程は9ステップと少々長くなります。

今回の「初期設定項目」シートは、この計算表全体をコントロールするシートになりますので、

作成されるそれぞれの方が、使いやすいデザインで作っていただくのがいいと思います。

デザイン力の見せどころかもしれません。

 

次回は、対象者別のBookを作るための、VBAコードの作成手順になります。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。