会計士・経理マンの仕事をラクにする自動化プログラミング入門

プログラミング 若手会計プロのTips・スキル

会計士・経理マンの仕事をラクにする自動化プログラミング入門

 

新しいセンター試験では、試験科目として「プログラミング」が導入される方針となっているのをご存知ですか?

プログラミングは、次世代の重要スキルとなりつつありますが
実際に自分がやるという話になると、抵抗感がある方が多いのではないでしょうか。

プログラミングは理系の大学を出てIT業界に進んだ技術職のためのスキルであり
文系出身の会計士・経理マンである自分とは縁遠いもの、と感じる方がほとんどだと思います。

 

実は、簡単なプログラミングが出来るようになることは、あまり敷居が高くありません。
しかも、ある程度使えるようになるだけで、日々の業務を圧倒的に効率化できます。

事実、今までスタッフ3人がかりで数日間かけてこなしていた作業を、1人で数時間で完了させ
しかも繰り返し・横展開可能にすることができます。

それほどまでにプログラミングの力は絶大です。

 

今回は、全くのプログラミング初心者が、どうやって実務でプログラミングを使えるようになるか?
全部で6つのステップに分けてご紹介したいと思います。

 

STEP1:目的を明確化する

まずは、プログラミングで達成したいことを明確化しましょう。

 

プログラミングで出来ることは
・業務の自動化・効率化
・WEBサイト・WEBサービスの開発
・ネイティブアプリ(スマホアプリなど)の開発

など、多岐にわたりますが、今回は最初の一歩として「業務の自動化・効率化」に絞って
目的を明確化していきましょう。

例えば

・毎朝特定のWebサイトからデータをコピーしてエクセルに貼り付ける作業を自動化したい

・月に1度、同じ宛先に定型メールを送る作業を自動化したい

・システムから出力したデータをエクセルに貼り付けて加工する作業を自動化したい

・大量のエクセルファイルの特定のセルの情報を集計する作業を自動化したい

などなど…

何か、身の回りの定型業務で、自動化したいものは思い浮かびましたか?

 

思い浮かんだら、まずはそれをメモに書き留めましょう。

 

プログラミングで、何がどこまでできるかイマイチ分からないから、目的をイメージできない
という方もいらっしゃると思います。

そんな方のために、ひとつの考え方をお伝えします。

・作業を手順書に具体的に落とせるものは、すべてプログラミングできる

「その場その場で定性的に判断する」業務は、現状プログラミングでの自動化は難しいです。
例えば、サインの筆跡を見て、本人のサインかどうかを判断する、など。
(この部分が、いわゆるAI、深層学習の分野ですね。)

「定量的に判断できる」業務は、プログラミングで自動化できると考えて問題ありません。
例えば、数値が50を超えるデータを抽出する、など。

定量的というのは、数値に限りません。
例えば、一言で「怪しい仕訳を抽出する」と言えば定性的になりますが
「土日に入力された」「仕訳入力回数2回以下の入力者の仕訳」を抽出するという条件に分解すれば
定量的に判断できるので、プログラミングで自動化可能です。

 

 

STEP2:プログラミング言語をざっくり理解する

目的が決まったら、次は目的に沿った言語を決めて、その言語をざっくり理解します。

今回は、VBAを使っていくことにしましょう。

・エクセルに付属しており、馴染みやすい

・新しくソフトをインストールする必要がない

ので、自動化プログラミングの初歩としては最適という理由です。

 

方法としては、2-3日でササっと本を読めばOKです。

 

全てを理解するのではなく
・どのようにエディターを使うのか?(デバッグの方法など)

・変数、定数、関数とは何か?

・データの型とは何か?

・繰り返し処理、分岐処理、再帰処理とは何か?

というような、プログラミングの基礎的な考え方を掴めれば十分です。

 

具体的には、このあたりの本がとっつき易いです。

 


入門者のExcel VBA―初めての人にベストな学び方 (ブルーバックス)

 


ストーリーで学ぶ Excel VBAと業務改善のポイントがわかる本 【演習問題付き】

 

 

他にもWebサイトだとここがオススメですね。

moug Excel VBA ビギナーズ

 

 

STEP3:早速作ってみる

本でざっくりプログラミング言語(今回はVBA)を理解したら
さっそく手を動かしてみましょう。

 

ここでのポイントは「やりたいことを小分けにすること」です。

例えば、STEP1で決めた目的が「複数のエクセルファイルのデータを一つのシートにまとめる」
ことだとします。

これをいきなり作ろうとすると、若干ハードルが高くなります。

なので、

・まとめたいエクセルファイルを選ぶ

・エクセルファイルからデータをコピーして特定のシートに貼り付ける

のように、やりたいこと(=問題)を小分けにして取り組んでいきましょう。

 

では、エクセルファイルからデータをコピーして特定のシートに貼り付けるプログラムを作るとします。

その際は、まずはこのように考えて作っていくことになると思います。

 

1.コピーをする際の記述を書く。

book1.xlsxからデータをコピーして、matome.xlsxにコピーする記述。
コピーする範囲は、とりあえずセルA1~A10としておく。

Sub Sample()

Workbooks(“book1.xlsx”).Sheets(1).Range(“A1:A10”).Copy Workbooks(“matome.xlsx”).Sheets(1).Range(“A1:A10”)

End Sub

 

2.やりたいことに近づけるための方法を考える。

・コピーをする範囲はファイルごとに違うので、Range(“A1:A10”)のように一定ではない。
book1.xlsxではセルA1~A10をコピーできればよいが
次にコピーするbook2.xlsxではデータの量が多いため、セルA1~A20までコピーしたい。
そのシート毎にコピー範囲を変えるにはどうするか?

 

・同様に、(“matome.xlsx”)の貼り付け先の範囲を変えるにはどうするか?
book1.xlsxのデータをセルA1~A10にコピーした後、book2.xlsxのデータを同じようにセルA1~A10にコピーしたら、book1.xlsxのデータが上書きされて消えてしまう。
book2.xlsxのデータはセルA11から貼り付けたい。

 

3.本もしくは、グーグル検索を使って解決策を見つける

上記で思いついた疑問を「VBA セル 最終行」と検索すると、このようなページが見つかります。

ページを見てみると、エクセルの最終行の位置は、このように取得できるということが分かります。

maxRow = .Range(“A1”).End(xlUp).Row

 

なるほど、ということで、最初に書いた記述を書き直すことができそうですね。

 

4.記述を書き直す

3で調べた結果を使って、少しだけ記述を書き直しました。

 

Sub Sample()

maxRow = Workbooks(“book1.xlsx”).Sheets(1).Range(“A1”).End(xlUp).Row

Workbooks(“book1.xlsx”).Sheets(1).Range(Cells(1,1),Cells(maxRow,1)).Copy…(略)

End Sub

 

※上記はあくまで例なので、このままでは動きません。
そもそもエクセルファイルを開いていないし、Cellsの指定が不十分ですが
直感的に分かりやすくするため、必要な部分以外の記述を省いておりますことご容赦ください。

 

このようにして、最初に書いた記述を少しずつ「やりたいこと」に近づけていきます。

 

STEP4:STEP3で作ったものをまとめる

 

STEP3で、いくつかに分解した「やりたいこと」を実行するプログラムが出来上がったら

今度はそれをまとめます。

 

例えば、以下のような記述を書いてみましょう。

STEP3で作ったモジュールを
Call xx
で繋げていきます。

 

Sub copySheet()

 

‘コピーしたいファイルを指定する

Call selectFile

‘エクセルファイルからデータをコピーして貼り付ける→STEP3で作ったもの

Call Sample

 

End Sub

 

これで、全てのモジュールが問題なく動くように微調整をしたら
とりあえず動くプログラムが完成です。

モジュールを小分けにせず、一つにまとめて記述すれば
手っ取り早くプログラムを動かすことができますが

STEP5のことを考えれば、はじめのうちからモジュールに小分けにすることを徹底したほうがよいと思います。

 

STEP5:応用可能な形に書き換える

さて、とりあえず動くプログラムが出来ました。
とはいえ、例えば「エクセルファイルからデータをコピーするプログラム」の部分は
今後も違った形で応用できそうです。

なので、プログラムを今後も応用可能な形に書き換えていきます。

例えば、以下のようなポイントで書き換えます。

 

・変数化・定数化

Range(“A1”)や、Cells(1,1)のような、そのまま数字を指定している部分は
今後別の数字を入れて使うかもしれないので、変数や定数として切り出します。

ちなみに、そのまま数字を指定してプログラミングすることを
・マジックナンバー

・ハードコーディング
などと呼んだりします。一般的には避けた方がよい方法です。

 

・関数化

STEP3のように「やりたいこと」を小分けにして、関数として切り出す作業です。

 

・読みやすいコード化

他人が読んでも分かるように、変数や関数をsample1などと意味の分かりづらい名前にせずに
copyFileなどと、意味の分かりやすい名前にする。

コードに説明のコメントを入れる。

などを行い、コードの読みやすさを高めます。

 

STEP6:他の「やりたいこと」にチャレンジしてみる

1つできたら、2個目を作るハードルはとても下がっているはずです。
早速、2個目の「やりたいこと」を実現するプログラムを書いてみましょう。

 

ここまで来たら

・お手本の記述に触れる

・リファレンスを眺めてみる(何ができるのかの全体感を掴む)

ということの方が大事になってくると思います。

 

リファレンスだと、このサイトは良くまとまっていると思います。

本だとコレがよさそうです。

ExcelVBA最強リファレンス

 

ここまで出来れば、実務で使えるようになってくる

STEP6までクリアすれば、もうすでにVBAを実務で使えるようになり始めているはずです。

ある程度VBAに習熟すれば、プログラミングの基礎的な部分を理解できるので
例えば現在トレンドの言語であるPythonなどの習得もだいぶスムーズになってきます。

(Pythonの具体的な実務での活用などは、今後記事にしていこうと思っています。)

 

自動化プログラミングは、決して敷居の高いものではありません。
しかも、効果は絶大で、可能性も無限大です。

少しでも業務に余裕が出たら「この作業、自動化できるのでは?」と考えて

自動化プログラミングにチャレンジしてみるのも良いのでは?と思います。

 

更に興味が出てきたら、Udemyなどで

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習

Python3の入門オンライン講座

などのオンラインレッスンを受講してみるのも面白いです。

タイミングによっては2,000円ほどで本格的なレッスンが受講できます。

一度VBAに触れていれば、理解もかなりラクでしょう。

 

是非、VBAをきっかけに、自動化プログラミングに触れてみてください。
きっと公認会計士試験よりはだいぶハードルが低いはずですよ…

コメント