Excelで作業の自動化を考える
【環境】Windows 10 Pro 64bit、Excel for Office 365
仕事の作業効率をあげるために、Excelによる作業の自動化について考えてみることにしました(唐突ですがw)
■自動化の目的
Excelの作業効率を上げるために行うべきことは、ファイル(Workbook)単位ではなく、シート(Worksheet)単位での自動化を行うことです!
『えっ!?ファイル全部じゃないの!?』『ファイルは沢山あるのよ!?』とお思いでしょうが、よく考えてください
一般的に1つのファイルは、1つの資料を意味していますから、その1つの資料には様々な形式のシートが含まれています!
ですよね?
その数あるシートの中から必要なシートを選別して自動で処理することが大切なのです
ファイルにターゲットを絞って、自動化してもそのファイルにしか対応できないのです
ファイルが自動で処理する対象のファイルかを判断するのは大変ですが、シート単位の判断なら簡単なのです!
更に、ファイルの中のシートが変われば、自動化の処理もそれに追従しなければならないですし、そのファイルが暖簾分けした日にゃ!?
自動化の処理も暖簾分け・・って、そりゃーもー大変!w
これらのことを踏まえて、ファイルをターゲットにした自動化は、全く効率がよくありません!
もしあなたが、『作業を自動化しているのに効率が悪い』と感じているのなら、
最初に確認すべきことは、『その自動化はシート単位で自動化できているのか!?』です!
そして、おそらく、その答えは『否』、ファイルをターゲットにした自動化だと思われます
■あるべき姿
どんなファイルであろうと、条件を満たすシートがある限り繰り返させることができるのが、自動化の本来の形であると考えます
例えば、1つのファイルにシートが増えたとしても、そのシートが条件を満たさないのであれば、自動化の処理は何も変わらないです
条件を満たした場合で、1つのファイルの中に複数のシートが条件を満たすことになったとしても、対象となるシートが増えただけなので、自動化の処理は何も対応する必要がないのです!
暖簾分けしようが、シートが消されようが、自動化の処理には何も関係ない
だからこそ!シート単位で自動化を行うことが大切なのです!
・注意点
シートをターゲットとせよ!って書くと、対象のシートを探すためにファイル毎にシートを探しながら、シート一覧を作ってしまいがちですが、それは間違いです!
何よりもまずは、シートではなく、ファイル一覧を作成してください!
そしてそのファイルの中から、シートを検索したいファイルを選んでからシート一覧を作成する、二段階での作成を行うようにしてください!
『わざわざ二段階にするのは面倒だ!』、『自動化なら一気にシート一覧を作った方が楽ではないか!?』と思いがちです
でも、この二段階にすることは非常に大事なことなのです
もし1つフォルダに複数ファイルがあって、全て対象シートを持つファイルだと判っていたとしても、二段階にすることをお勧めします!
理由は1つ!そのフォルダに1ファイル、後から追加になった場合に、全てのファイルを対象として、処理をやりなおすのか、追加されたファイルだけを行うのか!?を選べるからです
※普通は、後から追加になるファイルはフォルダを分けることが考えられますが、自動化はシステムが出来上がってから後付けで行うことが多いので、自動化側でシステムの補填をしてあげる必要があるのですw
■Excelでの自動化
Excelでの自動化と言って思い付くものはこんなとこですかね?
- Excelの操作を記録するマクロ
- マクロを集めたアドイン
- Excel VBAによるプログラミング
単純な繰り返しの作業をマクロを使って、自動的に行うことはよくあることですが、馴染みのない方も多いかも知れませんが、ExcelにはVisual Basic Editor が付いており、VBA(Visual Basic for Applications)によるプログラミングを行うことで、ファイルやアプリケーションの操作を行うこともExcelではできてしまうのです!
・Excelの役割
Excelは表計算ソフトではありますが、罫線を利用することで、定型の書類として使用されることもしばしばあります
Excelでは以下のようなこともできるので、書類としても重宝されている訳です
- 入力する文字や数字を制限
- 入力値に合わせて文字列を表示
- 入力値を使用した複雑な計算
- リストデータをグラフ化
- etc…
このような場合には、Excelが持っている機能(メニューにあるもの)や関数でできてしまうのですが、これを大量に行わなければならないとき、そんな時こそVBAでプログラミングを行って自動化してしまうのです!
■VBAプログラミングを始める
プログラミングと聞くと、慣れていない人は、難しいのではないかと思うかもしれませんけど、ExcelでVBAを始めるのは、比較的簡単にできてしまいます
- [開発] タブを表示する
- [開発] タブからVisual Basic Editorを起動する
「1.[開発] タブを表示する」はExcelの[ファイル] – [オプション]からExcelのオプションを開き、「リボンのユーザー設定」でメインタブにある「開発」にチェックを付けます
「2.[開発] タブからVisual Basic Editorを起動する」は表示した開発タブの「Visual Basic」をクリックするだけです
これでVisual Baseic Editor(Micorosoft Visual Basic for Applications)が起動します
[開発] – [マクロの記録]を使って、記録されたマクロもこの Visual Baseic Editor で表示し、編集することができます
■マクロの記録
マクロの記録をすると、どのように Visual Baseic Editor に記載されるのかをみてみましょう!
- [開発] – [マクロの記録]をクリック
- 「マクロの記録」画面で「OK」ボタンをクリック
- セル[A1]に『Hello World』と入力して[Enter]キーを押下する
- [開発] – [記録終了]をクリック
こんな感じに標準モジュールに「Module 1」が追加され、以下のように「Macro1」が記載されています
つまり、マクロの中身はExcel VBAのプログラミング(ソースコード)なのです!(何か色々なことを割愛したような気がするが・・w)
・マクロの中身を見てみる
実際に作成されたソースコードを見ていきましょう
Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.FormulaR1C1 = "Hello World" Range("A2").Select End Sub
1行目「Sub Macro1()」
これはマクロ実行時に出てくるマクロ名「Macro1」を実行した際に、呼び出される関数の定義(宣言)になります
「Sub」というのは、「関数の戻り値がない」ということを意味しています
※反対に「関数が戻り値を返す」のは、「Function」と記載し、戻り値の型を行の後ろに追加します(「型」については、多種多様なため、種類やその説明については割愛しますw)
次に、「’」で始まる行が続いていますが、これはコメントですので、プログラムの実行には関係しません
ただし、ここに情報(メモ)を記載することで、後からこれを見て、この関数が何をするのかを判断することができます
※ちなみに、わしはコメント推奨派ですw
7行目「ActiveCell.FormulaR1C1 = "Hello World"
」
これは現在のアクティブなセルに数式を R1C1 参照形式で指定して、『Hello World』と入力することを意味します
8行目「Range("A2").Select
」
これは[Enter]キーでセルが[A2]に移動したことで、[A2]を選択したということを意味します
9行目「End Sub」
これは関数(Sub)の終わりを意味します
※「Function」の終わりは「End Functrion」となります
わずか数行ですが、これも立派なVBAによるプログラミングなのです!
■アドイン
単純に考える場合、アドインとはマクロ登録した関数をまとめて、誰でも使えるように、ファイルに抽出したものだと考えてもらっておいて良いかとw
よく利用するちょっとした関数は、多くのシートが入ったExcelファイル等を複数の作業者で扱う場合に、以下のような関数を作成して、アドインで配布しておきます
- 表示倍率を100%に統一
- アクティブセルを[A1]に設定
- ドキュメントのプロパティから個人情報を削除
- 余分なスタイルの削除
- リンクの切れた参照や名前定義を削除
そうすると、保存するときには、必ず、上記の関数を通してから保存してもらうようにすることで、個々の作業者が作業しやすくなったりします
※実際には、Excel等にオリジナルのリボンを追加することができるので、作業に特化したリボンを作成して、担当者に配布することが理想な気はしますが、これを開発するのは、現在のOffice365では結構面倒ですので、今は割愛しますw(いつかは開発していきたいなー)
■VBAプログラミング
というわけで!・・・?w
「マクロの記録」がVBAだ!と勘違いさせて終わりそうなので、訂正しておきますが、「マクロの記録」がイコールではなく、Visual Baseic Editor を使用して、関数を作成していくことがVBAプログラミングなのです!
自動化を考えると題してはいましたが、考えるというよりは、VBAを使って自動化を行っていきます!という決意表明となりますw
この先、VBAで自動化を行っていく際に出てくる問題等を忘備録として残していこうと思いますが、間違ってたら・・ごめんなさいm(_ _)m
Excelでよくやりがちな、CSVファイルのデータをExcelに取り込んで、集計したりという処理を実際に自動化のツールを作りながら、記事にしていけたらと思います
というわけで、いつかきっと、ちゃんとVBAプログラミングの記事を書いていきます!
またよろしくお願いしやーーーっす!
ではでは