Excel VBA

【属人化対策】エクセルVBAの運用を進める方法【納得感とやさしさが重要】

お仕事で使う頻度の高い「Microsoft Office製品」
データ入力・データ集計の場合は「エクセル」が大活躍します。

エクセル業務というと「面倒な作業が多い」というデメリットもあります。
仕事が増えると、焦ってミスにつながるなど「便利だけど嫌い」という方も多いと思います。

そんな「面倒な作業」を自動化してくれるのが「エクセルVBA」です。
習得も比較的ラクなので、事務職の方におススメのスキルです。

今回は、エクセルVBAをできるようになって、社内でプログラムを作成・運用する時のはなしです。
よく言われるのは「属人化」という問題。

この問題を解決することで、社内の業務効率化が進み「ゆとりのある職場」が実現できるかもしれません。

こんな方におすすめ

  • エクセルVBAに対する偏見を持っている方
  • エクセルVBAの学習をしようか迷っている方
  • プログラムを作れるようになったけど、運用で悩んでいる方

この記事を読んだ後は、エクセルVBAに対する考え方が変わるかもしれません。

エクセルVBAの属人化について

まずは、エクセルVBAの属人化について紹介します。

会社に入ると一度は見たことのある「誰が作ったのか分からないVBAプログラム」

おそらく、昔の優秀な方が業務改善のために作ったプログラムで、多くの方の役に立ったものだと思います。


ですが、時間が経つにつれて「システムや仕事の運用方法の変更」「社内の担当者の変化」などの環境が変化していきます。

環境の変化に応じてプログラムが修正されればいいのですが、実際は、仕事の運用方法が変わったにも関わらず、昔の人が作ったVBAを使うという手順がそのまま残ることがあります。


すると、作業の中に【昔からあるプログラムを使う】という運用が残り、結果として「何が行われているか分からないけど、このVBAを使う」という困った状況になってしまいます。

このような経験をした方にとっては「エクセルVBA=良く分からなくて、役に立たないもの」というイメージができてしまいます。


属人化対策

エクセルVBAに染みついている「属人化」というキーワードを少しでも取り除くために、対策を紹介したいと思います。

属人化対策

  1. プログラムの目的を明確にする
  2. プログラムの内容を理解してもらう
  3. 全部の業務を自動化しない


プログラムの目的を明確にする

一つ目は「プログラムの目的を明確にする」です。

プログラムを作るのは「何かしらの目的」があるからです。
特にエクセルVBAの場合は「毎日行っている業務をラクにしたい」や「手作業だと終わらない業務を処理したい」などがあると思います。

プログラムを作成する時は「業務のうち、どの処理を自動化したいのか」「その結果、どのような効果があるのか」を明確にすることがオススメです。

目的を明確にすることで「仕事のやり方が変わった」場合に「プログラムの修正」するか「プログラムの使用をやめる」かを判断できるようになります。

メモ

プログラムの目的については、かんたんなメモでも構いません。

メモを残しておくことで、「作成したプログラムをいつまで使う必要があるのか」判断ができるようになります。


プログラムの使用期間も重要

プログラムは「同じ処理を、ミスなく、高速で終わらせる」というメリットがありますが、それは、指定した処理が運用されている間だけです。

もし、仕事のやり方が変わればプログラムを修正する必要があります。

とはいえ、本当の業務改善は「その作業が本当に必要なのか?」について考えることだと思います。
もし、自動化プログラムで行っていた作業自体が要らなくなったのなら、プログラムの役割が終了し「プログラムを捨てること」が業務改善につながります。


プログラムの内容を理解してもらう

プログラムの内容を(プログラムの分からない)他の方に納得してもらうことが必要です。

プログラムが分からない人にとっては「プログラムってよく分からない・・何だかよく分からないことをしている」と心配しているかもしれません。

そのため、プログラムで処理する業務について納得してもらうことが必要です。

業務の納得を得るには

やや泥臭いですが、このようなフォローが重要だと思います。

  • エクセル処理に落とし込む
  • 普段の業務のうち自動化できた工程を伝える
  • 結果として時短になる、ミスがなくなる、ラクになると実感できるメリットを伝える
  • (できれば)手作業の内容と結果が一致していることを確認してもらう


ちょっとしたことですが、これをやることで、プログラムが分からない方からの「プログラムは分からない」「やっぱりVBAは使えない」という批判がなくなります。
なぜなら、プログラムが分からない人も「普段行っている業務」についてはマスターしていますので。


ポイント

(全体のうちの一部かもしれませんが・・)自動化をすることで「自分の仕事が奪われる」と感じてしまう方もいらっしゃるかもしれません。

そんな方のためにも「忙しくて手がまわらなかった他の業務ができるようになる」というメリットを伝えたり「業務改善を一緒に行う」などモチベーションを保つフォローがあると良いのかもしれません。


全部の業務を自動化しない

プログラムというと「今の業務の一連の作業を自動化できればラクなのに・・」と思ってしまいそうです。

実際、頑張ってプログラムを作れば実現は不可能ではないでしょう。

ですが、そこは我慢して「業務の部分的な自動化」を目指す方が運用がしやすいです。

業務といっても「仕事の流れが頻繁に変わる」ものがあります。
全ての業務をプログラムに書き込んでしまうことで、メンテナンスのために時間を取られてしまいます。

メンテナンスをする時間がないままプログラムが運用されてしまうと、プログラムの想定していない処理結果になり「プログラムがおかしくなった」「プログラムを直してくれ」そして「やっぱりVBAは使えない」という批判のもとになります。

そのため、業務の一部分を自動化するというのが安全です。


ポイント

自動化する業務の選び方としては

  1. 単純作業
  2. 毎回処理が同じ
  3. 時間がかかる(量が多い)

という作業を選ぶと、自動化のメリットが大きいです。


メモ

以前、毎月3,000個あるCSVファイルの内容を一つのエクセルファイルにコピペする仕事を自動化しました。
手作業の場合、1個あたり15秒でコピペできたとしても、12.5時間かかってしまいます。

15秒 × 3,000個 = 45,000秒
45,000秒 ÷ 60 = 750分
750分 ÷ 60 = 12.5時間

コピペ作業は単純ですが、ファイル数が膨大だとしんどいです。
こういった作業は自動化してしまった方がお得だと思います。


プログラムのヒント

属人化対策としていくつか紹介しました。

とはいえ「実際にどうすればいいのか・・・」と迷ってしまう方もいらっしゃるかもしれません。

プログラムのヒント

  • プログラムにコメントを書く
  • 説明書を作る
  • デバッグ画面が出ないようにプログラムを作る
  • 設定ページを作る
  • If分とMsgboxでやさしさを追加


プログラムにコメントを書く

これから「エクセルVBA」でプログラムを作ろうと思う方におススメなのが「プログラムにコメントを書く」ことです。

コメントというのは、人が見て分かるメモをプログラムの中に書くことです。


コメントは、プログラムには読み込まれないので、実行される心配がありません。

なぜ、コメントを書くかというと「自分のため」「他の人のため」の2つ理由があります。

「自分のため」というのは、プログラムを作成して時間が経った時に「なんでこのコードを書いたんだっけ?」ということが起こるのを防ぐためです。
プログラムを作った時は覚えていても、時間が経つにつれて忘れてしまうものです。


なので、プログラムを書いた時の「一番プログラムについて分かっている自分のメモ」は、後で役に立ちます。

「他の人のため」というのは、主にプログラムを他の方がメンテナンスする時に使われます。
(プログラムが分からない方は、VBAコードの画面を見る機会が少ないと思います)

他の人がプログラムを見た時に「プログラムの内容を素早く理解することで、メンテナンスが速くできるようになります」


すぐにプログラムが使えるようになることで「使えないプログラム」と判断されてしまう機会がグッと減ります。


こちらがコメントのイメージです。
処理の上に「 'シート1のA1セルに1000と入力 」など、何が行われているか記載することでプログラムを読みやすくなります。

Sub コメント()
  'シート1のA1セルに1000と入力
  Sheet1.Range("A1") = 1000
End Sub


コメントはどうやって出すの?

エクセルVBAの「コメント」の入力方法は簡単です。

【'(シングルクオーテーション)】を先頭に付けるだけです。
※シングルクオーテーションは【Shift + 7(テンキーでない7)】を押すと入力できます。


説明書を作る

プログラムにコメントを書くことで「作成したプログラムの処理内容」を知ることができます。


とはいえ、コメントを見れるのは「エクセルVBAコード画面を開く人だけ」です。

多くの方は、エクセルシート・セルのみを見ていると思います。


せっかく分かりやすくコメントを書いても、見つけてもらえなければ意味がありません。


そこで、プログラムのコメント以外に「説明書」を作るというのが有効だと思います。

説明書といっても、事細かに記載するのではありません。
やることはこれだけです。


説明書に書くこと

  • 業務全体の処理内容(箇条書き)
  • 業務のうち自動化した部分
  • プログラムの処理内容(どのデータを転記したかなど)

プログラムといっても、人がやっていたことをパソコンが代わりにやっているだけなので「どのような処理が行われているのか」を記載することで、プログラムへの理解が得られると思います。

説明書は、別のエクセルファイルを作ったり、プログラムを作ったエクセルブックに別シートを追加して記載してもいいかもしれません。


デバッグ画面が出ないようにプログラムを作る

エクセルVBAでプログラムを作り始めたばかりの頃は、エラーが出ることが多いです。

プログラム作成中は「エラーとの戦い」だと思いますが、実は運用が始まってからもエラーが起こることがあります。

原因は「プログラムの不備」か「プログラム利用者による想定外の処理」です。

特にプログラム利用者はプログラムが分からないことが多いので、エラー発生時の「デバッグ画面」はビックリします。

デバッグ画面が出ると「プログラムが壊れた」と勘違いする方もいらっしゃいます。

対策としては・・プログラムが完成したら、プログラムを利用する方にテストをお願いするのがオススメです。
(自分では想定していなかったエラーを見つけてくれることがあります。それだけでなく、プログラム作成に携わったことで、今後も協力を得られることが多いです)

ポイント

プログラムのエラーが出るのは、想定外の処理が行われたときです。

  • 事前にエラーが起きそうな場面を予想する。
  • エラーが起きた時の対策コードを記載する。

ちょっとしたことですが、先回りをすることでプログラムを利用する方の「デバッグ画面でビックリ」を減らすことができます。


メモ

エラー対策コードは何を書けばいいの?という方に例を紹介します。

  • gotoでコードでプログラム処理の順番を変える
  • if文で細かなフォロー
  • msgboxでエラー文を人が分かる具体的な内容に変更

という方法もあります。


設定ページを作る

プログラムを作っていると、プログラム内で設定を作ることが多いと思います。

例えば「消費税率」の場合だと
消費税率が変更になった時に、数値を変更する必要があります。

その場合に、便利なのが変数です。

Sub 消費税計算()
  Dim 消費税率 As Single
  消費税率 = 0.1
  Sheet1.Range("A1") = WorksheetFunction.RoundDown(Sheet1.Range("A1") + Sheet1.Range("A1") * 消費税率, 0)
End Sub

このコードでは、【消費税率】という名前の変数に0.1という数字を入れています。
(消費税が10%の場合です)

仮に、消費税率が12%のように変更があった場合(これ以上上がらないといいのですが・・)変数に入れる数字を変更するだけです。

消費税率 = 0.12 '0.1→0.12に変更するだけでOK


便利な反面デメリットもあります。
それが「プログラムが分からない人には消費税率の変更ができない」ということ。

説明書を作るという方法もありますが、「一文字でも間違えるとエラーになってしまうエクセルVBA」のコード修正はハードルが高いです。


(修正の結果、エラーが出てしまった場合、プログラムが分からない人にとっては「エクセルを壊してしまった」と感じてしまうと思います)


対策はかんたんです(ちょっとした工夫だけ)

やる事はこれだけ

  • 設定用シートを別途作成する


設定用シートというのは、プログラム上で参照するセルをまとめたものです。


エクセルはこのようなイメージです。

設定ページでできること

プログラムで設定したデータのうち、頻繁に変わるものは「別のシートのセル」を参照できるようにします。

設定シートの値を変更すれば、プログラムの修正が不要になります。
プログラムを利用する人も、自分でプログラムを制御できるようなるので「なにをやっているか分からない」と感じることが減ると思います。


設定シートで消費税率を変更できるようにする。


コードはこのように書きます。

Sub 消費税計算()
  Dim 消費税率 As Single
  消費税率 = Sheet2.Range("B1")
  Sheet1.Range("B2") = WorksheetFunction.RoundDown(Sheet1.Range("A2") + Sheet1.Range("A2") * 消費税率, 0)
End Sub

【消費税率】という名前の変数に【設定シートのB1セルの値】を入れています。

このようにすることで、プログラムが分からない方も「消費税率の変更があった時は【設定シートの値】を変更すれば大丈夫」と安心できます。

プログラムのうち、作業をする方がコントロールできるようにするのもオススメです。


If文とMsgboxでやさしさを追加

If文とMsgboxを使うことで、プログラム利用者にやさしくすることができます。

例えば、先ほどの消費税率を入力するプログラムで説明すると・・下の図のようなイメージです。

消費税率に「a」という文字が入力されている場合


例えば・・

  • 消費税率に数字以外の値を入力してしまった場合

このような場合は、プログラム実行のときにエラーが発生してしまいます。

数字を入れるための変数の中に「文字」を入れてしまったから起きたエラーですが、プログラムが分からない方からすると「何が起こった??」とパニックです。


ひと手間ですが、プログラムにIf文とMsgboxを追加することで、プログラムが分からない方にもやさしい内容になります。

Sub 消費税計算()
  Dim 消費税率 As Single
  '入力値判定(設定シートの消費税率に数字が入力されているか確認)
  If IsNumeric(Sheet2.Range("B1").Value) = True Then
    消費税率 = Sheet2.Range("B1")
  Else
    MsgBox "設定シートの消費税率セルに数字以外の値が入力されています。"
    Exit Sub
  End If
  Sheet1.Range("B2") = WorksheetFunction.RoundDown(Sheet1.Range("A2") + Sheet1.Range("A2") * 消費税率, 0)
End Sub


プログラムで行っていること

先ほどのプログラムはこのような流れです。

  1. 設定シートのB1セル(消費税率)に数字が入っているか確認
  2. 数字が入っていれば、【消費税率】という名前の変数に値を入れる。
  3. 数字以外の値(文字など)が入っていれば、次の処理を行う
  4. (文字の場合の処理1)数字以外が入っていることを知らせるメッセージを表示させる。
  5. (文字の場合の処理2)プログラムを終了する。

このように書けば、プログラム利用者が文字を入力した場合でも、デバッグ画面が出ることなく処理を終了することができます。
(メッセージを読めば「消費税率セルにヘンな値が入っていたのか」と気が付くことができます)

(自然と)設定シートの消費税率の値に数字を入力してプログラムを再度実行してくれます。


メッセージボックスについてはこちらの記事で紹介しています。

こちらもCHECK

エクセルVBAのメッセージボックスの使い方を紹介します。【Msgbox】

エクセルVBAの学習を始めた頃に知ることが多い「メッセージボックス」 メッセージを表示するだけでなく、処理を分岐させることができるなど、プログラムの利用者が使いやすくするには必要な機能だと思います。 ...

続きを見る


プログラムが書ける人を増やす・・は難しい

エクセルVBAの属人化を防ぐ方法として「プログラムが書ける人を増やす」のもポイントです。

一人で業務改善をするよりも、全員で改善が進むのが一番効率が良いからです。
(意見だけでなく、プログラムまで作れるようになれば理想的です)

とはいえ、実際には難しいと感じています。

その理由は、エクセルVBAを学習したいと思っている人はいても、行動に移していない人が多いからです。

こちらもCHECK

タイトル画像
【理由は3つ】エクセルVBAを使える人が少ないのはなぜ?

事務作業だけでなく、会社で仕事をしていると使うことの多い「エクセル」データ入力だけでなく、データ集計・分析もできるのでとても便利です。 そんな「よく使われているエクセル」ですが、VBAとなると、使える ...

続きを見る

無理矢理プログラムの勉強をさせるのはかなり負担なので「エクセルVBAの学習をしてみたいという方」が見つかった時に勧めてみるのがいいと思います。


あとがき

今回は、エクセルVBAの属人化対策方法について紹介しました。

頑張ってエクセルVBAを学習してプログラムを作れるようになった人にとっては「まずは、動くプログラム作成」を目指すと思います。

もし、動くプログラムが作れるようになった後に「自分が作ったプログラム」を見直す機会があれば「このプログラムは利用者にやさしいかな?」と考えてみるといいかもしれません。

「ちょっとやさしく」を意識するだけでも「先回りした使いやすいプログラムができるようになる」と思います。

「このやり方おもしろい」と思った方は、試してみてください。

-Excel VBA
-, , ,