見出し画像

【上位版】Excelの怪しい行を、もっと実務向けにPythonで拾う


ExcelやCSVの確認を、毎回ぜんぶ目で見ている
空欄、重複、日付、金額、ステータスの表記ゆれ
一応見ているけれど、正直どこかで見落としそうになる

今回は、以前紹介したLite版から一歩進めて、より実務向けにした「Excelの怪しい行を拾うPythonツール」の話です

Lite版は、まず小さく試すための仕組みでした
今回の上位版は、毎回の確認作業にもう少し使いやすく寄せたものです

まだLite版の記事を読んでいない方は、先にこちらを読んでもらうと流れが分かりやすいです

ただ、今回の記事だけでも読めるように書いています
前回を読んでいなくても、

「Excel確認、そろそろ目視だけでは限界かも」
「毎回同じところを見ている気がする」
「でも、全部自動化するのはちょっと怖い」

と思っている人には、そのまま読んでもらえる内容です

Lite版でやっていたこと

前回のLite版では、ExcelやCSVの入力ミス確認を全部目視で見るのではなく、まずは「怪しい行だけ拾う」形にした

たとえば、

空欄がある行
同じIDが重複している行
日付の形式が変な行
金額が空になっている行
ステータスの文字が揺れている行

こういうものをPythonで拾って、確認用の結果として出す

最初の一歩としては、これだけでもかなり助かる
毎回Excelを開いて、フィルターをかけて、目で追って、心の中で祈る作業は減らせる

ただ、実務で何度も使おうとすると、Lite版だけでは少し物足りない場面も出てくる

「もう少し条件を増やしたい」
「結果を見やすくしたい」
「毎回同じ確認を、できるだけ楽にしたい」
「担当者が変わっても同じ基準で見たい」

そうなってきたときのために、上位版を作りました

実務では「怪しい」の種類が増える

現場のExcel確認は、だいたい最初はシンプルに見える

「空欄を見たいだけです」
「重複がないか確認したいです」
「日付がおかしくないか見たいです」

このくらいなら話は早い

でも、実際に使い始めると、だんだんこうなる

この列は空欄NGだけど、別の列は空欄でもいい
ステータスは「完了」「対応中」「保留」だけ許可したい
金額は0円でもいい場合と、0円だと怪しい場合がある
日付は未来日なら止めたい
商品コードは同じでも、店舗が違えば重複扱いにしたくない

人間なら雰囲気で見ているところでも、機械に任せるなら条件にしないといけない

この「雰囲気で見ていた部分」が、実務ではけっこう重い

そして人間は、疲れる

Excelの列を横にスクロールしながら何十行、何百行と見ていると、途中から脳が静かに業務放棄を始める
人類、表計算に向いているようで、そこまで向いていない

上位版でやりたいこと

今回の上位版は、Lite版よりも「繰り返し使う」前提に寄せたものです

単に怪しい行を拾うだけではなく、

チェック条件を増やしやすくする
複数の確認パターンを扱いやすくする
結果を見やすく整理する
毎回同じ条件で確認できるようにする
最後に人が見やすいレポートに近づける

このあたりを意識しています

Lite版は、まず試すための入口
上位版は、実際の業務で何度も使うための形

ここが大きな違いです

完全自動化というより、確認作業の足場を作るイメージに近い

いきなり全部任せるのではなく、人間が判断する前に、見るべき場所を絞っておく
そのための道具です

データによって、見る場所は変わる

扱うデータによって、Pythonに任せたいチェック内容は変わる

商品データなら、価格の空欄、在庫数のマイナス、カテゴリ未設定、公開ステータスの表記ゆれを見る

顧客リストなら、メールアドレスの形式、電話番号の桁数、氏名の空欄、対応ステータスの揺れが気になる

申込一覧なら、申込日、プラン名、入金状況、対応状況あたりを見ることが多い

売上一覧なら、金額の0円、未来日、請求ステータス、取引先名の空欄などが候補になる

確認したい内容は、データによって違う
だから、毎回コードを書き換えないと使えない形だと、だんだん面倒になる

最初はよくても、運用に乗るほどつらくなる
ツールなのに、使うたびに人間が機嫌を取らないといけない

それはもう道具というより、面倒な同僚です

実務で使うなら、できるだけ「確認条件を変えやすい」方がいい
ここがLite版から一歩進めたいところです

Pythonに任せやすいところ

Pythonが得意なのは、毎回同じルールで見る作業だ

空欄があるか
重複していないか
日付として読めるか
数値として扱えるか
許可されたステータスに入っているか
特定の列に想定外の文字が入っていないか

こういう確認は、かなり機械に寄せやすい

たとえば、毎朝CSVをダウンロードして、商品データをExcelに貼り付ける
そのあと価格の空欄、在庫数のマイナス、カテゴリ未設定を探す

これを人が全部見るのは、地味にしんどい
しかも朝の忙しい時間にやると、確認したつもりで抜ける

Pythonで先に怪しい行だけ出しておけば、人間はその一覧を見るところから始められる
見る量が減るだけで、確認の質はだいぶ変わる

毎回同じ条件で見る
ここも大きい

人間の確認は、その日の忙しさや疲れで少しぶれる
Pythonは疲れない
少なくとも「今日は眠いから重複チェックを見逃しました」とは言わない

その代わり、条件を間違えると毎回きれいに間違える
だからこそ、最初の条件整理が大事になる

でも、最終判断まで任せない

ここは大事なので、少ししつこく書く

この手のツールは、完全自動化を目指しすぎない方がいい

たとえば、金額が0円の行があったとする
それはミスかもしれない
でも、キャンペーン商品なら正しいかもしれない

申込日の未来日も、普通は怪しい
ただ、予約申込ならあり得る

ステータスが「確認済み」ではなく「確認すみ」になっていた
表記ゆれとして直すべきかもしれないし、別部署ではその表記を使っている可能性もある

ここを機械が勝手に直すと、あとで怖い

正直、Excel確認で一番怖いのは「エラーが出たこと」より「間違っているのに通ってしまうこと」だと思う

だから、上位版でも役割はこう分ける

機械は、怪しい行を拾う
機械は、確認しやすく並べる
機械は、毎回同じ条件でチェックする

最後に見るのは人間

ここは残していい
むしろ、残した方が安全な場面は多い

自動化というと、つい「人間の作業をゼロにする」と考えたくなる
でも実務では、人間が見る前の準備を整えるだけでも十分に効く

結果が見づらいと、結局使われない

ツールは動けば終わりではない

ここも現場ではかなり大きい

たとえば、チェック結果として「エラーがあります」とだけ出ても困る

どのファイルの
どのシートの
何行目の
どの列が
何の理由で怪しいのか

そこまで分からないと、結局Excelを開いて探すことになる

それでは、ただの遠回りです
人類はまたExcelの海へ帰っていく
悲しい帰巣本能

実務で使うなら、結果はできるだけ見やすくしたい

何行目か
どの列か
どんなチェックに引っかかったか
元の値は何か
確認すべき理由は何か

このあたりが並んでいるだけで、確認のしやすさは変わる

「エラー一覧」ではなく「確認用レポート」として見る
そのくらいの感覚がちょうどいい

確認する人が、

「あ、この行だけ見ればいいのね」
「この列の値が怪しいのね」
「この理由で止まっているのね」

と分かる形にしておく

ここまでやって、ようやく実務で使いやすくなる

Before
毎朝CSVを開く
必要な列を目で追う
空欄や重複をフィルターで探す
日付や金額をなんとなく確認する
怪しい行を見つけたら、別のExcelにメモする
急いでいる日は、確認したつもりで通してしまう

1回だけならまだいい
でも、毎日やると地味に効いてくる

After
CSVやExcelを読み込む
決めた条件でチェックする
怪しい行だけ確認用レポートに出す
人間はその一覧を見る
必要なら元データを直す
問題なければ次の作業に進む

自動化というより、確認作業の入口を整える感じです

全部を機械に任せるのではなく、人が見る前の下準備を任せる
このくらいが、実務では使いやすい

いきなり大きく作らない方がいい

Excelチェックを自動化したいと言われたとき、最初から大きな業務システムみたいに作るのは、個人的にはあまりおすすめしない

理由は単純で、確認条件はあとから増えるから

最初は空欄だけだったのに、あとから重複も見たい
日付も見たい
金額の上限も見たい
ステータスの表記ゆれも見たい
取引先ごとに条件を変えたい

こうなることは珍しくない

なので、最初から完璧に作ろうとするより、まずはよく見る項目から始める方が安全だと思っています

商品データなら、商品名、価格、在庫、カテゴリ
顧客リストなら、氏名、メール、電話番号、ステータス
申込一覧なら、申込日、プラン、入金状況、対応状況

まずはこのくらいでいい

本番データをいきなり全部通すより、コピーしたExcelやサンプル10件で試す方がいいです
ここを雑にすると、あとで妙な汗をかく

Lite版で足りる人、上位版が向いている人

Lite版で十分な人もいる

確認したい項目が少ない
まずは空欄や重複だけ見たい
一度試してみたい
小さくPythonチェックを体験したい

こういう場合はLite版でいい

逆に、上位版が向いているのはこんな人です

毎回同じExcelやCSVを確認している
チェック条件が複数ある
結果を見やすく残したい
担当者が変わっても同じ条件で確認したい
Lite版よりもう少し実務に寄せたい
大きなシステムまではいらないけれど、毎回の確認は減らしたい

このあたりに当てはまるなら、上位版の方が合いやすい

ただし、これも万能ではない
元データの形が毎回大きく変わる場合や、人間の判断がかなり多い場合は、先に作業整理が必要になる

入力元は何か
どの列を見るのか
何を怪しいと扱うのか
結果はどんな形で見たいのか
最後に誰が判断するのか

ここが曖昧なままだと、ツールだけ作っても使いにくくなる
正直、ここを飛ばす案件はあとで揉めやすい

まず書き出すなら、この3つ

もし手元に、

「これ、毎回人が目で探すしかないのかな」

と思っているExcelやCSVがあるなら、いきなり自動化しようとしなくていいです

まずは、次の3つだけ書き出す

1つ目
どのファイルの、どの列を見ているか

2つ目
どんな状態を「怪しい」と判断しているか
空欄なのか、重複なのか、文字ゆれなのか、日付ミスなのか

3つ目
確認した後、どんな形なら見やすいか
Excelの一覧なのか、CSVなのか、画面表示なのか、ログなのか

この条件整理が、自動化の一番地味で、一番大事なところだと思っています

コードを書く前に、ここを決める
ツールを作る前に、人間が何を見ているのかを言葉にする

地味だけど、ここをやるだけで話はかなり進めやすくなる

「自動化したいです」だけだと、まだ少し広い
でも、

「このCSVの、価格列と在庫列とカテゴリ列を見ています」
「空欄、マイナス値、カテゴリ未設定を怪しい行として出したいです」
「結果は確認用Excelにまとめたいです」

ここまで言えると、かなり具体的になる

この一文があるだけで、ツールの形も見積もりも考えやすくなる

無料部分のまとめ

ExcelやCSVの確認は、全部を目視で頑張る作業ではない

少なくとも、空欄、重複、日付、数値、ステータスのような確認は、Pythonに任せやすい

ただし、最終判断まで全部任せる必要はない

機械には、怪しい行を拾わせる
確認しやすく整理させる
毎回同じ条件でチェックさせる

人間は、最後に判断する

この分け方が、現場ではかなり現実的だと思っています

Lite版は、まず小さく試すための入口
今回の上位版は、もう少し実務で繰り返し使うための形です

Excel確認を属人的な目視作業のままにしておくと、どうしても担当者の慣れや疲れに左右される
そこを少しだけ機械に寄せるだけでも、確認漏れや作業負担は減らしやすい

有料部分に入れているもの

ここから先では、実際に使うための上位版ツール一式と、使い方の流れを載せています

入れている内容は、次のようなものです

添付ファイル一式
サンプルExcel / CSV
チェック条件を整理する設定ファイル
Python実行ファイル
確認用レポートの出力例
サンプルでの試し方
自分のExcel / CSVに近づけるときの考え方
本番データで使う前の注意点

「考え方だけではなく、手元で試せる形がほしい」
「Lite版よりもう少し実務寄りに使いたい」
「毎回のExcel確認を、少しでも同じ条件で見たい」

という方向けです

逆に、読むだけで十分な方や、まだPython環境を触る予定がない方は、無料部分だけでも考え方は持ち帰れると思います

いきなり本番データで使うのではなく、まずはサンプルやコピーしたファイルで試してください
ここを飛ばすと、Excelではなく人間側が壊れます

ここから先は

11,006字 / 1ファイル

¥ 300

Amazon Payで支払うと最大2%還元のチャンス! 9/30まで

「役に立った」「こういう記事を増やしてほしい」と感じていただけたら、応援いただけると嬉しいです。 今後の検証や記事制作の励みになります。