この物語は、入社して一年目の新人社員が上司の指南のもと、業務を自動化していく様を記したものです。物語はフィクションですが、自動化の手法は実際にパソコンやスマートフォンで実践できるものですので、物語と自動化作業の両方を楽しめます。
「今日から社会人だ。頑張ろう。」
僕は、いつもより早起きして、新しいスーツを着た。そして、そのまま緊張した面持ちで電車に乗って出社した。学生の頃と同じ電車に乗ったはずなのに、これまでとは全く違う景色に見えた。毎日見ていたスーツのおじさんが、実は自分の会社の上司だったり、お客さんだったりしたらどうしよう、と意味のないことを考えながら窓の外の景色を見ていた。
会社に着いて一番近くにいた若くて美しい女性に声を掛ける。
「今日からこちらの会社で働くことになっている田中です。よろしくお願いします。」
すると、その女性は、ぱっと目を大きくして、笑顔で僕に言った。
「君が新人の田中君ね。話は聞いているわ。」
そして、値踏みするように僕を上から下まで眺めてから言った。
「これから楽しみね。私は経理部の太田です。これから私の部署で一緒に働くことになるそうだから、よろしくね。」
なんと、『できる美人上司』を絵に描いたような彼女と一緒に働くことができるとは素晴らしい。これからの生活が楽しみになった。
ところが、その後に朝礼があり、僕は社員のみんなの前で紹介されたのだが、その際、社長から急遽、一言話すように言われてしまった。僕は緊張しすぎて、しどろもどろの挨拶しかできず、ずいぶんと株を落とし、ガッカリするのだった。
朝礼の後、美人上司の太田さんが、すぐにやって来てくれて、「気を落とさないで!挨拶、お疲れ様。」と笑顔でフォローしてくれたのが救いだった。その後、太田さんは、僕を経理部門の面々に紹介してくれた。そして、すぐに僕をパソコンの前に座らせて、こう尋ねた。
「ところで、新人くん、君はどのプログラミング言語が使えるの?」
僕は突然の質問にびっくりした。
「え?プログラミング言語?・・・いいえ、プログラミングなんてできません。」
太田さんは、それを聞いて、舌打ちをし、明らかにガッカリした顔をした。
「プログラミングできる人って、人事部に注文出しておいたのに。」
そんなこと、初耳・・・なんだか、申し訳ない気持ちになってきた。しばらくの沈黙の後、太田さんは頭を切り替えたのか、再び笑顔になってこう言った。
「まぁ、いいわ。新人くんにプログラミングを覚えてもらえば良いのだから。」
僕は大いに戸惑いながら「は、はい。」と答えた。そして、太田さんは、急にテンションが上がった感じで僕に尋ねた。
「最初はExcelからやろうか。Excelはやったことある?」
Excelなら、僕も触ったことがあるので、少し元気を取り戻し「はい」と答えた。以前、パズルゲームのスコアを毎日記録して、グラフを出して友達に自慢したこともあるのだ。僕がそれを話そうとするのを遮って、太田さんは、僕に入社して一番最初の任務を言い渡したのだった。
「このパソコンのデスクトップに、Excelファイルがあるから開いてみて。」
僕は言われるままに、Excelファイルをダブルクリックして開く。
太田さんが話を続ける。
「画面の下の方にあるシートの切り替えタブを見てみて。大量のシートがあるでしょう?一つのExcelファイルの中にたくさんのシートが入っていてとても使い辛くなってしまったの。だから、これを一枚ずつばらばらの個別のExcelファイルに分けて欲しいの。」
これは、僕の初仕事に相応しい気がしてきた。ふと、太田さんを見ると、ニヤリと笑っていた。なんだか馬鹿にされている気がした。僕だってパソコンが苦手な訳ではない。ならば、僕の仕事の速さを見せつけてやろう。
僕は少しの間作戦を考えた。何十枚もあるExcelのワークシートをバラバラにして、個別のExcelファイルに分ける。そのためには、シートを一枚ずつ選択して、新規ワークブックにコピーして保存すれば良いのだ。
まず、シートのタブを右クリックし、ポップアップメニューから「移動またはコピー」をクリックする。
次いで、移動先ブック名の項目を「(新しいブック)」として、「コピーを作成する」にチェックをつけて[OK]ボタンを押す。
すると、新規ワークブックにシートの内容がコピーされる。そこで、ファイルに名前を付けて保存すれば、シートを一つのワークブックに保存できるという訳だ。さらに、この作業をシートの枚数だけ繰り返し行うだけだ。僕の華麗なマウス操作を見せつけてやろう。
そう思って、ファイルを一つ、二つ保存したところで、太田さんが口を出してきた。
「あら、そんなにゆっくり作業していたら、日が暮れちゃうね。」
僕はムッとして反論する。
「こう見えても、僕はExcelの操作とマウスを動かすことには定評があるんですよ。あっという間に終わらせて見せますよ。」
それに対して、太田さんは信じられない一言を吐く。
「私なら10分もあれば余裕で終わらせることができるわ。」
なんと、これだけの枚数のシートを10分で分離するとは信じられない。軽く見積もっても、60枚以上のシートがあり、一枚のシートを30秒で処理したとしても、30秒×60枚 = 1800秒(30分)はかかるはずだ。
そう言うと、太田さんは僕が操作していたパソコンを奪い、不思議な組み合わせのキー([Alt] + [F11]キー)を押した。すると、見たこともない画面が現れた。
僕は驚いて叫んだ。
「これはExcelの隠しコマンドか!」
「太田さん、ずるいですよ。これ、何ですか?どうしてこんな隠しコマンド知っているんですか?」
太田さんは、クスリと笑って答えた。
「これは、隠しコマンドではなくて、Excelに標準で付いてくる、Visual Basic for Applications(通称、VBA)のエディタなのよ!」
そして、僕の目の前で、太田さんは、何やら数行のプログラムを書いて実行した。すると、Excelが自動的に操作されて、あっという間に、Excelのシートが個別のワークブックに保存されたのだった。
「すごい」
実際には、10分もかからなかったのではないだろうか。太田さんは、あっという間に作業を終えて言い放った。
「新人くん、見た?これが、プログラミングの威力なの。」
僕は、呆然と立ちすくみ、太田さんの弟子に入門することを心に誓ったのだった。
プログラムの解説
今回、美人上司の太田さんが新人の田中君に見せたのは、Excelに備わっているVBA(Visual Basic for Applications)を使ったプログラミングでした。MicrosoftのOfficeシリーズにはもれなくVBAが備わっており、プログラミングによって自動化することが可能です。
そして、太田さんが作ったプログラムを、実際に実行してみましょう。以下のプログラムが、複数のシートを個別のExcelファイルに分離するものです。
なお、大量のシートの入ったExcelファイルを用意するのが面倒という方は、こちらから今回のサンプルExcelファイルをダウンロードすることができます。
物語にも登場した通りExcelを起動し、[Alt] + [F11]キーを押すと、VBAエディタが起動します。 VBAエディタが開いたら、メニューから[挿入 > 標準モジュール]をクリックします。そして、エディタに以下のプログラムを記述します。
Sub SplitSheet() ' --- (*1)
Set wb = ActiveWorkbook ' --- (*2)
For i = 1 To wb.Sheets.Count
Set sheet = wb.Sheets(i) ' --- (*3)
Set newb = Application.Workbooks.Add ' --- (*4)
fname = wb.Path & "\" & sheet.Name & ".xlsx"
sheet.Copy newb.ActiveSheet ' --- (*5)
newb.SaveAs (fname) ' --- (*6)
newb.Close
Next
End Sub
そして、[F5]キーを押すか、画面上部にある実行ボタンを押すとプログラムが実行されます。わずか11行のプログラムですが、人手でやったら30分は余裕でかかる処理をあっという間に終わらせることができます。
プログラムを見てみましょう。(*1)では、サブルーチンと言って、VBAのひとまとまりの処理を定義します。Sub ... End Subまでがサブルーチンです。(*2)の部分では、現在使用しているワークブックを取得します。そして、For ... Next構文を利用してブック内にあるシートの枚数だけ繰り返し処理を実行します。(*3)ではシートを取り出し、(*4)で新規ワークブック(新規ファイル)を作成します。(*5)では新規ワークブックに(*3)で取り出したシートの内容をコピーします。(*6)ではワークブックを保存します。
VBAはそれほど難しくない上に、手軽に業務を自動化できるので、1990年後半の登場直後から大変重宝されて使われています。事務でExcel/Wordを扱うなら、VBAを知っているだけで業務を大幅に自動化できます。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。