手書きの日報や点検表は、写真を生成AIに渡し、列を指定して読み取らせると、エクセルへ転記するための表を作れます。ただし、返ってきた行だけを確かめても、丸ごと読み飛ばした行は見つかりません。原本から「あるはずの行」を先に用意し、読み取り結果と照合します。
例えば、紙の1行目に8時間、2行目は空白、3行目に7時間と書かれているなら、必要な出力は1番と3番の2行です。最後の番号は3でも、記入件数は2件。番号を1・2へ詰め直したり、3件あるはずだと数えたりせず、2番を「空白確認済み」と記録すれば、空白と読み飛ばしを区別できます。
この記事では、日報と点検表の指示文、原本へ戻れるIDの付け方、エクセルで抜け・重複・数字の不整合を拾う式を示します。帳票と数値は説明用の架空例です。配布するExcel見本の数式は、LibreOfficeの互換計算環境で、正常例と欠落・重複・単位違い・基準の空欄を含む架空データを使って再計算を確認しました。Microsoft Excel本体での動作、ChatGPT・Geminiの画面での指示文の実行、人が書いた手書きの認識精度は未検証です。
この記事で分かること
- 読み取る前に、原本を見て「あるはずの行」の期待台帳を作ります
- 受け取った表は「原出力」に値で残し、訂正は作業用の「出力」だけで行います
- 期待側と出力側の両方から照合し、欠落と重複を見つけます
生成AIで読み取る方法が
向く紙、別の方法がよい紙
同じ書式の日報を少量ずつ処理し、原本を確認する担当者がいるなら、生成AIで表にしてエクセルで照合する方法を試せます。書式が毎回違い、入力欄も少ない紙は、指示や照合表を準備するより手入力の方が早いことがあります。
| 方法 | 選ぶ場面 | 残る作業 |
| 手入力 | 少量で書式がばらばら | 原本との照合 |
| 生成AI+エクセル | 同じ書式で、列を指定して試したい | 写真の準備、貼り付け、欠落・値の照合 |
| 読取位置を設定するOCR | 氏名欄など、固定位置の欄を繰り返し読みたい | 読取枠の設定、結果の修正 |
| 専用AI-OCR・連携システム | 毎日まとまった量があり、確認や登録も一元化したい | 帳票設定、確認担当、例外の差し戻し |
ユーザーローカルの無料手書きOCRは、読み取る位置を設定し、結果をExcelやCSVで受け取る方式です。同社のQ&Aは、1つの枠に複数行を入れると精度が大きく落ちると説明しています。行の多い紙なら、1枠に表全体を入れず、必要な欄ごとに設定する手間も比較します。
Excelにも「画像からのデータ」がありますが、Microsoftが掲載する対応文字セットには日本語が含まれていません。日本語の日報に使える前提では選ばず、日本語対応のOCRか生成AIから表を受け取ります。Microsoftの機能説明
文字をマウスで選べるPDFは、文字データを取り出せる可能性があるため、先にOCRなしの取込を検討します。FAX注文書の品番・数量を販売管理へつなぎたい場合は、FAX注文書の入力を自動化する方法も参照してください。

数式入りの見本で、
空白行と欠落を試す
日報の照合見本をダウンロード/点検表の照合見本をダウンロード
数式を一から入力する必要はありません。見本には50行分の照合式と正常な架空データを入れています。日報は「1番8時間・2番空白・3番7時間」、点検表は「圧力0.70 MPa・温度25℃」です。まずコピーを保存し、点検表の「出力」A3:I3の値だけを消して、期待台帳に「欠落」が出ることを確かめてください。台帳や式まで一緒に消さないのがポイントです。
黄色のセルが入力欄、グレーのセルが数式です。使う紙を替えるときは、次の入力だけを入れ替えます。
| シート | 編集するところ |
| 期待 | 原本を見てID・原本の位置・必須/空白確認済みを入力 |
| 出力 | AIから受け取った値を日報A~J列、点検A~I列に貼り付け。日報のS2には紙の合計を入力 |
| 名簿・現場(日報) | A列の比較元を会社の正式な表記に変更 |
| 基準・凡例(点検) | IDに対応する設備・項目・測定の要否・上下限・単位、許可する印を変更 |
| 原出力 | 修正前の受け取った表を、値のまま保存 |
例の氏名・設備・基準は実務用ではありません。実際に使う前に、入力範囲の架空データを消して貴社のものへ入れ替えます。数式の列は残してください。以下では、この見本を使って撮影から原本照合までを進めます。日報だけを使う方は日報の照合、点検表だけの方は点検表の照合へ進めます。撮影・期待台帳・ID照合は共通です。
初回は名簿・現場、または設備ごとの基準・凡例を整えます。次の紙では保存済みの見本をコピーし、帳票IDと期待台帳、読み取り結果、原出力を更新します。同じ設備・同じ項目で基準が変わっていなければ、基準値を毎回打ち直す必要はありません。ただし「基準」シートのIDは、その紙の期待IDに合わせて更新し、設備・項目との対応も確認します。
写真を送る前に、原本と
「あるはずの行」を用意する
写真は合計欄と行番号まで残す
帳票1枚を真上から撮り、四隅、日付、行番号、最下段の合計を入れます。影や反射で文字が消える場合は撮り直します。文字が小さく上下に分ける場合も、ページと行番号が分かるように保存し、重なって撮った行を二重に取り込まないようにします。
写真名は D20261003-01.jpg のように帳票IDとそろえます。複数ページなら帳票IDにページ番号も含め、別の紙に同じIDを使いません。写真を加工しても元画像は残します。
撮り方の見本です。この帳票には行番号の欄がありません。番号のない紙は、控えの画像へ行番号を付けて保存します。
空白を消す前に、
期待IDの台帳を作る
見本の「期待」シートへ、人が原本を見てA~C列を入れます。ここでいう期待IDは、読み取り結果に存在してほしい行を指す番号です。AIの出力をコピーして台帳を作ると、読み飛ばしまで台帳から消えるため、照合の基準になりません。
| A:ID | B:原本の位置 | C:扱い |
| D20261003-01-001 | 1ページ・印刷行1 | 必須 |
| D20261003-01-002 | 1ページ・印刷行2 | 空白確認済み |
| D20261003-01-003 | 1ページ・印刷行3 | 必須 |
IDは帳票IDと原本の行番号を組み合わせます。この例では大文字の半角英字・数字・ハイフンだけを使い、番号の桁数も固定します。紙に番号がなければ、人が控えの画像へ行番号を付け、対応を保存します。AIに出力順で採番させません。
日報では、原本で完全な空白と確認した行だけを「空白確認済み」にします。未読・不鮮明な行は空白扱いにせず「必須」です。点検表では、圧力、温度など実施すべき項目を、結果が空欄でも「必須」にします。空欄は未記入かもしれず、項目そのものを消してはいけないためです。対象外項目がある帳票は、責任者が対象外の理由を別途記録してから台帳を確定します。
このひと手間で、欠けている番号を具体的に探せます。ひな形が固定なら原本の位置は次回も使えますが、帳票ID、記入の有無、点検対象は紙ごとに見直します。
業務の紙を、練習用に
そのまま送らない
最初の練習は、氏名も内容もすべて作った架空の紙を使います。実際の帳票は、会社が利用を認めたサービス・アカウントで、送信してよい範囲が決まってから扱います。個人情報保護委員会は、利用目的に必要な範囲か、提供事業者が機械学習などに利用しないか等の確認を求めています。学習設定の変更だけを、業務帳票の送信許可と考えないでください。生成AIサービスの利用に関する注意喚起
写真から表を作る指示文
見本は帳票1枚・最大50行を扱います。日報用と点検表用は別のブックで、どちらも読み取り先は「出力」シートです。
日報用:時間は
計算させず、紙の値を写す
写真を添付できる、会社で利用を認めた生成AIの画面で使います。帳票IDと行番号の対応は、実際の紙に合わせて差し替えます。
添付した写真は作業日報1枚です。帳票IDは D20261003-01 です。
紙の印刷行番号1は D20261003-01-001、3は D20261003-01-003 のように、元の行番号を3桁にしたIDを使ってください。出力順で番号を振り直さないでください。
次の10列で、1行目を見出し、以降をタブ区切りにしてください。
ID、日付、作業者名、現場、作業内容、開始、終了、休憩分、作業時間、備考
・紙の記入済み1行を表の1行にする。完全な空白行だけ出さない。
・日付は2026/10/03、時刻は8:00の形式。休憩分と作業時間は単位を付けず数字で写す。紙の合計欄は表に入れない。
・氏名、現場、作業内容は紙の表記を残す。読める文字を別の名前へ訂正しない。
・空欄は空欄のまま。読めない文字は推測せず、そのセルを「要確認」とし、備考に列名と理由を書く。
・時刻から作業時間を計算したり、紙の数字を直したりしない。
・欄外の矢印、「同上」、訂正は備考に書く。どの行か決められない場合は、その事実を備考に残す。
・日付が紙の上部にだけある場合は各行へ写す。英数字の全角・半角を理由に原文を捏造しない。
・コードブロック内にタブ区切りの表だけ出す。縦線で区切らない。セル内には改行・タブを入れない。
点検表用:未記入の項目も出す
添付した写真は設備点検表1枚です。帳票IDは I20261003-01 です。
印刷項目番号1は I20261003-01-001、2は I20261003-01-002 としてください。番号を振り直さないでください。
次の9列で、1行目を見出し、以降をタブ区切りにしてください。
ID、点検日、設備名、点検項目、結果、測定値、単位、点検者、備考
・印刷された点検項目1つを1行にする。結果や測定値が未記入でも項目は省かない。
・日付は2026/10/03の形式。上部だけにある点検日・点検者は各行へ写す。
・○、×、レ点、斜線はそれぞれ○、×、レ、/として写す。レ点を○に変えない。不明な印は「要確認」とし、備考に形を書く。
・測定値は紙の数字を写し、単位を別列にする。基準内・異常などの判定はしない。
・設備名・項目名は原表記を残す。読めないセルは推測せず「要確認」。空欄は空欄のままにする。
・コードブロック内にタブ区切りの表だけ出す。セル内には改行・タブを入れない。
レ点の意味は帳票によって異なります。見た目の転記と、良否・実施済みの判定を分けるのが目的です。Geminiの写真添付方法は公式ヘルプに案内されていますが、添付できることと、この指示で正しく読み取れることは別です。
まず架空の1枚で、項目が落ちないか、タブと列が保たれるかを確かめます。表の形が崩れた場合は、そのまま業務の紙へ進まず、列の指定や貼り付け方法を直します。
貼り付けた原値を残し、
照合用の列を足す
表を「出力」のA1へ貼り付けます。ID列は事前に文字列形式にします。コードの先頭の0を失わないためです。1列にまとまった場合は、[区切り位置]で区切り文字をタブだけにします。スペースで区切ると氏名が分かれます。

受け取った表は「原出力」シートにも値で保存し、以後は「出力」を作業用にします。数値の変換や原本による訂正は作業用だけで行い、訂正前後、確認者、日時を備考や修正記録へ残します。ID自体が誤読されていた場合も、元IDを消さず記録してから直します。
日報のF・G列は時刻、H・I列は数値である必要があります。=ISNUMBER(F2) がFALSEなら、別セルで =TIMEVALUE(F2) を試します。H・I列は =VALUE(H2) で変換できます。変換できた結果だけを値として作業用へ戻し、エラーを0で埋めないでください。日付の文字列は =DATEVALUE(B2) で変換できますが、日付の解釈は環境に依存するため、年月日を原本と照らします。TIMEVALUE・VALUE・DATEVALUE
以下の式は見本に入力済みです。仕組みを確認したいときや、別の帳票用に作り直すときに参照してください。作り直す場合は、空いている行も含めて指定範囲へ入れます。最大50行なので2~51行です。名簿・現場・基準・凡例の比較元も、それぞれ50件までです。社員が100人いる場合などは、帳票が50行以内でも比較元の範囲を広げる必要があります。51行を超える入力はこの見本へ継ぎ足さず、関係するすべての参照範囲とコピー範囲を同時に広げます。数式セルを貼り付けで上書きしないよう、入力列と照合列を分けて保護しておくと運用しやすくなります。
日報・点検表に共通:欠落と
重複を両側から探す
「期待」のD列を出現数、E列を照合結果にします。D2・E2を51行目までコピーしてください。
期待!D2
=IF(A2="","",SUMPRODUCT(--(出力!$A$2:$A$51=A2)))
期待!E2
=IF(COUNTA(A2:C2)=0,"",IF(A2="","期待IDなし",IF(SUMPRODUCT(--($A$2:$A$51=A2))<>1,"期待ID重複",IF(B2="","原本位置なし",IF(C2="必須",IF(D2=0,"欠落",IF(D2=1,"OK","出力重複")),IF(C2="空白確認済み",IF(D2=0,"OK","空白行に出力あり"),"扱いを確認"))))))
次に「出力」のK2へ以下を入れ、51行目までコピーします。点検表ではJ列を空けたままにします。
=IF(COUNTA(A2:J2)=0,"",IF(A2="","IDなし",IF(SUMPRODUCT(--($A$2:$A$51=A2))<>1,"出力ID重複",IF(SUMPRODUCT(--(期待!$A$2:$A$51=A2),--(期待!$C$2:$C$51="必須"))<>1,"期待にないID","OK"))))
期待側からは「本来必要なのに出ていない行」、出力側からは「余計な行や重複」を調べます。出力だけを点検する式では、この両方を代用できません。行の順番は問わないため、日報の1番・3番を読み取っても警告は残りません。途中の空白を認めるためにIDを変更する必要もありません。
「出力」のT4には、全体の行照合を入れます。
=IF(AND(COUNTIF(期待!C2:C51,"必須")>0,SUMPRODUCT(--(期待!E2:E51<>""),--(期待!E2:E51<>"OK"))=0,SUMPRODUCT(--(K2:K51<>""),--(K2:K51<>"OK"))=0),"行の照合OK","行を確認")
必須行が0件の紙は「行を確認」となります。空の出力を誤って完了にしないためです。本当に記入のない日報は、担当者が原本を見て「記入なし」と別に記録します。SUMPRODUCTは同じサイズの範囲を組み合わせ、全列参照を避けています。MicrosoftのSUMPRODUCT説明
日報:合計・時間・名簿を
重ねて見る
全角・半角は、比較する
両方の別列でそろえる
「名簿」と「現場」シートのA列へ正式な表記を入れ、B2へ次の式を入れて51行目までコピーします。ここでは、照合用に全角・半角と氏名・現場名に含まれる空白を無視する運用を採用します。空白が識別に必要なコードには流用しません。
=IF(A2="","",ASC(SUBSTITUTE(SUBSTITUTE(A2," ","")," ","")))
「出力」のP2は氏名、Q2は現場の比較用です。こちらも51行目までコピーします。
P2
=IF(C2="","",ASC(SUBSTITUTE(SUBSTITUTE(C2," ","")," ","")))
Q2
=IF(D2="","",ASC(SUBSTITUTE(SUBSTITUTE(D2," ","")," ","")))
ASCは全角英数字だけでなくカタカナも半角へ変えます。SUBSTITUTEは指定した文字を置換します。原値を上書きしないのは、こうした表記の変化を後で確かめるためです。「渡辺」と「渡部」は同じにしません。ASC・SUBSTITUTE
L2~N2へ次の式を入れ、51行目までコピーします。
L2(時間)
=IF(K2="","",IF(OR(F2="",G2="",H2="",I2=""),"必須欄が空欄",IF(NOT(AND(ISNUMBER(F2),ISNUMBER(G2),ISNUMBER(H2),ISNUMBER(I2))),"数値・時刻を確認",IF(OR(F2<0,F2>=1,G2<0,G2>=1,H2<0,I2<0,H2>MOD(G2-F2,1)*1440),"時間の範囲を確認",IF(ABS(MOD(G2-F2,1)*24-H2/60-I2)>0.01,"時間が合わない","OK")))))
M2(氏名)
=IF(K2="","",IF(OR(P2="",P2="要確認"),"氏名を確認",IF(SUMPRODUCT(--(名簿!$B$2:$B$51=P2))=1,"OK","名簿なし・候補重複")))
N2(現場)
=IF(K2="","",IF(OR(Q2="",Q2="要確認"),"現場を確認",IF(SUMPRODUCT(--(現場!$B$2:$B$51=Q2))=1,"OK","現場なし・候補重複")))
正規化後の名簿が2人に一致したらOKにせず、候補重複として止めます。同姓同名がいる運用では、人が割り当てた社員コードで照合する設計に変えます。名簿にいる別人へ読み違えた場合は、この式でも通るため、登録する人の氏名は原本との比較が必要です。
時間の式は、開始・終了を時刻だけで扱い、勤務は24時間未満とする見本です。16:30から翌9:30、休憩60分なら16時間になります。開始と終了が同じ時刻の24時間勤務や、日付をまたいだ日数が不明な勤務には使いません。その場合は開始日時・終了日時を別々に入力し、日数を含めて差を計算します。休憩は0分も数値で入れ、空欄と区別します。
S2へ、人が原本で読んだ合計を入力します。T2へ次の式を入れます。
=IF(T4<>"行の照合OK","行を先に確認",IF(NOT(ISNUMBER(S2)),"紙の合計を入力",IF(COUNT(I2:I51)<>COUNTIF(期待!C2:C51,"必須"),"作業時間を確認",IF(ABS(SUM(I2:I51)-S2)>0.01,"合計が合わない","OK"))))
比べる件数は、最後の行番号ではなく台帳の「必須」の数です。最後にT6へ下の式を入れます。「原本照合へ」は、登録許可ではなく、機械的な照合を終えた合図です。
=IF(AND(T4="行の照合OK",T2="OK",SUMPRODUCT(--(L2:N51<>""),--(L2:N51<>"OK"))=0,COUNTIF(A2:J51,"要確認")=0),"原本照合へ","修正待ち")
空白・重複・読み違いは、
こう区別する
| 架空の入力 | 期待する判定 | 原本で見る場所 |
| 1番8時間、2番は空白確認済み、3番7時間。出力は1・3番、合計15 | 行の照合OK、合計OK | 登録対象の各欄 |
| 上と同じ紙で、出力が1番だけ | 3番が欠落 | 原本の3番 |
| 1番が2行出て、3番がない | 1番が出力重複、3番が欠落 | 1・3番の行対応 |
| 開始8:00、終了16:00、休憩60、作業時間1 | 時間が合わない | 終了時刻と作業時間 |
| 氏名が渡部、名簿には渡辺だけ | 名簿なし・候補重複 | 氏名の文字 |
合計は単独では使いません。7時間を1時間、2時間を8時間と読み違えると、差が打ち消されて合計は一致します。行内の計算を併用すると、時刻が正しく読めている限り、この2行を拾えます。
点検表:項目の存在と、
測定値の判定を分ける
圧力が正常でも、温度の項目が落ちていたら点検表全体の照合は終わりません。共通のID照合を先に入れ、さらに値を確かめます。
「基準」シートに、A:ID、B:設備名、C:項目名、D:測定(要/不要)、E:下限、F:上限、G:単位を登録します。測定不要の項目も1行登録し、数値欄は空けます。基準は設備の管理資料に従い、人が確認します。ここで示す範囲は説明用で、実設備の安全基準ではありません。
| ID | 設備名 | 項目名 | 測定 | 下限 | 上限 | 単位 |
| I20261003-01-001 | 1号機 | 圧力 | 要 | 0.6 | 0.8 | MPa |
| I20261003-01-002 | 1号機 | 温度 | 要 | 20 | 30 | ℃ |
「凡例」シートのA列には許可する印を1行ずつ登録します。○・×・レ・/をすべて許可するとは限りません。紙の凡例で決めます。
式を短く読めるよう、出力のO列で基準の行位置、P列で設定の状態を調べます。以下はすべて2行目から51行目までコピーします。基準表のIDにも、前述の半角大文字・数字・ハイフンの規則を使います。
O2(基準の位置)
=IF(K2="OK",IF(SUMPRODUCT(--(基準!$A$2:$A$51=A2))=1,MATCH(A2,基準!$A$2:$A$51,0),0),0)
P2(設定)
=IF(K2="","",IF(O2=0,"ID・基準を確認",IF(OR(INDEX(基準!$B$2:$B$51,O2)="",INDEX(基準!$C$2:$C$51,O2)=""),"基準名を確認",IF(INDEX(基準!$D$2:$D$51,O2)="不要","不要",IF(INDEX(基準!$D$2:$D$51,O2)<>"要","測定区分を確認",IF(AND(COUNT(INDEX(基準!$E$2:$F$51,O2,0))=2,INDEX(基準!$E$2:$E$51,O2)<=INDEX(基準!$F$2:$F$51,O2),INDEX(基準!$G$2:$G$51,O2)<>""),"要","基準値を確認"))))))
L2(印)
=IF(K2="","",IF(E2="","結果が空欄",IF(E2="要確認","要確認",IF(SUMPRODUCT(--(凡例!$A$2:$A$51=E2))=1,"OK","凡例なし・重複"))))
M2(測定値)
=IF(K2="","",IF(P2="不要",IF(AND(F2="",G2=""),"OK","不要項目に値あり"),IF(P2<>"要",P2,IF(F2="","測定値が空欄",IF(NOT(ISNUMBER(F2)),"測定値を確認",IF(NOT(EXACT(ASC(G2),ASC(INDEX(基準!$G$2:$G$51,O2)))),"単位を確認",IF(OR(F2<INDEX(基準!$E$2:$E$51,O2),F2>INDEX(基準!$F$2:$F$51,O2)),"基準外","OK")))))))
N2(設備・項目名)
=IF(K2="","",IF(O2=0,"ID・基準を確認",IF(AND(ASC(C2)=ASC(INDEX(基準!$B$2:$B$51,O2)),ASC(D2)=ASC(INDEX(基準!$C$2:$C$51,O2))),"OK","設備・項目を確認")))
「1号機」と「1号機」は、N列で両側にASCを使って比べます。単位はASCで全角・半角をそろえた後、EXACTで大文字・小文字も区別します。MPaとmPa、MPaとkPaを取り違えた場合は、数値が範囲内でも「単位を確認」です。単位の換算はしません。EXACTの説明基準の空欄を0と見なさないため、上下限が数値2個かも先に調べています。INDEX・MATCH
点検表のT6は次の式です。日報用のT2・S2は使いません。
=IF(AND(T4="行の照合OK",SUMPRODUCT(--(L2:N51<>""),--(L2:N51<>"OK"))=0,COUNTIF(A2:I51,"要確認")=0),"原本照合へ","修正待ち")
例えば、圧力0.70 MPaと温度25℃が必要な紙で圧力しか出なければ、圧力のM列はOKでも、期待側の温度IDは「欠落」、T6は「修正待ち」です。圧力が2回出て温度がなければ、重複と欠落の両方を拾います。圧力を7.0と読めば「基準外」です。ただし、基準外は誤読と確定した意味ではありません。原本でも7.0なら、実際の異常として現場の手順へ戻します。
最後は原本と
照らしてから登録する
式が確かめるのは、台帳・計算・名簿・基準との整合です。写真の日付、実際の人、作業内容、備考まで正しいとは限りません。T6が「原本照合へ」になったら、登録に使う欄を原本と比べます。警告を消すために台帳や基準を出力へ合わせるのではなく、紙の値と管理資料を基準に直します。

同じ写真を2回読み取らせる方法も補助になります。ただし、行の順が変わるとセル位置での比較はずれます。両方の結果でIDの欠落・重複を解消し、ID順をそろえてから比較します。2回とも同じ誤読をする場合は一致するため、原本照合の代わりにはなりません。
専用AI-OCRへ進むかは、
修正までの時間で決める
次に試すのは、会社として入力を認めた同じ書式の紙10枚です。手入力と生成AIで同じ紙を処理し、撮影、台帳の準備、読取、貼り付け、原本照合、修正までを測ります。読取時間だけで比べると、確認にかかる手間を見落とします。
例えば手入力8分、AI利用6分なら1枚2分の差です。月300枚なら600分、10時間が削減時間の試算になります。これは計算例で、導入実績ではありません。初回の設定時間や月額費用も別に足し、遅くなる帳票は手入力を続けます。
毎日まとまった量がある、確認者が複数いる、勤怠・販売管理への再入力が残るなら、専用AI-OCRや連携を検討します。比較するのは認識率だけでなく、欠落した項目を見つける仕組み、原本と結果を並べて直せる画面、差し戻し、保存先、費用の単位です。登録を自動化する場合も、確認が済んでいないデータを送らない区切りを設けます。
まずは架空の紙1枚で、空白行・欠落・重複・数字の誤りを一つずつ入れ、どこが止まるかを確かめてください。読み取りを始める前に、原本へ戻れるIDと、あるはずの行を用意する。それが、速く転記するだけでなく、抜けを残さず仕事を終えるための土台になります。