勤務表データ抽出

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]