月初エクセル集計処理を完全自動化し、100人日掛かっていた作業を一秒で処理した話。【完成版】

Githubに、全コード（Phase1~Phase3）をアップしております。
Github →　https://github.com/Revolution2021/Auto_Calc_program
（尚、pz31.pyの19行目のメールアドレス部分だけを本物に差し替えれば動作します。）

下記に、本プロジェクトの全体像を記載します。

********************
営業情報を元に、顧客別に請求金額を確定した上で（Phase1）、報告書を記載し（Phase２）、その報告書をメール送信する（Phase3）と言う一連の処理を完全自動化するプログラム開発に成功した。
必要なスキルは、主に、Python OpenpyxlとWin32com。


■処理の説明
あなたは、本作業を行う担当者とする。

<Phase1>

1)あなたには、各月の製品ごとの顧客別販売記録が、下記の様な.csvファイルで、営業担当者から送付されてくる。（この例では、９社の購入情報データがあったと仮定）

=====================================
 XXA12345612_monthly_20210601.csv
 XXA34567821_monthly_20210601.csv
 XXB23456734_monthly_20210601.csv
 XXC36754355_monthly_20210601.csv
 XXE56789030_monthly_20210601.csv
 XXF12345622_monthly_20210601.csv
 XXF12345855_monthly_20210601.csv
 XXH34567877_monthly_20210601.csv
 XXX12678910_monthly_20210601.csv
 =====================================
 
 2)
各.csvファイルは下記の様に記載されている。（それぞれのファイルでは、数百行から数千行の販売データが記録されている。尚、この例では、製品AとBの価格は同一とする。） 
![0620a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/019bec25-b235-915a-8f08-904986f9042b.jpeg)

 

3)　
下記の様な集計表を、一瞬で作成したい。（プログラム開発前は、20人日程度は掛かっていた。実際には、.csvファイルの数はもっと多かった為。）
![0620b.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/0ae89b70-d939-242a-8c19-f6bdc2987b7a.jpeg)

 
4)
尚、同じ製品でも、O社に販売する時と、P社に販売する時は価格が異なる。
また、Q社には、何個販売しても、弊品１個当たりの価格は不変であるが（つまり、Volume Discountは効かない。）、R社では、例えば、1000個までは単価500円だが、1001個以上は単価480円となり、5000個以上は単価400円となる様な、変則的な価格が適用される。
（それをLadder Priceとここでは呼ぶ。）

5)
顧客リストとLadder Pirce適用状況、及び顧客別単価は、添付の”client list.xlsx”に記載している。

＜Phase2＞
上記Phase1の3）で作成したエクセルシートを元に、下記の様な報告書を自動作成する。
尚、報告書に記載する顧客は、4)で述べた、Ladder Priceを適用している顧客だけとする。
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
Mr. Tomas、

Hi, This is Jane.

Billing charge to each client of previous month（2021/05）is as below.
 

XXA12345612 : Tokyo co. unit number 28187 x price/unit 400 USD ＝ Total_price 11,274,800 USD 

XXA34567821 : Hong Kong Co. (Contract A) unit number 28187 x price/unit 320 USD ＝ Total_price 9,019,840 USD 

XXB23456734 : Oosaka co. unit number 32511 x price/unit 200 USD ＝ Total_price 6,502,200 USD 

XXE56789030 : Guam Co. unit number 68995 x price/unit 500 USD ＝ Total_price 34,497,500 USD 

Regards
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

＜Phase３＞
上記Phase2で作成した報告書を、メールで自動送信する。
今回は、メーラーはOutlookを使用したが、GmailやYahooメールでも、コードはほぼ同じである事を確認済。

■ プログラム説明 
処理手順Phase1の3)に記載したSummary Sheetを自動作成するプログラム構成 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/fc98ba75-36c7-dccc-08e9-596526524202.png)

処理手順Phase2に記載したメール本文を自動作成するプログラム構成 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/06e28dce-c85d-3537-76a1-37ae54dc27d1.png)

処理手順Phase３に記載したメール（Outlook）を自動送信するプログラム構成 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/83c44cfc-3736-a3fb-c2fc-54dc7bfcea61.png)

 
■　実行ファイル設置例（御参考）
![0620d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/ae692bc8-8fdd-239e-e743-57286b66a8b4.jpeg)

■　実行ファイル記載例

=======================
@rem .csvファイルのあるフォルダに移動
cd C:\Users\user_xxx\Documents\Auto_Calc_program

@rem 存在しているprocess.pyをrun
python process_final.py

@rem 存在しているprocess2.pyをrun
python process_final2.py

python pz31.py 
@REM （for text copy to outlook）

start Outlook	
@REM （Outlook Active)

python pz32.py 
@REM （Click F9 key for sending email）

============================

以上です。