どうもーASN48です。
今回はPythonを使ってある課題を解決したので、その方法を書いていきます!
解決したい課題
- バーコードの数字一覧を取得しバーコードを生成
- 生成したバーコードを印刷
- 取得したバーコードの数字一覧と印刷したバーコードで比較
- 比較した結果、順序違い・重複・欠番が無いことを確認
という課題を課せられました。(自分営業なんだよな・・・こんなの現場の仕事じゃ・・・)
こちらも数量が少なければ、1枚ずつ確認していけばいいんですけど15,000件となると膨大な作業になってしまいますからね・・・
「スポンサーリンク」
前提条件
今回の課題解決にあたって下記の環境条件があります。
- バーコードの数字一覧はExcelファイルで取得
- 生成されたバーコードをハンドスキャナーで読み取りExcelで出力可
こちらのハンドスキャナーに関しては、スマホの無料アプリでも対応可能なことを確認しております。
ではさっそくいってみましょう!
プログラムコード
import openpyxl as px
filepath = "バーコード参照.xlsx" #任意のファイル名
wb = px.load_workbook(filename=filepath)
h = 1
ws3 = wb["Sheet3"] #任意のシート名
lastrow = ws3.max_row
for i in range(2, lastrow + 1):
kensu = 0
base = ws3["A" +str(i)].value
if not base is None:
for j in range(2, lastrow + 1):
hikaku = ws3["D" + str(j)].value
if base == hikaku:
kensu += 1
ws3["B" + str(i)].value = kensu
for k in range(2, lastrow + 1):
kensyutu = ws3["B" +str(k)].value
if not kensyutu is None:
if kensyutu == 0:
h += 1
ws3["F" + str(h)].value = ws3["a" + str(k)].value
ws3["G" + str(h)].value = "欠番"
if kensyutu >= 2:
h += 1
ws3["F" + str(h)].value = ws3["a" + str(k)].value
ws3["G" + str(h)].value = "重複"
for l in range(2, lastrow + 1):
syutoku = ws3["D" + str(l)].value
master = ws3["A" + str(l)].value
if master == syutoku:
ws3["E" + str(l)].value = "一致"
if master != syutoku:
ws3["E" + str(l)].value = "順序違い"
wb.save("kekka.xlsx") #結果を出力する任意のファイル名
こちらになります。何度も修正・追加をしたので、あまりキレイなコードではありませんが・・・
こちらの「バーコード参照.xlsx」の内容です。

件数が多すぎるので、テスト用データです。実際には15,000件で実行しております。
マスターデータ→取得したバーコード数字一覧
スキャンしたデータ→スキャナーでバーコードを読み取ったデータ
となっております。
「スポンサーリンク」
実行
実際にプログラムを実行します。
こちら実行結果を「kekka.xlsx」という名前のExcelファイルを生成します。

実行結果は異常なしです!!
次にエラーとなったケースを想定して実行します。
ケース1 1件欠番があった場合

下2桁「14」が欠番となり、順序もそこからずれていることがわかります。ですので 下2桁「14」 を印刷して追加することで解決できます。
ケース2 重複があった場合

下2桁「16」「17」「18」「19」の4つが重複していることがわかります。ですので 下2桁「16」「17」「18」「19」の4つ を破棄することで解決できます。
ケース3 並び順が変わってしまった場合

途中から並び順が変わっていることがわかります。しかし重複や欠番は無いので並び替えをすることで解決できます。
「スポンサーリンク」
このような形でなんとか課題をクリアすることができました!
こちらのプログラムですが、少し内容を変更すればもっと他のことにも対応できるかと思います。
最後まで読んで頂きありがとうございます。
少しでも何かのきっかけとなれば幸いです!
ではアデュー。