この物語は、入瀟しお䞀幎目の新人瀟員が䞊叞の指南のもず、業務を自動化しおいく様を蚘したものです。物語はフィクションですが、自動化の手法は実際にパ゜コンやスマヌトフォンで実践できるものですので、物語ず自動化䜜業の䞡方を楜しめたす。(前回のストヌリヌはこちら)

前回、緊急ミッションをこなした僕に、矎人䞊叞の倪田先茩が、お昌ご飯を奢っおくれるこずになった。もちろん、䞻に仕事をこなしたのは倪田先茩なのだが、䞊叞に奢っおもらえるのは郚䞋の特暩なのかも。䟋えそれが牛䞌屋だったずしおも。

倪田先茩を埅たせないよう、急いで机の䞊を片付けお、オフィスを出るず、そこには、倪田先茩に加えお、同じ経理郚の䜐藀先茩も居た。「うヌむ。さすがに二人きりではなかったか・・・」ず、がっかりし぀぀も䞉人で歩き出した。ちなみに、䜐藀先茩は、すらっず高身長の30才独身男だ。そう蚀えば、倪田先茩ず䜐藀先茩が話しおいるのをよく芋かけるなぁ。

そんな耇雑な思いで先頭を歩いおいた僕は、牛䞌屋に入るべく店の前で立ち止たった。その時、倪田先茩が僕を呌び止めた。

「田䞭君、お昌は牛䞌ではなくおお寿叞になったの。」

「なぜいきなり牛䞌から寿叞に」ず驚いおいる僕に、倪田先茩は笑顔のたた牛䞌屋の数件隣にある寿叞屋に入った。寿叞屋のテヌブル垭にお、く぀ろいでいるず、倪田先茩が僕に質問しおきた。

「田䞭君、プログラミングが圹立぀こずはもう分かったでしょう」

「はい。倪田先茩、先茩からプログラミングの玠晎らしさを教わるこずができお光栄です。」

「田䞭君、倧げさね。それでも、い぀もプログラミングをするのが正しいずいうわけではないの。むしろプログラムを䜜らない方が良い堎合もあるの。」

「えどういうこずですか」

「それは、プログラムを䜜らないで手䜜業でやった方が早い堎合よ。」

「確かに。プログラムを䜜らなくおも良いなら、手䜜業でやるのが普通ですよね。」

そのずき、䜐藀先茩が口を挟んできた。

「しかし人はプログラミングを芚えるず、すべおをプログラミングで片付けたくなる生き物なのだよ。」

確かに、僕は華麗な倪田先茩のプログラミングの腕に心酔し、䞖界のあらゆる出来事をプログラミングで解決できるず思い蟌んでいた。䜐藀先茩が続ける。

「プログラミングは所詮は手段なのであっお目的ではない。そう蚀いたいんですよね、倪田先茩」

䜐藀先茩は、倪田先茩に笑顔を向ける。するず、倪田先茩が続ける。

「そうなの。プログラミングの実力アップのためず思っおいるなら、最初はプログラミングに時間を掛けるこずも悪いこずではないけれど。その仕事をもっずも早く片付ける方法は䜕かを考えるべきよ。」

倪田先茩はさらに続ける。

「プログラムを䜜るよりも手䜜業が早ければ、そうするべきだし、玙に印刷しお赀ペンで曞き蟌んだりハサミで切ったりするのが早いのなら、そうするべきなの。぀たり、䜜業に取りかかる前に、あらゆる可胜性を考えおみお、どの方法で問題を解決するのが最も正確か぀早く仕事を終えるこずができるのか怜蚎する必芁があるずいうこずなの。」

僕はそれを聞いお「うヌん、早く先茩たちのように、できる倧人になりたいなぁ。」ず答えるのが粟䞀杯だった。

そしお、倪田先茩がお手掗いに堎所を倖した時のこず。䜐藀先茩が僕に小声で話しかけおきた。

「おい、田䞭。倪田先茩は、仕事もできるし、気も利くし、勉匷熱心で、料理も䞊手。ずにかく、玠晎らしい人なんだ。しかも、完璧すぎるわけじゃなくお、ちょっず抜けおいるずころもあっお、最高なんだ。俺の蚀っおいる意味が分かるよな」

「えそれっお・・・」僕が驚いおいるず、倪田先茩が垰っおきた。それで、その話は終わったのだが、どうやら䜐藀先茩も倪田先茩に惚れおいるずいうこずで間違いないようだ。

そのずき、矎味しそうなお寿叞プレヌトが運ばれおきた。矎しいお寿叞が机の䞊に四人分䞊んだ。「あれ四人分ですか」僕が䞍思議そうな顔をしおいるずころぞ、寿叞屋にもう䞀人入っおきた。前回緊急ミッションを持っおきた県鏡矎人の笹川さんだ。

どうやら、笹川さんがミッションクリアのお瀌ずしお奢っおくれるこずになり、牛䞌から寿叞にバヌゞョンアップしたようだ。僕らは笹川さんから矎味しいお寿叞をご銳走になり倧満足だった。

さお、その日の午埌。僕に割り圓おられた仕事は、営業郚の成瞟グラフを䜜るこずだった。営業郚では月䞀回の䌚議のたびに、売䞊額の成瞟グラフを出しお成果発衚䌚をするのが通䟋ずなっおいる。契玄の皮類ごずに、誰がいくら契玄を取ったのかずいうグラフだ。

僕はプログラミング初心者であるものの、Excel自䜓の操䜜には習熟しおいる。成瞟グラフの䜜成くらいあっずいう間に片付けるこずができる。でも、これっお、毎月䞀回やる仕事なんだよね。僕はしばし考えおから倪田先茩に近づいお尋ねた。

「倪田先茩、先ほど頌たれた成瞟グラフの䜜成なんですけど、これっおプログラムを䜜るべきですか手䜜業でやった方が断然早く終わるんですけど。」

するず、倪田先茩は逆に質問しおきた。「田䞭君はどう思うの」

僕は先ほど考えた結論を述べる。

「えっず、今回はプログラムを䜜るべきず思いたす。もちろん、件数が倚いずはいえ成瞟グラフを䜜る䜜業自䜓は、それほど倧倉ではありたせん。しかし、この仕事は毎月、発生する仕事です。今回、倚少時間がかかったずしおもプログラムを䜜っおおけば、来月以降、楜ができるず思うのですが、どう思いたすか」

するず、倪田先茩は笑顔で答えた。「田䞭君、よく芋極めるこずができたわね。定期的に発生するこずが分かっおいる仕事であるなら、プログラムを䜜るこずをオススメするわ。プログラムを䜜っおおくこずで、仕事をシステム化できるずいうメリットもあるしね。」

「システム化ですか」僕が䜕のこずだか分からないずいう声を䞊げるず、倪田先茩は優しく解説しおくれた。

「『システム化』ずは、誰がやっおも同じ成果を生み出せる䜓制のこずよ。぀たり、仕事の手順をプログラムにしおおくなら、田䞭君の郚眲が倉わっおこの珟堎を離れたずしおも、別の人が匕き継いで同じ結果を出すこずができるのよ。」

「なるほど。僕が突然死んだずしおも、残された人が困るこずなく仕事を進めるこずができるずいうこずですね。」

「田䞭君、入瀟早々に死んでもらっおは困るわ。でも、そういうこずよ。」ず倪田先茩は優しくフォロヌしおくれた。さらに、倪田先茩が僕に気合いを入れおくれた。

「田䞭君。毎月の成瞟グラフを3秒で出せるようシステム化するのよ」

  • 誰がやっおも同じ成果を3秒で生み出せるシステム・・・

僕はできる気になっお「はい任せおください」ず蚀ったものの、プログラムの䜜り方はぜんぜん分からなかった。

それで「倪田先茩、僕、䜜り方がぜんぜん分からないんです。教えおください。」ず教えを請うず、「残念。私忙しいの。」ず断られおしたった。その代わり、VBA入門の本を貞しおくれた。

ずは蚀え、本を読んでも難しかったので、恋敵である䜐藀先茩の力を借りるこずになったのだが、なんずかプログラムを完成させるこずができた。

  • 契玄䞀芧衚を集蚈しお各皮グラフを出力するプログラムを䜜った

    契玄䞀芧衚を集蚈しお各皮グラフを出力するプログラムを䜜った

「倪田先茩、僕、出来たした」ずプログラムを芋せるず、倪田先茩が満面の笑顔で「よく出来たね。」ず耒めおくれたのが嬉しかった。ただし、䜐藀先茩が「ほずんど俺が教えたんだけどな」ず倪田先茩に告げ口しおいたのが解せなかった。「早く䞀人で䜕でも䜜れるようになりたい」ず匷く思ったのだった。

実際のプログラム

それでは、今回、新人の田䞭君がラむバルの䜐藀先茩ず力を合わせお頑匵っお䜜ったプログラムを玹介したしょう。 なお、今回のサンプルデヌタおよびVBAマクロ入りのデヌタは、こちらからダりンロヌドするこずができたす。

最初に、営業郚の成瞟デヌタですが、以䞋のような圢匏のExcelデヌタになっおいるずしたしょう。

  • 営業成瞟を衚すExcelデヌタ

    営業成瞟を衚すExcelデヌタ

そしお、このデヌタを元に、各契玄の皮別ごずにグラフを䜜成したす。その際、担圓ごずの契玄金額を集蚈しおグラフを䜜成したす。

  • 契玄皮別ごずに契玄金額のグラフを䜜成する

    契玄皮別ごずに契玄金額のグラフを䜜成する

元デヌタには、契玄䞀件ごずの契玄金額が蚘録されおいたす。そのため、グラフを䜜る手順は以䞋のようになりたす。

・1契玄皮類ごずにデヌタを分ける
・2各営業担圓ごずに契玄金額を合蚈する
・3䞊蚘デヌタに察しおグラフを䜜成する

Excelに慣れおいる方であれば、䞊蚘の䞀぀䞀぀の手順を凊理するのは難しくありたせん。しかし、本文で田䞭君が気づいたように、グラフを出力するたでの手順をVBAのマクロにたずめおおけば、Excelに慣れおいない人でも手軜にグラフを䜜成するこずができたすし、面倒な操䜜手順を経おグラフを䜜成する手間が省けたす。

実際にVBAマクロを実行しおみたしょう。

たず、契玄䞀芧デヌタを甚意したす。このずき、デヌタ圢匏は䞊蚘の曞匏にしおおく必芁がありたす。そしお、[Alt] + [F11]キヌを抌しおVBA゚ディタを起動したす。そしお、契玄䞀芧のシヌトを遞択しお、以䞋のプログラムを貌り付けたしょう。

Sub MakeSubGraph(GType)
    ' 集蚈甚の蟞曞 --- (*1)
    Dim dic As Variant
    Set dic = CreateObject("Scripting.Dictionary")
    ' 最終行を埗る --- (*2)
    lastRow = Range("A1").End(xlDown).Row
    ' 繰り返しセルを調べる
    For i = 1 To lastRow
        aname = Cells(i, 1).Value
        atype = Cells(i, 3).Value
        aprice = Cells(i, 4).Value
        If atype = GType Then
            If Not dic.Exists(aname) Then
                dic.Add aname, aprice
            Else
                dic.Item(aname) = CLng(dic.Item(aname)) + CLng(aprice)
            End If
        End If
    Next
    ' 結果を出力 --- (*3)
    Dim sheet As Worksheet
    Set sheet = Worksheets.Add
    sheet.Name = GType
    i = 1
    For Each Key In dic.Keys
        sheet.Cells(i, 1).Value = Key
        sheet.Cells(i, 2).Value = dic.Item(Key)
        i = i + 1
    Next
    ' グラフを䜜成 --- (*4)
    sheet.Shapes.AddChart2(286, xl3DColumnClustered).Select
    ActiveChart.SetSourceData Source:=sheet.Range("A:B")
    ActiveChart.ChartTitle.Text = GType
End Sub

' 契玄の皮類ごずにグラフを䜜成する--- (*5)
Sub MakeGraph()
    MakeSubGraph ("リフォヌム")
    MakeSubGraph ("䞭叀䜏宅")
    MakeSubGraph ("新築䜏宅")
End Sub

そしお、゚ディタ䞊郚の実行ボタンを抌すか、メニュヌから[実行] > [Sub/ナヌザヌフォヌムの実行]をクリックしたす。マクロの遞択ダむアログが衚瀺されたら「Sheet1 > MakeGraph」を遞んで実行したす。

  • マクロを実行したしょう

    マクロを実行したしょう

するず、契玄皮類ごずに新芏シヌトが䜜成され、そこに営業ごずの合蚈契玄金額の衚ずグラフが自動䜜成されたす。

プログラムの簡単な解説

プログラムの(1)では、営業埌ずの契玄金額を集蚈するために、Dictionary型のオブゞェクトを䜜成したす。これは、macOSのExcelでは䜿えないWindowsのVBAならではの技ですが、デヌタの集蚈に䞊に䟿利な機胜でよく䜿われおいたす。このDictionaryずは、連想配列ず呌ばれるもので、キヌず倀をセットにしおデヌタを操䜜できたす。

そしお、(2)の郚分では、契玄䞀芧衚の最終行を調べ、衚の䞀行目からデヌタを確認しおいきたす。セルの1列目(契玄担圓)、3列目(契玄皮類)、4列目(契玄金額)を調べ、契玄担圓ごずに契玄金額を合蚈しおいきたす。

(3)の郚分では新芏シヌトを䜜成し、(2)の郚分で集蚈した契玄金額の衚をセルに曞き蟌んでいたす。最埌に(4)の郚分で、(3)で曞き蟌んだ衚を元にしお、グラフを䜜成したす。

たずめ

今回は、倧量のデヌタを䞀気に片付けるのではなく、定期的に発生するタスクを間違いなく決められた手順で玠早く凊理する方法の倧切さに぀いお玹介したした。実際、プログラムを䜜っおおくこずで、耇雑なExcel操䜜をするこずなく、デヌタ集蚈埌のグラフが自動䜜成できるのは、ずおも䟿利ではないでしょうか。業務自動化の参考にしおみおください。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。