仕事

【社畜招集】大量のExcelファイルを開いて閉じる作業のためだけに招集された話

大量Excel

一応、SIerの会社に勤めてSEなるものをやってました。

過去を振り返ると、定期的にトラブルJOBというものがどこかしらであり、自分が全く関わってプロジェクトでも緊急招集される事があります。

特に管理職は半強制です。

別に、管理職の方が仕事ができるから呼ばれるわけではありません。(必ずしもスキルと比例しないので・・)

労働組合にも入っていなく、いくら残業させても残業代を支払わなくても良いからです。

呼ばれてやる仕事なんて以下のような単純作業です。

  • ドキュメントの体裁や誤字脱字のチェックをする。
  • 移行前サイトと以降後サイトの画面を見比べて差異がないか確かめる。(画面キャプチャを取りつつ)
  • テスト仕様書を元にテストをする。

いきなり知らないプロジェクトに入っても仕様も何もわからないので、まあ妥当ですよね・・

私も”名ばかり管理職”だったので、度々、緊急招集がかかる事がありましたが、ある時のミッションは、単純作業の中でも極め付けの単純作業で、大量のExcelファイルを一つ一つ開いて全シートで「A1」を選択させて保存しなおすというものでした。

Excel納品物の慣習

誰が決めたのか知らないですが、Excelファイルを納品物にする場合、「A1」(一番左上)を選択して、なおかつ一番先頭のシートを選択して保存するという慣習があります。

納品物がそのようになっていないとブチ切れて検収を通してくれないお客さんもいたりします。

個人的にはどうでもいいと思うのですが、文句を言っても仕方がないので、自分で保存して納品するときは、だいたいはそのように(A1選択して保存)してました。

ただ、これが大プロジェクトで100人ぐらいが関わってたりすると・・まあ、みんな言っても守られません。

なので、最後の納品時になって、一生懸命に保存し直したりします。

数行のコードで実現できます。

でも、思いましたよ。

えっと、一応、みんなこういう会社(SIer)にいるからにはプログラムとかできるんでだよね?

こんなの何の例外処理も入れなければ、以下のような数行のVBScriptのソースを書けば終わりじゃん。

Set xlso = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:work")
For Each file In folder.Files
    Set book = xlso.WorkBooks.Open(file.path)
    FOr Each sheet In book.WorkSheets
        sheet.Activate
        sheet.Range("A1").Select
    Next
    book.WorkSheets(1).Activate
    book.save
    book.close
Next
xlso.quit
Set folder = Nothing
Set xlso = Nothing
Set fso = Nothing

MsgBox "end"

上記をコピって「setA1.vbs」とかのファイル名で保存してダブルクリックするだけです。(Excelファイルがあるフォルダ”C:¥work”は変更する必要があります。)

※なお、例外処理が全く入ってないので、そのまま使う場合は開いているファイルがない事、Excelファイル以外がフォルダの下にない事を確認してください。

提案しても却下

この時も「いや・・スクリプト組みましょうか?」と言ったら、

PM
PM
確実にやりたいし、そんな時間はない!それに、そのプログラムがバグってたらどうするんだ!

というわけわからん事を言われたので(人手とどっちが確実やねん・・)、手でやりました・・・

確かに上のソースだけだと例外処理入ってないので、誰かがファイルを開いてたり、何かエラーになったら面倒臭いことになります。

ただその処理を入れても、しかもVBあまり詳しくない自分でも、1時間くらいあれば作れるんじゃないの?

数100のファイルを手分けしてやるよりもトータルで時間かからないと思うんだけど・・

最後に

私の周りでもちょっとできる人は自分用の効率化ツールを作ったりして作業を効率化してたりしてましたが、案外、単純作業の人海戦術が好きな人が多かった気がします。

まあ、こういう会社でもプログラム全くできない人とかいて(直接部門でも)、そこは論外なのですが、作る能力があるのに作る発想に至らない人が多いのではないかと思います。

ちょっとプログラムを作ればかなり作業が効率化できるので、単純作業に取り掛かる前に、一度立ち止まってプログラムで実現できないかを考えた方がいいと思います。