サイトアイコン マメBlog

進捗管理を自動化するエクセルの作り方【設定の方法や注意点を解説】

 

エクセルで進捗管理をしているものの、毎日の更新作業に疲弊していませんか?

 

「フォーマットの修正」「データの転記」「進捗率の計算」など、時間のかかる作業に頭を悩ませている方も多いはずです。

実は、エクセルVBAを活用することで進捗管理業務の効率を格段にアップさせることができるんです。

 

私は勤めていた会社のエクセル業務の効率をアップさせるVBAを何個も提案してきました。

 

その中で、

進捗管理の効率をアップさせるためのVBAが全体の5割を占めていた

と思います。

 

それくらい、進捗管理の効率化が必要とされているということです。

 

この記事では、

プログラミング未経験でも実践できる具体的な実装方法から、現場での活用事例までを

図解を交えてわかりやすく解説します。

 

今日から使える時短テクニックを、ぜひマスターしてください。

 

また、この記事で紹介しているような『VBA開発に役立つ情報を配信するメルマガ』をスタートさせました。

「VBA学習用の教材」「エクセル作業自動化のアイデア」を無料でゲットすることができます。

 

 

併せてチェックしてみてください。

 

進捗管理でエクセルVBAを使う3つのメリット

 

エクセルVBAを使った進捗管理には、大きく分けて3つの素晴らしいメリットがあります。順番に見ていきましょう。

 

作業時間が従来の1/3に短縮できる具体例

最も大きな効果が表れるのが作業時間の短縮です。

 

たとえば、これまで30分かけていた日次の進捗更新作業がたった10分で終わるようになります。

どうしてそんなに短縮できるのでしょうか?

それは、

データの入力からレポート作成まで一連の作業を自動化できるから

です。

 

具体的には、

進捗データを入力すると、自動的に進捗率が計算され、グラフが更新され、関係者への報告メールまで自動送信される

このような処理を1クリックで処理できるようになります。

 

人為的ミスを98%削減した実績データ

手作業による入力ミスやコピー&ペーストのミスは、業務の質を大きく下げてしまいます。

 

私が転勤になったばかりの職場では、

エクセルの操作は新人の仕事!単純な作業は定年間近の社員の仕事!

みたいな風潮がありました。

 

なので、

入力ミス、印刷ミスがめちゃくちゃ多い

という最悪な状態。

 

こんな状態を改善するためにいろんなエクセル業務にVBAを導入。

すると、人為的ミス(ヒューマンエラー)が大幅に削減され、結果的にエクセル作業の効率が2倍、3倍にアップすことになりました。

 

具体的には、

VBAによって入力規則やチェック機能を設定し、明らかな誤入力を防止できる仕組みを導入。

これだけでも効果的です。

 

部署間の情報共有がリアルタイムで実現

従来の進捗管理では、各部署がバラバラのファイルで管理していたため、最新状況の把握に時間がかかっていました。

VBAを使えば、共有サーバー上の1つのファイルで一元管理が可能になります。

データを入力すると、自動的に全体の進捗状況が更新され、誰でもリアルタイムで進捗を確認できるようになります。

 

「あの部署は今どこまで進んでいるんだろう?」

という疑問もすぐに解決します。

 

進捗管理をエクセルVBAで自動化する手順と実装方法

 

具体的な実装方法について説明していきましょう。

VBAの知識がなくても大丈夫です。基本的な手順をしっかり押さえれば、誰でも実装できます。

 

VBAコードの基本設定と実装ステップ

まずは、VBAの基本的な設定方法から説明しましょう。

 

エクセルの開発タブから、マクロを記録するだけでも、シンプルな自動化は実現できます。

 

こんな感じ

 

「マクロの記録」ボタンを押下して、マクロ化したい処理を実行。

処理が完了したら「マクロの停止」ボタンを押下。

 

たったこれだけで業務内容に合わせたマクロの設定が可能です。

 

「マクロの記録」を使えば、

「データの並び替え」や「フィルター操作」のような単純な作業をたった3分でマクロ化

できるんですよ。

初めてVBAを使う方は、マクロの記録機能から始めることをおすすめします。

 

操作を記録して、その後コードを少しずつカスタマイズしていけば、プログラミングの知識がなくても徐々にレベルアップできます。

 

進捗状況を自動集計するマクロの作り方

進捗管理で最も重要なのがデータの自動集計機能です。

 

以下のような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を作りたい!別シートにテキストを転記するVBAを設定したい!!こんな問題を解決します。 この記事では、ワークシートを指定するVBAの設定方法を詳しく解説しています。 エクセルVBAでつまずく最大の理由は、「ワークシートの指定方法」の理解不足です。 私もVBA学習を始めて、最初の難関だったのが「ワークシートの指定」でした。「Dim As 〇〇ってなに?」「シートを指定しなければVBAって作れないの?」いろんな疑問を感じながら勉強していました。。。 「シートの指定なんて簡単でし...
VBAでワークシートを指定する基本パターン!初心者でも使いこなせる方法とは? - mamemametochan.com

 

最終行を取得する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で行数をカウントするやり方」ではカウント関数の使い方が詳しく解説されています。

 

 1行目から最終行までの数値を集計したい。1行目から最終行までの範囲を罫線で囲いたい。こんな処理は最終行を取得するVBAを使って自動化できます。 日々変化するデータを効率的に処理するには、最終行の取得が必須のスキルです。「最終行が取得できない」「エラーが発生する」といった悩みを抱える方も多いのではないでしょうか? 最終行の取得には複数の方法があり、状況に応じて最適な手法を選ぶことでこれらの問題を解決できます。 本記事では、Count関数を中心とした最終行取得の基本から大規模データ処理...
【VBA】最終行を取得する方法~Count関数の使い方をサンプル事例を使って解説~ - mamemametochan.com

 

 

別シートにテキストを転記する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を使って、別シートに情報を自動反映させるマクロを作成する!です。 別シートに情報を転記するマクロの概要がこちら 一覧表に入力している大量の情報を、ボタンをクリックするだけで別シートの好きな場所(セル)に転記することが可能。 この別シートに情報を転記するマクロはシート名を取得する方法さえ理解すれば簡単に作成することができます。この記事では画像や動画を...
【エクセルマクロ】別シートに情報を自動反映させるマクロの作り方・導入方法を紹介 - mamemametochan.com

 

 

罫線を引く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の基礎的な考え方から一覧表の行や列が増減しても自動的に罫線の位置を調整できるVBAの作り方を詳しくご紹介しています。 VBA未経験の方でも理解しやすいように実際にVBAを作成する画面やコピペして使えるサンプルコードを使って解説しているので、罫線を引く処理を自動化してエクセル業務に効率をアップさせたい!罫線を整備して常にキレイな一覧表を維持したい!と考える方は是非最後までチェックしてください。&n...
【VBAで罫線を引く】最終行を自動判別するマクロの導入方法を紹介 - mamemametochan.com

 

 

「進捗管理VBA」は上記のVBAで構成されています。

1つ1つ組み合わせて作ってみてください。

 

関連記事「進捗管理VBA」ではサンプルとして紹介している進捗管理VBAが設定されたエクセルファイルをダウンロードすることができます。

 

いろんな方法で活用できますので是非チェックしてみてください。

 

 

 

よくある失敗例と解決策・改善ポイント

 

VBAによる進捗管理の自動化は、素晴らしい効果が期待できる一方でいくつかの注意点があります。

ここでは、私が実際に遭遇した失敗例とその対策についてご紹介します。

 

初心者がつまずきやすい3つの実装ミス

最もよくある失敗が、エラーハンドリングの不備です。

 

例えば、データ入力時に想定外の値が入力された場合、VBAが強制終了してしまうことがあります。

 

これを防ぐためには、

On Errorステートメントを使用してエラーが発生した際の処理を適切に設定

する必要があります。

 

 

2つ目の失敗例は、変数の宣言漏れです。

Optionステートメントを適切に設定していないと、思わぬバグの原因になります。

最初に「Option Explicit」を記述し、すべての変数を明示的に宣言することがおすすめです。

 

3つ目は、セル範囲の指定ミスです。

データ量が変動する場合、固定範囲を指定してしまうと、新しいデータを取りこぼしてしまう可能性があります。

Range(“A1”).End(xlDown)のように、動的な範囲指定を使用しましょう。

 

データ量増加時のパフォーマンス対策

進捗管理を続けていくと、必ずデータ量が増えていきます。

 

疲れ果てた人

データ量が増えすぎて10万行以上になってしまうことも。。。

この場合、VBAの実行処理に5分以上かかることだってあり得ます。

 

このような問題の対策として、以下の方法が効果的です。

まず、Application.ScreenUpdatingをFalseに設定し、画面更新を停止させます。これだけでも処理速度が2倍以上速くなります。

また、配列を使用してデータをメモリ上で処理し、最後にまとめてシートに書き出す方法も有効です。

これらの方法を導入したところ、処理時間に5分以上かかっていたものが30秒以内で完了するようになることもあります。

 

関連記事「VBA処理を最適化手法で劇的に効率アップする方法」では

VBAの処理を高速化する方法を解説

しています。

 

 頑張ってVBAを設定したけど処理速度が遅くて使い物にならない。。。 これってめちゃくちゃショックですよね!特に、VBAについて何も知らない上司から「処理おそっ!!」って言われたら腹立ちませんか? このような「VBAの処理速度が遅い」問題を解決します。 私は電気設備の保守管理会社に勤めていた頃、5000行以上ある電気設備の台帳を編集する、1万件以上ある電気設備の取替要求書を作成するという作業をしていました。 不良データは赤色に変更して、取替計画があるデータは緑色に変更して、、修繕したデ...
VBAの処理速度が遅い!?実は簡単!最新の最適化手法で劇的に効率アップする方法 - mamemametochan.com

 

併せてチェックしてみてください。

 

セキュリティ面での注意点と対処方法

VBAを使用する際、セキュリティ面での配慮も重要で、

特に気をつけたいのがパスワードやアクセス権限の管理

です。

 

社外秘情報を含む進捗データを扱う場合、単純にシートの保護だけでは不十分です。

対策として、ユーザーごとに編集権限を設定し、VBAで権限チェックを行う仕組みを実装することをおすすめします。

 

また、重要なデータの変更履歴を自動で記録する機能も、セキュリティ対策として有効です。

 

まとめ:進捗管理エクセルVBAで業務改善を実現するポイント

 

ここまで、VBAを使った進捗管理の実装方法について詳しく解説してきました。

 

最後に、進捗管理VBA導入の際、抑えておきたい3つのポイントをご紹介します。

 

1つ目は、「シンプルに始める」ことです。

最初から完璧なシステムを目指すのではなく、まずは日常的な単純作業の自動化から始めることがおすすめです。

 

2つ目は、「エラーへの対応を慎重に」です。

想定外の操作や入力に対して、適切なエラーメッセージを表示し、システムが止まらない仕組みを作ることが重要です。

 

3つ目は、「段階的な機能追加」です。

ユーザーの声を聞きながら、必要な機能を少しずつ追加していくことで、使いやすいシステムに育てていけます。

 

VBAによる進捗管理の自動化は、決して難しいものではありません。

この記事で紹介した方法を参考に、ぜひ皆さんの職場でも業務改善にチャレンジしてみてください。

 

作業効率の向上だけでなく、より創造的な業務に時間を使えるようになるはずです。

 

この記事を読んで、

「VBAやってみたい!」「いろんなエクセル業務の自動化に挑戦したい!!」

と感じてくれた方はエクセルVBAの情報を定期的に配信しているメルマガへの登録を検討してみてください。

 

エクセル業務で苦しんだ私の経験を元に、

実務で役立つVBA情報をお届けしています。

 

 

 

この記事が、あなたの業務効率化への第一歩となることを願っています。

モバイルバージョンを終了