Pythonでエクセル勤怠管理表の日付と曜日を自動入力

今回は「20日締めの勤怠管理表」に日付と曜日の部分を自動入力するプログラムを作成します。給与計算が20日締めの場合、月をまたいでしまうので、手動で入力するのは結構面倒です。

そこで、勤怠管理表のエクセルファイルに、エクセルを起動しないで、Pythonで「先月の21日から今月の20日まで」の日付と曜日を自動で入力します。

今回は日付と曜日を入力するだけですが、応用すれば社員名簿ファイルから社員名や社員番号を読み込み、当月の1000人分の勤怠管理表を瞬間作成することも可能です。なお、ここではWindows環境で説明します。

この記事の目次

プログラムの動作

まず作成するプログラムの動作を確認します。このプログラムを実行すると、最初に以下のように対象とする「年月」を入力する画面が表示されます。

action 00

次に、日付と曜日を入力する勤怠表の「年月」を入力して、Enterを押します。

action 01

すると、以下のように勤怠表に「年、月」と「月、日、曜日」が入力されます。

action 02

準備(Pythonとライブラリのインストール)

1. Pythonのインストール

以下の記事を参考にWindowsにPythonをインストールしてください。

Pythonのコードを実行するには、パソコンにPythonをインストールする必要がありますが、ご安心ください。Pythonのインストールは非常に簡単です。 Python公式のインストーラーがある…

2. ライブラリのインストール

エクセルファイルを読み書きするには、専用のライブラリをインストールする必要があります。今回はオープンソースのOpenPyXL を利用します。

まず、コマンドプロンプト(黒い背景の画面)を開きます。「Windowsキー()+ r 」を入力すると、以下のような画面が表示されるので、「cmd」 と入力して OK をクリックするとコマンドプロンプトが開きます。

open cmd

コマンドプロンプトにpy -m pip install openpyxl と入力して、Enterを押すと、以下のようにopenpyxl のインストールが開始します。”Successfully installed ~”と表示されたらインストール成功です。

openpyxl install

pipは、Pythonのパッケージを管理するためのツールです。pipを使うことで、上記のように簡単にライブラリをインストールできます。詳しくは以下の記事を参照してください。

Pythonには豊富な標準ライブラリが備わっています。システム、ファイルIO、関数、データベース、ウェブ等、非常に多彩です。Pythonが「バッテリー同梱(batteries included)」と呼…

プログラミング

1. メニューからPythonのIDLEを開きます。

python idle select from menu

2. エディタを開いて、コードを貼り付ける

IDLEツールバーのメニューから File ▶ New File を選択してエディタを開いてください。

idle new editor

そこに、以下のプログラムコードをコピーして貼り付けてください。

import datetime
import openpyxl

YOUBI = ("月", "火", "水", "木", "金", "土", "日")

input_date = input("作成する年月度を入力してください(例:201608):")

# 当月の初日
month_current = datetime.datetime.strptime(input_date + "01", "%Y%m%d")
# 前月の末日
month_last = month_current - datetime.timedelta(days=1)

# 勤怠管理の開始日と終了日(20日締め)
date_start = month_last.replace(day=21)
date_end = month_current.replace(day=20)

# エクセルブックファイル(ひな形)
file_template = "勤怠管理表.xlsx"
wb = openpyxl.load_workbook(file_template)

# エクセルシート
ws = wb["Sheet1"]

# 年月度の入力
ws.cell(row=1, column=1).value = month_current.year
ws.cell(row=1, column=3).value = month_current.month

# 月日曜日の入力
for row_num in range(13, 44):
    if date_start <= date_end:
        # 月
        ws.cell(row=row_num, column=1).value = date_start.month
        # 日
        ws.cell(row=row_num, column=2).value = date_start.day
        # 曜日
        ws.cell(row=row_num, column=3).value = YOUBI[date_start.weekday()]
    date_start += datetime.timedelta(days=1)

# 新規ブックファイル保存
file_new = month_current.strftime('%Y%m') + '_' + file_template
wb.save(file_new)

IDLEの新しいウィンドウに貼り付けたイメージは以下のようになります。

idle edit

3. コードの保存

IDLEのツールバーのメニューから File ▶ Save を選択して、time_sheet_date.pyという名前で、適当なフォルダに保存します。

サンプルファイル(勤怠管理表のひな形)

ひな形の勤怠管理表のエクセルファイルを、以下からダウンロードして解凍したらプログラムと同じフォルダにコピーします

勤怠管理表のひな形(kintai.zip)のダウンロード

ファイルの中身(勤怠管理表.xlsx)は、以下のようなエクセルファイルなっています。

kintai sheet template

プログラムから読み込むエクセルファイルには、セルの結合を使用しないでください。セルの位置をうまく認識できない場合があります。今回のひな形のファイルもセルの結合は使用していません。

プログラムの実行

WindowsにPythonをインストールすると、拡張子がpyのPythonファイルはダブルクリックで実行できますので、time_sheet_date.pyダブルクリックしてください。

以下のようにコマンドプロンプトが開くので、勤怠管理表を作成したい年月度を入力しEnterキーを押します。

kintai cmd input

すると以下のような先頭に年月がついたエクセルファイル(この例では、201703_勤怠管理表.xlsx)が出来上がります。日付と曜日が正しく入力されているのが確認できます。

kintai cmd input

その他の実行方法

以下のようにIDLEのツールバーのメニューから Run ▶ Run Module を選択してもプログラムを実行できます。

python idle select from menu

カスタマイズ例

今回のコードをベースに以下のようなカスタマイズが考えられます。

  • 例1:月末締めにする。
  • 例2:要出勤日数をコマンドプロンプトで指定できるようにする。
  • 例3:社員名簿ファイルを読み取り、社員分の勤怠管理表ファイルを作成する。
  • 例4:会社の休業日ファイル(祝日を含む)を作成し、土日以外の休日にも対応させる。
  • 例5:曜日の色を、土曜日は青、日曜日と祝日は赤にする。