進捗管理を自動化するエクセルの作り方【設定の方法や注意点を解説】
エクセルで進捗管理をしているものの、毎日の更新作業に疲弊していませんか?
「フォーマットの修正」「データの転記」「進捗率の計算」など、時間のかかる作業に頭を悩ませている方も多いはずです。
実は、エクセルVBAを活用することで進捗管理業務の効率を格段にアップさせることができるんです。
私は勤めていた会社のエクセル業務の効率をアップさせるVBAを何個も提案してきました。
その中で、
進捗管理の効率をアップさせるためのVBAが全体の5割を占めていた
と思います。
それくらい、進捗管理の効率化が必要とされているということです。
この記事では、
プログラミング未経験でも実践できる具体的な実装方法から、現場での活用事例まで、図解
を交えてわかりやすく解説します。
今日から使える時短テクニックを、ぜひマスターしてください。
目次
進捗管理でエクセルVBAを使う3つのメリット
エクセルVBAを使った進捗管理には、大きく分けて3つの素晴らしいメリットがあります。順番に見ていきましょう。
作業時間が従来の1/3に短縮できる具体例
最も大きな効果が表れるのが作業時間の短縮です。
たとえば、これまで30分かけていた日次の進捗更新作業がたった10分で終わるようになります。
どうしてそんなに短縮できるのでしょうか?
それは、
データの入力からレポート作成まで一連の作業を自動化できるから
です。
具体的には、
進捗データを入力すると、自動的に進捗率が計算され、グラフが更新され、関係者への報告メールまで自動送信される
このような処理を1クリックで処理できるようになります。
人為的ミスを98%削減した実績データ
手作業による入力ミスやコピー&ペーストのミスは、業務の質を大きく下げてしまいます。
私が転勤になったばかりの職場では、
エクセルの操作は新人の仕事!単純な作業は定年間近の社員の仕事!
みたいな風潮がありました。
なので、
入力ミス、印刷ミスがめちゃくちゃ多い
という最悪な状態。
こんな状態を改善するためにいろんなエクセル業務にVBAを導入。
すると、人為的ミス(ヒューマンエラー)が大幅に削減され、結果的にエクセル作業の効率が2倍、3倍にアップすことになりました。
具体的には、
VBAによって入力規則やチェック機能を設定し、明らかな誤入力を防止できる仕組みを導入。
これだけでも効果的です。
部署間の情報共有がリアルタイムで実現
従来の進捗管理では、各部署がバラバラのファイルで管理していたため、最新状況の把握に時間がかかっていました。
VBAを使えば、共有サーバー上の1つのファイルで一元管理が可能になります。
データを入力すると、自動的に全体の進捗状況が更新され、誰でもリアルタイムで進捗を確認できるようになります。
「あの部署は今どこまで進んでいるんだろう?」
という疑問もすぐに解決します。
進捗管理をエクセルVBAで自動化する手順と実装方法
具体的な実装方法について説明していきましょう。
VBAの知識がなくても大丈夫です。基本的な手順をしっかり押さえれば、誰でも実装できます。
VBAコードの基本設定と実装ステップ
まずは、VBAの基本的な設定方法から説明しましょう。
エクセルの開発タブから、マクロを記録するだけでも、シンプルな自動化は実現できます。
こんな感じ
「マクロの記録」ボタンを押下して、マクロ化したい処理を実行。
処理が完了したら「マクロの停止」ボタンを押下。
たったこれだけで業務内容に合わせたマクロの設定が可能です。
「マクロの記録」を使えば、
「データの並び替え」や「フィルター操作」のような単純な作業をたった3分でマクロ化
できるんですよ。
初めてVBAを使う方は、マクロの記録機能から始めることをおすすめします。
操作を記録して、その後コードを少しずつカスタマイズしていけば、プログラミングの知識がなくても徐々にレベルアップできます。
進捗状況を自動集計するマクロの作り方
進捗管理で最も重要なのがデータの自動集計機能です。
以下のようなVBAを組み合わせることで自動集計機能VBAを設定できます。
- 行数をカウントするVAB
- 処理を繰り返すVBA
- 数値の合計を集計するVBA
- 一覧表にピッタリの罫線を引く
個別で考えると難しいVBAが使われていないことがほとんどなので、
VBA初心者の方は1つ1つの処理を個別に設定
してみてください。
アラート機能付きの進捗管理テンプレート
進捗に遅れが生じた際、素早く対応することが重要です。
そこで役立つのが、アラート機能です。
例えば、
「期日が近づいてきたらセルの色を変更する」「期日を過ぎるとメッセージボックスを表示させる」など
VBAでこのような処理を自動化することで進捗遅れの問題を最小限に抑えることができます。
「気づいたときには手遅れ」という事態を防ぎ、プロジェクトを成功に導くことができるんです。
進捗管理エクセルの具体的な活用事例と成功例
ここからは勤めていた職場に導入した進捗管理VBAをご紹介していきます。
導入したVBAの内容は
担当者ごとにシートを作成し、各シートの重要な項目だけを「案件進捗シート」に集約する
というものです。
イメージとしてはこんな感じ
設定したVBAを実行するだけで、下記の一覧表を一瞬で作成することが可能
複数ある「個人」シートの情報を「案件進捗」シートに集約します。
進捗管理VBAの使い方
1.個人シートを編集
メインとなる作業は、個人シートの編集です。
案件が増えた場合、行を増やして編集を行います。
行の増減はVBAで自動的に対応することができるので、100件になろうが200件になろうが問題ありません。
2.案件進捗シートの編集
案件進捗シートのA1セルをクリックする。
たったこれだけ!!
「個人」シートの情報を集約した一覧表を一瞬で作成することができます。
進捗管理VBAの作り方
1.VBAを起動
様式を確定したら、VBAを起動させコードを書いていきます。
上記画面ではすでにコードが表示されていますが、最初にVBAを起動させたときは空白になっているはずです。
2.標準モジュールを作成
プログラムは、「Module」という場所に書いていきます。
上記のように「Module」を作成してください。
3.ModuleにVBAを記入
作成した「Module」にコードを書いていきます。
4.使われているVBA
シートを区別するVBA
Sub 案件進捗()
''''①シートの名前を指定
Dim Ash As Worksheet
Dim Bsh As Worksheet
Set Ash = ThisWorkbook.Worksheets("案件進捗")
Set Bsh = ThisWorkbook.Worksheets("Aさん")
上記は、シートを区別するVBAの抜粋です。
今回はシート名を使って区別していますが、
「インデックス番号でシートを区別」「シートを切替えて区別」など
いろんな区別方法があります。
関連記事「VBAでワークシートを指定する基本パターン」ではシートを区別するVBAを詳しく解説しています。
最終行を取得するVBA
Sub 案件進捗()
'''「案件進捗」シートのB列目の最終行を取得
ga = Ash.Cells(Rows.Count, 2).End(xlUp).Row
'''BシートからNシートのBT列目の最終行を取得
gb = Bsh.Cells(Rows.Count, 2).End(xlUp).Row
gc = Csh.Cells(Rows.Count, 2).End(xlUp).Row
上記は、各シートの最終行を取得するVBAの抜粋です。
このVBAを使うことで、
変化する進捗状況にも柔軟に対応
することができます。
関連記事「VBAで行数をカウントするやり方」ではカウント関数の使い方が詳しく解説されています。
別シートにテキストを転記するVBA
Sub 案件進捗()
'''③「Aさん」シートから「案件進捗」シートに情報を転記
For i = 6 To gb
ga = Ash.Cells(Rows.Count, 2).End(xlUp).Row
For j = 2 To 18
Ash.Cells(ga + 1, j) = Bsh.Cells(i, j)
Next j
Next i
'''④「Bさん」シートから「案件進捗」シートに情報を転記
For i = 6 To gc
ga = Ash.Cells(Rows.Count, 2).End(xlUp).Row
For j = 2 To 18
Ash.Cells(ga + 1, j) = Csh.Cells(i, j)
Next j
Next i
上記は、別シートにテキストを転記するVBAの抜粋です。
繰り返し処理(For~Next)を使って
「個人」シートの情報を「案件進捗」シートに転記される
という内容です。
「i」が行数のカウント変数、「j」が列数のカウント変数を示しています。
関連記事「別シートに情報を自動反映させるマクロ」では転記VABの導入方法を詳しく解説しています。
罫線を引くVBA
Sub 案件進捗()
'''⑫「案件進捗」シートに罫線を引く
ga = Ash.Cells(Rows.Count, 2).End(xlUp).Row
Ash.Range(Ash.Cells(5, 2), Ash.Cells(ga, 18)).Borders.LineStyle = xlContinuous
Ash.Range(Ash.Cells(5, 2), Ash.Cells(ga, 18)).Borders(xlInsideVertical).LineStyle = xlContinuous
Ash.Range(Ash.Cells(5, 2), Ash.Cells(ga, 18)).Borders(xlInsideHorizontal).LineStyle = xlContinuous
上記は、一覧表に罫線を引くVBAの抜粋です。
行数や列数が変化する一覧表に対してキレイな罫線を一瞬で引くことができます。
関連記事「VBAで罫線を引く方法」では、最終行を自動判別して一覧表に罫線を引くVBAの導入方法が詳しく解説しています。
「進捗管理VBA」は上記のVBAで構成されています。
1つ1つ組み合わせて作ってみてください。
関連記事「進捗管理VBA」ではサンプルとして紹介している進捗管理VBAが設定されたエクセルファイルをダウンロードすることができます。
- ダウンロードしたエクセルをそのまま活用する
- 設定されている様式をアレンジして活用する
- 設定されているコードをVBA学習用として活用する
いろんな方法で活用できますので是非チェックしてみてください。
よくある失敗例と解決策・改善ポイント
VBAによる進捗管理の自動化は、素晴らしい効果が期待できる一方でいくつかの注意点があります。
ここでは、私が実際に遭遇した失敗例とその対策についてご紹介します。
初心者がつまずきやすい3つの実装ミス
最もよくある失敗が、エラーハンドリングの不備です。
例えば、データ入力時に想定外の値が入力された場合、VBAが強制終了してしまうことがあります。
これを防ぐためには、
On Errorステートメントを使用してエラーが発生した際の処理を適切に設定
する必要があります。
2つ目の失敗例は、変数の宣言漏れです。
Optionステートメントを適切に設定していないと、思わぬバグの原因になります。
最初に「Option Explicit」を記述し、すべての変数を明示的に宣言することがおすすめです。
3つ目は、セル範囲の指定ミスです。
データ量が変動する場合、固定範囲を指定してしまうと、新しいデータを取りこぼしてしまう可能性があります。
Range(“A1").End(xlDown)のように、動的な範囲指定を使用しましょう。
データ量増加時のパフォーマンス対策
進捗管理を続けていくと、必ずデータ量が増えていきます。
この場合、VBAの実行処理に5分以上かかることだってあり得ます。
このような問題の対策として、以下の方法が効果的です。
まず、Application.ScreenUpdatingをFalseに設定し、画面更新を停止させます。これだけでも処理速度が2倍以上速くなります。
また、配列を使用してデータをメモリ上で処理し、最後にまとめてシートに書き出す方法も有効です。
これらの方法を導入したところ、処理時間に5分以上かかっていたものが30秒以内で完了するようになることもあります。
セキュリティ面での注意点と対処方法
VBAを使用する際、セキュリティ面での配慮も重要で、
特に気をつけたいのがパスワードやアクセス権限の管理
です。
社外秘情報を含む進捗データを扱う場合、単純にシートの保護だけでは不十分です。
対策として、ユーザーごとに編集権限を設定し、VBAで権限チェックを行う仕組みを実装することをおすすめします。
また、重要なデータの変更履歴を自動で記録する機能も、セキュリティ対策として有効です。
まとめ:進捗管理エクセルVBAで業務改善を実現するポイント
ここまで、VBAを使った進捗管理の実装方法について詳しく解説してきました。
最後に、進捗管理VBA導入の際、抑えておきたい3つのポイントをご紹介します。
1つ目は、「シンプルに始める」ことです。
最初から完璧なシステムを目指すのではなく、まずは日常的な単純作業の自動化から始めることがおすすめです。
2つ目は、「エラーへの対応を慎重に」です。
想定外の操作や入力に対して、適切なエラーメッセージを表示し、システムが止まらない仕組みを作ることが重要です。
3つ目は、「段階的な機能追加」です。
ユーザーの声を聞きながら、必要な機能を少しずつ追加していくことで、使いやすいシステムに育てていけます。
VBAによる進捗管理の自動化は、決して難しいものではありません。
この記事で紹介した方法を参考に、ぜひ皆さんの職場でも業務改善にチャレンジしてみてください。
作業効率の向上だけでなく、より創造的な業務に時間を使えるようになるはずです。
この記事を読んで、
「VBAやってみたい!」「いろんなエクセル業務の自動化に挑戦したい!!」
と感じてくれた方はエクセルVBAの情報を定期的に配信しているメルマガへの登録を検討してみてください。
エクセル業務で苦しんだ私の経験を元に、
実務で役立つVBA情報をお届けしています。
この記事が、あなたの業務効率化への第一歩となることを願っています。
ディスカッション
コメント一覧
まだ、コメントがありません