
自分の仕事をマクロに置き換える方法を紹介
数日前に会社でVBAの勉強会を実施した際 雑談の中で以下の様な質問をいただいたことがありました。

VBA自体は分かってきたのですが自分の仕事の中で使う事が出来ません

マクロを書く前に何かやる事がありますか?具体的に教えてください
これは勉強会が終わってからも定期的にいただく質問でした。皆さん悩んでいる様です。
実際私も初心者の時に随分悩みました。今教える立場になって皆さんの気持ちがすごく分かります。

結論としては考えを整理するために作業フローを作ります。
作業フローをつくるのは自分の仕事とマクロを結びつける為です。
こんな事が出来るようになります。
- 見た目で仕事を細分化できる
- 小さい範囲でコードを考える事ができる
- 作業が通るのか確認する事ができる

Enjoy Excel
もう1つ仕事をVBAに置き換える事が出来ない理由があります。それは勉強が足りてない事です。
後半ではマクロを教えてくれる人を紹介します。

結論
まずは結論です。
作業フローを書きましょう
その後作業フローをコードに置き換えましょう。
これで自分の仕事をマクロに置き換える事が出来ます。
理由
TOTALで楽をする為です。
いきなりコードを書くのは慣れてないと難しいです。
それ以前に初心者だと仕事が定まってないけどやりたい事が先行しているケースが大半です。
一旦立ち止まって整理する事が必要です。頭の中を整理する為にも台本が必要だという考え方です。
手間が増えたように感じるが・・・
作業フローを作る。まずは「面倒だな」と思ってしまいます。確かに「面倒」です。
「面倒」な作業ですが実は意識してないだけで皆様毎日頭の中でやっている事なんですよね。
「〇〇という結論に向けてどうやってデータ整理しようか?」って考えて色々作業しますよね。
このような選択や判断を伴う処理は意識してないだけで日々の生活で頻繁に起きている事です。
よって日常やっている事を書き出すだけと考えると楽に考える事が出来る様になります。
やる事としては考えた手順を書き出してあとは線で繋ぐだけです。
これでコードを書く為のカンペを作ります。フローをもとにコードを書くとすごく楽にコードを書く事ができます。
TOTALで作業時間も少なくなり楽が出来るという建付けです。
フローチャート
以下の様に図形と線から構成されています。図形の中や外に文字が居てそれぞれの工程を説明しています。

やる事は仕事を書き出して整理する事です
例として画像を用意しましたがフローチャートを書く事が仕事ではないです。
やらないといけない事は「仕事を書き出して整理する」という事です。
そのためのツールの1つがフローチャートです。
一連の仕事をマクロに置き換える事が出来ないので仕事を細分化して考えやすくするのが目的です。
見た目で作業を細分化する為にやっているので他のツールで代用出来ればそれでもOKです。
ここではフローチャートを使って仕事をマクロに置き換える方法を解説していきます。

フローチャートを書いてみる
ここから実際に作業をしていきます。
いきなりフローを書くと失敗します
最初からフローを書こうとする方はおそらく失敗します。
理由は仕事が整理されてないのでフローを書こうと思っても書けないです。
ここでいきなりフローを書く事ができる人は作業が整理出来ている人です。
フローを書く前にやることがあります。「箇条書きで仕事を書き出す」という事をしましょう。
マッピングツールなどを活用するのも良いです
私はマッピングツールで作業を整理しながらフローチャートまで書いてしまう事もあります。
このアプリケーションは無料で使える範囲も広く手軽に情報を整理出来ます。

仕事を書き出す
まずは紙に仕事を書き出しましょう。以下順番で進めるとフローチャートを書く為の準備が完了します。
これで小さい範囲でコードを考える事ができる様になります。
この時点ではVBAのコードまでイメージ出来てなくても大丈夫です。
まずは手作業で作りたいデータを用意する事が出来るのかを考えて作業してみましょう。
- 1やりたい事の始点と終点を決める
作業を始める前のデータの状態と最終的に欲しいデータの状態を決めます。
- 2始点と終点の間で必要な作業を書き出す
終点のデータにするまでにやらなければいけない作業を出来るだけ細かく書き出します。
- 3作業とエクセルのコマンドを結びつける
書き出した作業を実行する事が出来るエクセルのコマンドを見つけて結びつけます。
- 4書き出した作業をまとめるor分解する
エクセルのコマンドが無い時は作業をまとめたり分解してエクセルのコマンドに作業を合わせます。
- 5書き出した作業を実際の作業順番に並べ替える
作業とエクセルのコマンドが紐付いたら作業順を考えます。
作業順を変える事で作業とエクセルのコマンドが合わなくなれば再度3、4をやり直します。
- 6最終確認
一通り確認します。問題無ければフローチャートを書きます。
ここまで出来たらフローチャートを書きます。フローが成立するかどうかを確認します。

Excelのコマンドに合わせて自分の仕事を最適な大きさに切り分けるのが難しそうです。

まずは手作業でデータを完成させましょう。
その際に作業の記録を取るとタイムラインで説明した作業が出来てしまいます。

頭で考えるより自分で手を動かした方が簡単な気がしてきました。
タイムラインに書いてある事を頭の中でやると大変です。
コツとしては自分で作業をやってみると情報が整理出来るようになります。
仲間が居たら一緒に作業をするとより良いパスを見つけられるかもしれませんね。
フローチャートの作り方
作り方と書きましたが様式、方法はどんな書き方でも良いです。最低限のルールだけ書き出しておきます。
- 図形ごとに処理を分ける。
- 上下方向は上から下に進む。例外は矢印で示す。
- 左右方向は左から右に進む。複雑になってくると右側に処理が膨らむ事になる。
・・・等々ある程度の決まりはありますがあまり気にしなくても大丈夫です。
図形の形も出来るだけ決めてほしいですが最初はなんでも良いです。
PCでやらなくても紙に適当に図形を決めて線でつなぐという感じでOK。
仕事の流れが整理出来ればフォーマットは関係ないです。
コードが分からない中でも作業できるのか
やってみると分かるのですがこんな事も考えられます。
勉強を始めた頃の私はこんな事を考えていました。

作業が行き詰まるような気がしています・・・

・・・確かにそうです。でもこの作業を行う事で分かることがあります。

でも分からない事は分からないままですね・・・
Aさんが指摘している通りです。分からない事への対処法はもう少し後で解説します。
より客観的に見る事ができます
作業を書き出したりフローチャートを作る事で自分の作業を客観的に見る事が出来ます。
頭の中だとポジティブに考えてしまうので思い先行で作業が繋がっているところがあります。
それを見直すことが出来るのは結構重要な事なんですよ。
フローチャートが作れると作業が通るのか確認する事ができます。
図を書いて線が引けない、つながらないという事はそもそも作業としてどこか悪いところがあります。
先ずはコードの事は後回しにして手作業でどうやって作業するのかを考えフローチャートを作りましょう。
これが出来ればひとまず道筋が出来るので頭の中が少しクリアになり気持ちも楽になります。
コードが分からなくてもフローチャートを作る一番の理由
少し話を戻します。まだしっかり回収出来てない疑問点があります。
この問題です。ここで回答を提示します。
エクセルの手入力やアイコンで出来る作業はVBAで再現出来る

手作業でフローが通るのであればイコールでマクロでもフローは通るという事です。
ちょっとキツい言い方ですが「現状分からないだけ」です。
調べればかなりの確率でコードはあります。もれなくフローチャートはコードに置き換える事が出来ます。
フローチャートをコードに置き換える
フローチャートが書けたら仕事の半分は終わりです。
「このブロックの処理に対応するコードは〇〇で」という様に作業をコードに置き換えるだけです。
分からないコードは調べるか勉強するしかないです。
調べられない時は聞きましょう。分かる人はココに居ます。
あきらめないで出来るところまでやる
「他のアプリケーションを使う」こともありますので全部エクセルで事が済むわけではないです。
勉強が進めばエクセル以外のアプリケーションとも連携出来ますが最初は難しいです。
このような場合はあきらめも必要かもしれません。

ただしエクセル内で出来る作業はコードが用意されています。
頑張って探してコードを書いてみてください。
フローチャートをもとに作業をしてみる
1つ事例をたてて作業をしてみましょう。
やりたい事の始点と終点を決める
B列の回答によってC列に文字を入力するという簡単な仕様です。最終的な結論はこのようになります。
- B列に回答があればC列は「済」と記入
- B列に回答が無ければC列は「空欄」と記入
最初はC列は全て空欄です。B列の入力の有無でC列に文字を入力したいと考えています。

作業とエクセルのコマンドを結びつける
要点だけ説明します。
色々試行錯誤した結果以下3つの機能が必要だという事が分ったのでコードを探して用意しました。
- 作業範囲を決める為に最終行を認識する為のコードを用意
- B列の入力状況により処理を分けたいので条件分岐(Ifステートメント)を用意
- 全ての行の情報を確認したいので繰り返し処理(For~Nextステートメント)を用意
やりたい事とVBAのコードを結び付ける作業です。
この3つが今回のコードのポイントになります。これを見つける為に作業を書き出しています。
フローチャート作成
冒頭で説明したフローチャートはこのコードを作る為に用意したものです。
コードを用意
後はフローチャートや作業を書き出したメモを見ながらコードを書くだけです。
作業が通る事も分かっています。
コードの内容は単純で8行目でリストの最終行を確認。11行目から20行目までがループになります。
13~19行目のIfステートメントでは値の有無により隣のセル(3列目のセル)に文字を表示させています。
Sub sample()
'変数の定義
Dim r As Long
Dim lr As Long
'変数 lr に最終行の値を代入
lr = Cells(Rows.Count, 1).End(xlUp).Row
'変数 r が 2~lr までループ
For r = 2 To lr
'指定のセルが空欄だったら・・・
If Cells(r, 2) = "" Then
'If文で指定したセルの隣のセルに指定の文字列を入力
Cells(r, 3) = "済"
Else
'If文で指定したセルの隣のセルに指定の文字を入力
Cells(r, 3) = "空欄"
End If
Next
End Sub
簡単ですが事例を使って一連の作業を見ていただきました。
どうしても分からない時は分かる人に聞く
コードを調べても分からない事があります。調べて見つけても「読めない」事も沢山あります。
分からない時は分かる人に聞きましょう。ここに分かる人が居ます。
この方はジモティーを使ってマクロを教えています。会話させていただきましたが非常に丁寧に教えてくれました。
オンラインですがブログをもとに対話型で講義をされるので距離を感じず非常に分かりやすかったです。
オンラインという事は全国どこでもサービスが受けられます。是非会話してみてください。
画像の後にリンクを用意しておきます。

まとめ
自分の仕事をVBAに置き換えるにはフローチャートを使うのが近道という記事でした。
最初はフローチャートを書く事自体が負荷になってしまい時間も工数もかかるかもしれません。
しかし続けていくと「フローチャート書いた方が速いな」と思える時が来ます。継続してみてください。