本日、尋常じゃなく眠い中。
1000000行 列はB~Zまで埋った180MBくらいのエクセルデータを触ろうとした(もちろん関数は入っていない※入れたら即処理落ちだろう)。
目的は、各メーカー商品別・型番別の過去修理を、交換部品や症状別で絞り、修理金額をある程度明確化すること、であった。
そのために2018年からの全国修理受付データを引っ張ったらこんなことになったのである。
なんでそれをやろうとしているかと言うと、お客からよく修理目安金額を訊かれるからだ。
もちろんざっくりした目安は案内できるが、型番症状別でもう少し絞り込めたらと思った次第(我輩は、「とりあえず見させて」と言い、訪問して出張費だけでも頂く、というのは避けたいので買替え検討者には可能な限りはっきりとした検討材料を与えたい※ただしマジで見ないとわからんような症状も世の中にはあるし、そもそも客が可能性、推測、憶測、の意味を理解できなかったら話にならん(責任転嫁してくる客もいるのだ)。また、複数部品交換になれば目安も意味がなくなることはあるのでご理解下され)。
ちなみにデータはBIから引っ張っているので重くて当然というか、BI上で弄れよって感じだし今まではそうしてたのだが、BI開くのめんどくせぇ~とか、処理待ちめんどくせぇ~とか、そういうめんどくせぇ~が重なった結果、エクセルに落とすに至ったわけなのだ。
※にしても過去履歴百万件までしか残らないのか、それとも百万件までしか処理できないのか。まあ多分、後者かな。今知ったのでへぇ、と思っている。
xlsx化の処理中に休憩に入り、戻ったら無事ダウンロードのポップアップが出ていたため、とりあえず確認。
重いながらも一応開けたし、フィルタもかけられた。
それをいいことに、調子に乗ってピボットいけたりするんじゃね(^o^)?と試そうとしたところ、リソース不足のメッセージが出て普通に応答無しでフリーズである(メモリ4GBに無理させてしまった)。
なので無理やり閉じ、また開こうとするも全然開けなくなってしまった。
まさかファイル破損!?またダウンロードしなおさんといかんの!?
と一瞬慌てるも、バックグラウンドでプロセスが生きてるだけかもしれんと思い、元々マクロ誤作動時のために大分前に作ってあったプロセス終了用のbatとVBSで無理やり終了させたらどうにかなり、よかったよかった。※どっちか一つで良かっただろうが、念の為両方カチカチ。
というところまでが経緯だ。
そんなわけで、(フリーズさせないに越したことはないが)我輩同様Excelフリーズさせがちな諸君にはきっとあると便利だろう、と思った我輩。非常に単純なものであるが、表題の件をここに載せることにした。
では以下である。
bat
taskkill /im EXCEL.EXE /f
VBS
On Error Resume Next
Set objx = GetObject(, "excel.application")
objx.DisplayAlerts = False
objx.Quit
以上。※もちろんexcel以外にも応用できる。
それぞれの違いを簡単且つ適当に説明するなら、
・bat:ただただ強制終了させている
・VBS:一応順を追って終了させている
である(と個人的に捉えている※違っても責任は取らん)。家電のACコード急に引っこ抜くか、ちゃんと電源落として引っこ抜くか、みたいな違いだろ多分。
にしても、やっぱBIから落としたデータは正直つかえたもんじゃない。最初はこんなもんかと思ってたが開くまでも重いしフィルタかけるときも動作緩慢だし、かといって検索するだけだと量が膨大すぎて逆に時間が無駄。
BIで普通に都度型番別で絞ったあとにExcel処理したほうが断然ストレスフリーだな。そのためのBIだろうが何考えてたんだか。
実用性があるものにするには、商品別でブックを分けたほうがよさそうということまでは考えたが、このデータからは分ける事もままならんので(重すぎて)、またBI上で修正かけないといけない。
気が向いたら、暇だけど後ろに所長がいるから仕事している風しないといけない、というときにでもやろう。また使い物にならん可能性もあるから期待しない程度にだな。※そもそも全国データにしたのがいけんのかもしれない。