勤務表の抽出

AIシフト表・勤務表をExcelに変換

勤務表はグリッドです。行に従業員名、列に日付、セルにシフト種別が入っています。管理者ごとに形式は異なりますが、基本構造は同じです。このツールはグリッドを読み取り、各交差点を解読し、勤務表1ページあたり5〜10秒で従業員ごと・日ごとに1行ずつ出力します。

暗号化処理・変換後のデータは自動削除

PDF・スキャン
ホワイトボードの写真
スクリーンショット

勤務表から抽出できるもの

必要な列を定義するだけで、AIが勤務表グリッドから従業員名、日付、シフト種別をすべて読み取り、従業員×日付マトリックス内の位置に基づいて各セルを解読します。

従業員名
従業員ID
シフト日
シフト開始時間
シフト終了時間
シフト種別
部署/ユニット
総シフト時間

このツールはカスタム列抽出を使用します。抽出したい列名を入力すると、AIが固定テンプレートに照合するのではなく、グリッド内の各フィールドの意味を理解して該当する値を特定します。「M/A/N」コードも「D/E/N」コードも、AIが正確な文字ではなくシフトの文脈を読み取るため、同じ列で取得できます。「合計時間(終了時間-開始時間)」のような計算列を定義すれば、抽出中にシフト時間を計算することもできます。

勤務表はリストではなくグリッド——だからこそ従来のOCRではうまくいかない

タイムシートはリストです。勤務表はマトリックスであり、値は従業員と日付の交差点に存在します。しかしOCRは左から右へ読み取るため、上から列へとは読み取りません。Redditユーザーが スケジュールの抽出に苦戦しながら、まさにこの問題を指摘しています。「各シフトを正しい曜日にマッピングできなかった」と。

01

行単位のOCRではグリッドを解析できません。 30人分の看護師勤務表には、従業員名の列と31日分の日付の列があります。OCRは「Smith, J」の後に「M / A / N / OFF」をフラットなテキストとして取得しますが、「3月5日」のセルがその日付に割り当てられた早番であるという概念を持ちません。

02

同じシフトでも見た目が異なります。 「M/E/N」「D/S/N」。緑のセル=日勤、青=夜勤。「6-2 / 2-10」は時間帯です。従来のOCRは、「M」も緑のセルも「6-2」もすべて最初のシフトを指していることを認識しません。

03

ソースごとに見た目が違い、テンプレートでは対応しきれません。 印刷されたExcel、ホワイトボードの写真、WhatsAppのスクリーンショット。テンプレートベースのツールはフォーマットごとに解析ルールが必要で、レイアウトが数ピクセルずれるだけで機能しなくなります。

01

グリッド全体を読み取ります — 行ヘッダー、列ヘッダー、すべてのセルの交差点。 AIが、どの列が従業員名で、どの行が日付かを識別します。各座標を処理し、従業員ごと・日付ごとに1行を出力します — 例えば「Smith, J、3月5日:早番」のように、フラットなテキストダンプではありません。

02

シフト種別を意味的に解読します。 「M」、緑色のブロック、「6-2」は、それぞれ文脈から解釈され、同じラベルにマッピングされます。「早番 / 遅番 / 夜勤 / 休み」を定義すれば、AIは形式ごとのマッピングなしにすべてのセルを分類します。

03

すべての形式で共通の列定義。 きれいなExcel PDF、ホワイトボードの写真、WhatsAppのスクリーンショットでも同じ列を使用します。これらをまとめてアップロードすれば、AIがそれぞれを独立して処理し、1つの結合されたスプレッドシートを出力します。

混在フォーマットの勤務表から、従業員×日のスプレッドシートへ、たった3ステップ

アップロード — どんな形式でもそのまま

病院のシフト管理システムから出力されたExcel(31日グリッド、看護師40名、M/E/Nコード)。倉庫のホワイトボードを現場リーダーが撮影した写真。飲食店の店長が手書きで作成し、「6-2/2-10/10-6」と書かれたセルが並ぶWhatsAppのスクリーンショット。これらをまとめてアップロード — フォーマットごとに事前に仕分ける必要はありません。

列を定義 — 出力に必要な項目を指定

列名を入力します:従業員名、シフト日、シフト種別(早番/遅番/夜勤/休み)、部署。AIが各グリッドの構造(行ヘッダー、列ヘッダー、セル値)を読み取り、すべての交点を解読します。病院のPDF上の「M」、ホワイトボード写真の緑色のブロック、WhatsAppスクリーンショットの「6-2」は、すべて同じ列の「早番」にマッピングされます。推論列のアプローチがここでは効果的です。「シフト種別」を選択肢付きで定義すれば、AIが各セルを自動的に分類します。

出力 — 従業員×日で1行ずつ

Excelファイルをダウンロード。各行が1人の従業員と1日の組み合わせになります — 看護師40名の3月勤務表から1,240行、さらに倉庫と飲食店のデータも加わります。すべてのシフト種別は統一されています。部署でフィルタしてカバレッジを確認、日付でソートして空白を発見、シフト種別でピボットして人員計画に活用。XLSX、CSV、JSON形式でエクスポート可能です。

最適なケースと、結果の確認が必要なケース

勤務表の抽出は、多くの組織が作成する形式に対して信頼性があります。精度に影響する条件がいくつかあります。

確実に処理できるケース

行と列のラベルが明確な標準的なグリッド形式の勤務表。 Excelの印刷出力やスケジュールのスクリーンショットなど、AIが各セルを従業員名とシフト日の座標にマッピングします。

1つのバッチに混在するシフトコード。 「M/E/N」「D/S/N」、色分けされたセル、「6-2」などもすべて同じシフト種別の列に正規化されます。

列の並び順が異なる複数部署の勤務表。 各グリッドは独立して読み取られます。同じ組織の看護部門の勤務表と厨房部門の勤務表の両方が正しく抽出されます。

確認が必要なケース

映り込みのあるホワイトボードの写真。 立った高さから撮影した写真はグリッドの端が圧縮されます。ホワイトボードを正面から、均一な照明で撮影すると最良の結果が得られます。

ジョブシェアリングのセル(1つのセルに2人の従業員)。 「Smith/Jones」はそのまま抽出されます。後でスプレッドシートで2行に分割してください。

不規則な行スパンの結合。 結合された日付にまたがるラベルは、1つの値と空欄を生成します。出力を確認して、すべての日が埋まっていることを確認してください。

よくある質問

AIは、従業員名が行で日付が列の勤務表グリッドをどのように処理しますか?

グリッド構造を検出します。どの列が従業員名で、どの行が日付で、内部のセルに何の値が入っているかを特定します。そして、すべての座標を走査し、従業員ごと、日付ごとに1行ずつ出力します。勤務表の行ヘッダーに「Smith, J」とあり、「Mar 5」の列に「M」とあれば、出力は従業員名:「Smith, J」、シフト日:「Mar 5」、シフト種別:「早番」となります。グリッドが1週間分の7列でも、1ヶ月分の31列でも、同じロジックです。

色分けされた勤務表(緑=日勤、青=夜勤、グレー=休み)からシフト種別を抽出できますか?

はい、可能です。ビジョンモデルはテキストと一緒に色も読み取ります。緑、青、グレーの各セルを認識し、あなたが定義したシフト種別ラベル(「早番」「夜勤」「休み」など)にマッピングします。これは、デジタルスケジュールのスクリーンショット、蛍光ペンでマークされた印刷勤務表のスキャン、色付きホワイトボードマーカーで書かれた写真などでも機能します。勤務表に色の凡例が印刷されていれば、AIはそれを文脈として読み取ります。

WhatsAppのスクリーンショットや手書きの勤務表の写真でも使えますか?

はい、使えます。WhatsAppのスクリーンショット、ホワイトボードの写真、印刷された勤務表のスキャンなども、すべて同じバッチで同じ列定義を使って処理できます。画質が主な変数です。平らで明るい写真は確実に抽出できますが、斜めから撮影した写真やグレアがある写真は、端のセルで確認が必要な場合があります。チャットアプリで共有された勤務表の場合は、送信者に文書を真上から均一な照明で撮影してもらうようお願いしてください。

抽出時に勤務時間を計算できますか?— 勤務表の開始時刻と終了時刻から合計時間を算出したいです。

はい、可能です。「勤務時間(終了時刻マイナス開始時刻)」のような計算列を定義すれば、AIが抽出時に時間を計算します。勤務表が「6-2」(午前6時から午後2時)のような時間範囲を使用している場合、AIがその範囲を読み取り、8時間と計算して出力します。時間なしでシフトコードのみを使用する勤務表の場合は、「標準シフト時間(選択肢:8/10/12)」のような推論列を定義すれば、AIがシフト種別ごとに期待される時間を割り当てます。

1日のセル内で分割シフトやオンコールステータスはどのように処理されますか?

「M/E」(早番と遅番)のような内容を含むセルは、そのまま抽出されます。その後、スプレッドシート上で2行に分割することも可能です。組織で分割シフトを頻繁に使用する場合は、プライマリシフトとセカンダリシフト用に別々の列を定義すれば、AIがセル内での表示方法に基づいてそれらを分離しようと試みます。括弧内や別の列に記載されたオンコールステータスは、個別の値として取得されます。

📮 contact email: [email protected]