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



・・・なんず倪田先茩の連絡先をゲットできた

しかも、なぜか倪田先茩の方からLINEのID亀換を申し出おくれたのだ。もしかしお、これは脈があるのではず思っおしたう。しかも、今日も朝早く来れば「秘密の特蚓」をしおくれるずのこず。高鳎る胞を抌さえお家を出た。

しかし、倱敗もあった。せっかく倪田先茩の連絡先を聞いたのに、結局䜕のメッセヌゞも送っおいない。ず蚀うのも、昚倜も今朝も通勀電車の䞭でも「䞀通目に䜕を送ろうか」ず、悶々ず考えおいたのだ。怜玢゚ンゞンで調べるず、気の利いた文䟋がたくさん芋぀かったのだが、それを送る勇気がなかった。

そうこうしおいる内に、䌚瀟に着いおしたった。モダモダしながら、䌚瀟の扉をくぐるず、どうやら、倪田先茩は今日も先に出瀟しおいるようだ。なんず、圌女はスマヌトフォンを芋ながら甘そうなパンをリスのようにかじっおいた。その䜕ずカワむむこず

それで、僕は深呌吞しお、背筋を䌞ばし、かっこ぀けお経理郚の郚屋に入った。

「おはようございたす」ず僕が元気に挚拶するず、ニッコリず満面の笑みで倪田先茩が答えた。「田䞭君、おはよう」そしお、急にガバッず立ち䞊がっお蚀った。

「それでは、早速プログラミングを始めたしょう今日は、LINEの䌚話ログをExcelVBAで自動凊理しよう。」

倪田先茩、かっこ぀けお蚀った割には、片手に甘いパンの残りを持っおいるし、倚少突っ蟌みどころがあるのだが、そこは芋ないふりをしお「埅っおたしたお願いしたす。」ず答えた。

そしお、それを満足そうに聞いた倪田先茩が質問しおきた。

「田䞭君、昚日、LINEで連絡先亀換したけど、たくさんメッセヌゞ来たでしょ」

「え䜕のこずですか」

僕は昚日から䞀床も鳎っおいないスマヌトフォンを取り出した。やはり、倪田先茩からのメッセヌゞは来おいない。

「あれ䌚瀟のグルヌプに入れたはずなんだけど・・・」

慌おお先茩もスマヌトフォンを取り出す。

「あれっ、远加できおなかったみたい。ごめんね。実は、昚日、䌚瀟のグルヌプラむンで懇芪䌚のお店の垌望を募ったのよ。」

なんず、昚日、LINE亀換したのは、䌚瀟のグルヌプラむンに入れるのが目的だったずのこず。がっかり。そんな僕の様子に構わず、倪田先茩は続ける。

「それで、今日は、このLINEの䌚話ログを利甚しお、プログラミングで懇芪䌚のお店の垌望を自動で集蚈しようず思うの。」

僕に萜ち蟌んでいる暇はない。先茩の提案に驚いお尋ねた。「そんなこずできるんですか」

倪田先茩は、満面の笑みで頷いた。そしお、い぀も通りパ゜コンを開いた。そしお、LINEのPC版を起動した。

  • LINEで懇芪䌚のお店の垌望を募ったずころ

    LINEで懇芪䌚のお店の垌望を募ったずころ

「あ、LINEっおパ゜コンでも䜿えるんですね。」ず僕が他尋ねるず、倪田先茩は、早口で解説を始めた。

「そうなの。しかも、LINEの䌚話ログをテキストファむルずしお保存できるの。画面右䞊のメニュヌから『トヌクを保存』をクリックするず、䌚話ログをファむルに保存できるよ。そしお、この䌚話ログをプログラムで読み蟌んで利甚するの。」

  • LINEの䌚話ログをプログラミングで(䜜画 竹䞭貎䞀/created by コミPo!)

その埌、倪田先茩はExcelを起動した。そしお、保存した䌚話ログをテキスト゚ディタで開いお、テキスト党郚をコピヌしおExcelに貌り付けた。

  • 䌚話ログをExcelに貌り付けたずころ

    䌚話ログをExcelに貌り付けたずころ

「今、ExcelのSheet1にLINEの䌚話ログを貌り付けたの。今、新芏シヌトを䜜ったんだけど、プログラムで集蚈しお、結果はSheet2に出るようにするわね。」

倪田先茩は、そう蚀っお、[Alt]+[F11]キヌを抌しおVBA゚ディタを開くず、プログラムを曞きだした。カタカタず小気味よいキヌボヌドの音がする。

「できた」倪田先茩はそう蚀っお、[F5]キヌを抌しおプログラムを実行した。するず、あっずいう間に、LINEログを元にしたアンケヌトの集蚈結果が衚瀺された。

  • 集蚈結果が衚瀺された

    集蚈結果が衚瀺された

「やっぱり、焌鳥屋か。」

実行結果が正しく衚瀺された盎埌は、ニコニコしおいた倪田先茩だったが、実行結果を確認した埌はちょっず嫌そうだった。

「先茩は、本圓はどこが良かったんですか」

「焌き鳥屋も奜きだけど、私はパスタ屋が良かったな。」

これは絶奜のチャンスだ。僕は勇気を振り絞っお蚀った。

「それなら今床、パスタ屋に䞀緒に行きたせんかプログラムを教えおもらっおいるお瀌に奢らせおください」

続く

実際のプログラム

さお、倪田先茩が䜜った実際のプログラムを玹介したす。今回は、LINEの䌚話ログを元にしお、アンケヌトを集蚈したす。

実際のサンプルコヌドをこちらからダりンロヌドできたす。

LINEの䌚話ログを保存する方法は、本文䞭にもやり方が乗っおいたすが、LINEのメニュヌから「トヌクを保存」をクリックするず、テキスト圢匏でログを保存できたす。

  • LINEの䌚話ログを保存する方法

    LINEの䌚話ログを保存する方法

続いお、Excelを起動し「空癜のブック」を䜜成したす。テキスト゚ディタで保存したLINEの䌚話ログを開いお、すべおのテキストをSheet1をに貌り付けたしょう。そしお、画面䞋にある[+]を抌しお新芏シヌト(Sheet2)を䜜成したす。このSheet2にプログラムの実行結果を衚瀺したす。

これで準備完了です。[Alt]+[F11]キヌを抌しお、VBA゚ディタを起動したしょう。そしお、以䞋のプログラムを蚘述したす。

Sub CountShopName()
    Dim Names As Variant ' お店の名前
    Dim Values As Variant ' お店ごずの祚
    ' お店の名前を指定 --- (*1)
    Names = Split("焌肉屋:焌鳥屋:倩ぷら屋:パスタ屋", ":")
    ' 祚を0に蚭定 --- (*2)
    Values = Split("0:0:0:0", ":")
    ' セルの最䞋行を埗る --- (*3)
    LastRaw = Cells(Rows.Count, 1).End(xlUp).Row
    ' 順次セルを繰り返し読む --- (*4)
    For i = 1 To LastRaw
        ' セルの倀を埗る --- (*5)
        Data = Sheet1.Cells(i, 1)
        ' セルがお店の名前を含んでいればカりント --- (*6)
        For j = 0 To UBound(Names)
            If InStr(Data, Names(j)) > 0 Then
                Values(j) = Values(j) + 1
            End If
        Next
        Debug.Print (Data)
    Next
    ' 結果を衚瀺 --- (*7)
    For i = 0 To UBound(Names)
        Sheet2.Cells(i + 1, 1) = Names(i)
        Sheet2.Cells(i + 1, 2) = Values(i)
    Next
End Sub

プログラムを貌り付けたら、[F5]キヌを抌すか、゚ディタ䞊郚にある実行ボタンをクリックしたしょう。するず、実行結果が、ExcelのSheet2に衚瀺されたす。

プログラムを確認しおみたしょう。(1)の郚分では、倉数Namesを初期化したす。Split関数を䜿うず、文字列を任意の区切り蚘号で区切っお配列に分割できたす。ここではお店の名前をコロン「:」で区切っお蚘述し、Split関数で配列に分割したす。぀たり、倉数Namesには配列圢匏でお店の名前が代入されたす。続いお、(2)の郚分では、倉数Valuesを初期化したす。(1)ず同様の手法で0で初期化したす。

続いお(3)の郚分では、シヌトの有効な最䞋行を取埗したす。ちょっず分かりにくいのですが、このように蚘述するこずで最䞋行が埗られたす。そしお、(4)の郚分では、シヌトの䞀番䞊から、䞀番䞋たでを順次読んでいきたす。そしお、(5)の郚分でセルの倀を取り出しお、(6)でお店の名前があるかを調べたす。InStr関数を䜿うず文字列怜玢ができたす。お店の名前があれば、倉数Valuesの倀を加算したす。最埌に、(7)の郚分で、Sheet2に結果を衚瀺したす。

プログラム改良のポむント

たた、自分甚のプログラムに曞き換える際のポむントを玹介したす。ず蚀うのも、懇芪䌚のお店の名前が、い぀も「焌肉屋」や「焌鳥屋」であるはずがありたせん。

プログラムの(1)の郚分にある「焌肉屋:焌鳥屋:倩ぷら屋:パスタ屋」の郚分を任意の名前のお店に曞き換えるなら異なるアンケヌトの集蚈にも利甚できたす。お店の名前をコロン「:」で区切っお䞊べるだけです。その際、(2)の倉数Valuesの初期倀も同様に曞き換える必芁がありたす。

䟋えば、A、B、Cの䞉択であれば以䞋のように曞き換えたす。

    ' お店の名前を指定 --- (*1)
    Names = Split("A:B:C", ":")
    ' 祚を0に蚭定 --- (*2)
    Values = Split("0:0:0", ":")

たずめ

実は、LINEには投祚を募る投祚機胜があるので、最初からそれを䜿えば集蚈の手間が省けたす。最初からある機胜を䜿えば、プログラムを䜜る必芁もないのです。ただし、LINEの䌚話ログを掻甚したい堎面は倚いず思いたすので、今回のプログラムが参考になりでしょう。

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