【プログラム】VBAで検収の抜けや値段の記載ミスをチェックするシステムを作りました
以前こんなものを作りました。ホームページビルダーではなくれっきとしたHTMLとCSSでプログラムしたのです。
デザインはお察しレベルですし、コードは無茶苦茶ですが。
(そもそもHTMLとCSSはプログラミング言語ではないと聞いてことがあります)
そしてその後ブログの更新が激減しました。
これは1月の下旬から2月の中旬の3週間ほど僕があてのない旅に出ていたせいでもありますし(いずれブログにまとめたい)、その後1月半くらい毎日毎日ゲームをやり続けていた(ランス10)せいもありますが、基本的にはおプログラムのお勉強をしていたためであります。
僕はかつて製造業の事務屋(購買屋)をやっていたことがあり、作りたいものは業務改善とか販売管理とかそっち系のシステムでした。
ということでそっち方面と微妙に関係が切れていない感じなので色々調べたり相談した結果まずはExcelVBA、そのあとwebシステムの知識を習得することが人生においてプラスになる予感がしたのでお勉強をしていたのです。
旅やらゲームやら色々やっていたのでVBAのお勉強をしたのは1月半くらいですかね。
最終的にはwebシステムをやるとしてもまずはVBAをある程度やりましたという段階にいるわけです。
ですのでせっかくだから何かを作る+それを発表する
(制作物のレベル的に生き恥をさらすともいえる)
これをやってみようと思いました。
新しくプログラミングというカテゴリを創設。ここにいろんなことを書いていきましょうか。
【プログラム】VBAで検収の抜けや値段の記載ミスをチェックするシステムを作りました
存在していた課題。
1.月の初めに取引先から売り上げの一覧表が届く
2.僕が勤めていた会社の売り上げの一覧と見比べる
3.「これ売上げてるはずなのに取引先では売り上げてないことになってるよ?」
4.「取引先の売り上げ金額とうちの金額がずれてるんだけど。何が違うの?」
みたいな問題がありました。
「伝票なくしちゃいました。」とか「やった気になってました。」とか「値段間違えて書いちゃいました」とか平気で起こる大変だらしない界隈だったためとにかく売り上げがズレるズレる。
検収漏れが起こるわけです。
検収(けんしゅう):法律用語解説|システム開発契約(基礎編)(6) - @IT
なので取引先の売り上げと僕がいた会社の注文を1つずつ並び替えて、チェックする作業を自動化するシステムを作りました。
左が僕がいた会社の売り上げの一覧。右が取引先が出してきた売り上げの一覧。
これは最終的に完全に一致しなくてはならない。
まず双方のデータを柱番(注文番号)で昇順で並び替える
下にスクロールすると左には注文番号110585が存在するのに右には存在しない。つまり右に伝票の検収漏れがあると考えられる。
とりあえず右の表を一行空欄にして1つずつ下にズラす。すると次の行は左右とも注文番号124556。つまり検収漏れはない。ここから再び注文のチェックを行う。
再びズレが見つかったので空欄を設けて注文番号を左右で合わせる
注文番号124704。単価を入れ間違えたことで左右で売上金額の違いが発生している。
・・・というのを延々とやっていたのだ。
やってられるか!!!!!!!
当時の僕には技術が無かったけど今はある。ということで作りました。
ドン!!!!
注文番号が左右の表でずれたら下にずらして空欄になったところにはピンクで色を塗る。
その作業がすべて終わったら注文番号ごとに売り上げ金額を比較する。
ずれが生じていたら赤文字で記載。ずれていなければ当然0が入る。
さて双方の売り上げの齟齬が見つかったら次は原因探しだ。
これが自動化できると楽なのだがw
制作秘話
双方の注文番号をチェックして左右に並び替えるというロジックでシステムを作ろうとしたが下にズラす動きと上手くリンクさせられなかった。
なので左右の注文番号を比較して大きい方を下にズラすというロジックを組んだ。
注文番号の並び替えの後に一度Loopを解除して改めてLoopを作って今度は値段のチェックを行っている。
本当は一気にできそうな気がするのだが今の僕には理解できない。
interior.color = vbmagenta(紫色に塗りつぶす)のコードを書いて実行したら劇的に挙動が遅くなった・・・。
もっとスマートに書いて高速化できる気がする。
取引先からデータを貰ってそれをコピーするのだがそれを自動化したかった。
それ自体はfile system objectを使えば可能だったのだがsplitを使って","で区切られた部分をセルに挿入していくと1,000のような値段の数字が出た時に挿入するセルがずれてしまった。
色々聞いたところSCVに出力するときに1,000を1000に修正した状態で出力するのが自然な発想なんだそう。
他にもこんなサイトを参考に出力を自動化することをもくろんだが今の僕には(ry
エクセルVBAでデータにカンマが含まれてしまっているCSVを取り込む
そもそもxlsx形式のファイルをcsvに変換している間にコピー&ペーストが終わるので無駄だと思いとりあえずやめた。
さらなる制作秘話
僕が会社に入った時、彼らは取引先から紙の形式で書類を貰って自分たちのデータと突き合わせて延々とチェックをしていた。
ある日「SRくん。この作業ってこれ以上効率化できないよな?」と言われたので「まず取引先に頼んでデータ形式で書類を貰ってくれ。話はそれからだ。」とやり取りした覚えがある。
あれから何年経過したか「紙で手作業」→「エクセルにより手作業」という工程を経てついにこの作業は自動化に成功したのだった。
ちなみにこのシステム(というかマクロ)は元いた会社には渡さない。
とういうか渡せない。・・・だって俺あの会社でキレられて追い出されちゃったし。
追い出されてなきゃ連絡の1つもいれるんだけどねw
結局
またこの双方の検収漏れを見つけてからの原因探しが大変なんだw
本当にアナログな界隈でどうしようもなかったからw
まあこの界隈にいた頃の話はいずれする・・・かもしれないw
(しないかも。でも結構面白い話かもしれませんw)
説明へたくそだしプログラムもへたくそだけど生き恥をさらしていこう。
SR先生の連載が読めるのは
ニートがベルマーレ好きすぎて会社起こしたけど今後は未定
だけ!!
いまは各仕入先の締日を自動で出力するシステムっていうのを作ってます。
セルに自動で「追記」する方法で苦戦中。持ってるテキストには載ってなかった。
終わり。