仕事が遅い人のお助け部屋~マクロで簡単!リスト作成編~

6月も末、4月から働き始めた新卒の皆さんはいかがお過ごしでしょうか?
まだ研修中の方もいるでしょうし、早速現場に駆り出されている方もいると思います。

新社会人が増えたこともあってか、以前上げた記事「仕事が遅い人のお助け部屋~資料作成編~」を見てくれる方がうっすら増え始めました。
新入社員の皆さんだけではないと思いますが、やっぱり「仕事が遅い」という悩みを抱える方は多いのだなあと考えております。

そこで今回は「仕事が遅い人のお助け部屋」第二弾
「コピペで役立つマクロの紹介」です!

「マクロなんて専門的すぎて絶対無理」と思った方、たくさんいますよね?
ご安心ください、私も専門知識どころか基礎知識も0です。

簡単なマクロなら、調べながらやればだれでも使えるし、それだけで作業が楽になります。
ただ、ネットには情報が多すぎて、初心者すぎるとまず検索の仕方がわかりません。なんのワードで検索すれば目的のマクロが出てくるの??ってとこで躓いてしまうんです。
実際にやりながら、なんとなく調べ方が分かるように記事にしたら、同じような完全初心者の役に立つかな、と思いまとめてみることにしました。

ちなみに、理解しておいてほしいこととして、マクロは失敗するとデータを破損してしまう可能性があるので、使うときは必ず元データのバックアップを取ってから試してみてくださいね。
この記事はあくまで、とんでもない初心者が調べながらマクロを使ってみて、役に立った内容をまとめているだけのものです。お仕事で実際に使ってみて何かが起きても、私は対処法をお伝えできません!自己責任です。
本当の意味で活用したい方はしっかり基礎から勉強されることをお勧めします。
とはいえ私は活用の結果1週間の作業時間(特にチェックの時間!)が大幅に減ったので、抵抗がない方は、しっかりバックアップを取ってからモノは試しでチャレンジしてみてください!

マクロを導入する目的

私は書類仕事が嫌いです。同じ作業を繰り返すのは無駄だなと感じてしまうし、その割に間違えたらまずいのでチェックに時間がかかって、業務時間を圧迫するからです。
せっかく働くなら繰り返しの作業はできるだけ短く済ませて、考える仕事にチャレンジしたいですよね。初心者はマクロでそこまで複雑なことはできませんが、簡単な「転記」のマクロを使って、面倒くさい一覧表の作成をミスなく、早く進めることができます。完全な自動化ではなく、あくまで手間の削減、サポートです。
数多あるわかりやすい有識者の皆様のサイトを紹介しつつ、実際初心者がそれらを見ながら実践した際に、初心者目線だと理解が難しかった部分をまとめていきます。

本当にマクロを使いこなす人なら、1から10まですべての作業を自動化してしまえると思いますが、初心者にはハードルが高すぎますから……できる範囲で効率化をしましょう!

マクロ初心者 これだけは理解しておこう

細かいことは全く覚える必要ありませんが、コードは要するに、エクセルでの動きを文字に起こして指定してるだけだということを覚えておきましょう。
マクロは、エクセルの作業で普段やっていること、例えばコピーしてペースト、カーソルを移動、セルを選択、などの動作を文字にしただけ。そうじゃないもっと難しいのもたぶんあるんだろうと思いますが、少なくとも初心者が扱えるのはそこまで!そういう目でコードを見てみると、少し取っつきやすくなります。

マクロを作る

さて、それでは実際にマクロを作ります。
何度も言うように私はコードを深く理解していないので、ただただ自分が作業した時に参考になったサイトさんを紹介しつつ、初心者目線で補足をしていきます。
https://tonari-it.com/excel-vba-invoice/
⇒請求書を作成するマクロを紹介してくれているタカハシさんという方のサイトです。
めちゃくちゃわかりやすい!!初心者でもこの通りにやっていけば全く問題なくマクロが組めます。しかも実践で使えます。

ただ、普段の業務の中でこのサイトを1から全部追いかけながら体裁を整えていくのは個人的になかなかしんどかったです。
なので今回は「請求書や申請書などの決まったフォーマットを一覧リストに落とし込む」パターンに絞って、↑のサイトのマクロを自分なりにかみ砕くとき、超初心者にとって必要だった情報を下記していきます。

① VBAの開き方

https://www.atmarkit.co.jp/ait/articles/2009/07/news021.html
こちらのサイトさんが分かりやすいです。設定してVBAを使用できるようにしましょう。


② 転記の基本


タカハシさんのサイトで、基本のSubプロシージャ(コードが書いてあるやつね)が紹介されています。
これを見る時に理解しておかないといけないのは以下の5点。

セルの指定の仕方

https://www.tipsfound.com/vba/07023
こちらのサイトを読んでおきましょう。「セルを選択する」の項目で紹介されている
Cells(①,②)という書き方が今回のマクロで使用されています。
① の数字が増えるほど縦軸(列)が下に進み、②の数字が増えるほど横軸(行)の数字が右に進みます。

・1行目の「Sub 請求書作成()」という箇所
⇒VBAでマクロを書くときは必ずSubから始めてください。その後ろの「請求書作成」はマクロのタイトル(実行するときに使う)で、その後に必ず「()」を付けます。
定型で覚えておきましょう。
・.Valueの意味
セルの指定をするとき、Cells(〇,〇).Valueと書かれていると思いますが、この「.Value」を付けることによって、セルそのものではなくセルの値(入力されている内容)を対象にすることを宣言しています。これ付けないと転記できないから気を付けてね。

・=の使い方
⇒このマクロの中での「=」は「=の右側を=の左側に代入(転記)する」ってこと。
正直、これが理解できればとりあえず目標達成。
たとえば4行目の「Sheet2.Cells(21, 1).Value = Sheet1.Cells(2, 1).Value」は
「Sheet1の上から2行目、横1列目(A2)のセルの内容を、Sheet2の上から21行目、横1列目(A21)のセルに転記します」っていう作業をコードにしているのです。

・18行目の「End Sub」
⇒最後にからなずこれを書かないとエラーになります。定型文。

細かいことを理解する必要はなく、上記の内容が把握できたらタカハシさんのサイトのコードをそのままコピペして、シート名とセルの指定だけ、自分の使いたい内容に編集していけば大丈夫。
決まったセルから決まったセルへの転記だけであれば、これで実行できます。
請求書から一覧を作る場合、転記元を請求書にし、転記先を一覧に設定して、指定した要素が指定の場所に転記されていくように組んでいけばOKです。

ただ、リスト一覧に請求書の内容をたくさん入力していく場合、入力されている次の行に自動的に入力されるようにしたい……
これも有識者の方が説明してくれているのでなんとかなります。

・最終行を取得する方法
.End(xlUp).Rowというコードを使います。
このコードの意味は理解しておいた方がいいので以下の大変分かりやすいサイトを参照ください。
https://excel-ubara.com/excelvba1/EXCELVBA318.html

つまり、このコードはエクセルの実作業で行うCtrl+↓をしてからCtrl+↑をしますよ、という指示ということですね。そうすることで入力されている最終行を指定しています。

じゃあこれを実際どうコードに入れ込むのよ、となるのですが、これも有識者のサイトを参考にします。(全部それ)
https://kokodane.com/macro71.htm
全部理解しなくて大丈夫です。上のコードがどう使われてるかだけわかったら、今回の目的は達成。後はさっき覚えた転記と組み合わせて、やりたいことは完遂できるので。
こちらのサイトさんで紹介されているコードを参考にします。

1行目、Sub tenki()はタイトルが違うだけでさっきと意味は同じ。
Dim nyuuryoku As Range, MasterRange As Range
⇒Dimはなにかを宣言するときに頭につける文字、としておきましょう。(本当はどうか知らないけど、それで特に問題なかった)
Range は、これは「セルの範囲」ですよという意味。
「nyuuryoku」と「MasterRange」は変数、つまりユーザーが任意でつけていいものです。なんでもいいです。わかりやすいものにしましょう。
ここでは「nyuuryoku」と「MasterRange」は「セルの範囲」ですよ、と宣言しているわけです。
(Asはイコールのニュアンスです。)

今、「nyuuryoku」と「MasterRange」は「セルの範囲」と定義されましたが、サイトにもある通り実際どこのセルなの?というのが謎の状態なので、Setを使ってそれを指定します。
Set nyuuryoku = Worksheets(“Inputdata”).Cells(2, 3)
⇒「nyuuryoku」の「セルの範囲」はWorksheets(“Inputdata”)のCells(2, 3)だよ、と指定しました。

Set MasterRange = Worksheets(“Mdata”).Cells(Rows.Count,2).End(xlUp).Offset(1, 0)
⇒ここで.End(xlUp)が登場!「MasterRange」の「セルの範囲」はWorksheets(“Mdata”)のCells(Rows.Count, 2)(※つまり.2行め)の入力されている一番下の行を取る、という意味になります。
OffsetはCellsの考え方を応用して、指定されているセルから指定の数カーソルを動かすイメージで考えてください。
.Offset(1, 0)であれば、下に1マス進みます。
.Offset(1, 1) であれば、下に1マス、右に1マス進みます。

MasterRange.Value = nyuuryoku.Value
⇒上で指定した「nyuuryoku.Value」の値を同じく指定した「MasterRange」の値に転記します。
これで、常に一番下の行に転記されるようになるはず……!

MasterRange.Offset(0, 1).Value = nyuuryoku.Offset(1, 0).Value
⇒これであとは要領としてはさっきの転記と同じ。
「nyuuryoku」で指定したセルから下に一つずれたセルの値を「MasterRange」で指定したセルから右に一つずれたセルの値に転記します、という指定です。
あとは自分の必要な内容にカスタマイズして、転記したい箇所をどんどん書いていくだけ!
最後に先ほどと同様「End Sub」を付ければコードは完成です!

こちらのサイトさんも相当わかりやすいので補足いらないレベルかもしれませんが、初めて見て初心者すぎて難しかった部分は、初心者ならではの目線ということでかみ砕いてみました。
(何より、初心者すぎると検索方法が分からなくてこのサイトにたどり着けないんです……)

④マクロを実行するボタンをつける

https://office-hack.com/excel/macro-button/
こちらのサイトさんが分かりやすいです。
これができたらあとはボタンを押下すれば自動で必要な情報を転記してくれるようになります。
このマクロを使用して転記を行うようにすれば、請求書がたくさんあっても、請求書全体を指定シートにコピペしてして⇒ボタンを押すという2ステップで表に追記していけますね!
コピペミスのリスクがだいぶ減ります。

これが余裕になってきたら、請求書をまとめて全部自動で処理したり、一覧表の方から請求書を自動で作ったりももちろん可能です。
このくらいまでは私もできたので初心者でも大丈夫。ただ、長くなりすぎるので今回はここまで。(私も説明できるほど理解できていないので……)ここに書いたことが理解できたあたりから検索が早くなったので、一旦これをやった皆さんなら、やりたいことを実現するための検索の仕方も当たりがつけられるようになっているのではないかと思います。

さいごに

完全なる初心者がピンポイントでマクロを使うためのいろいろの紹介でした。
ほとんど他のサイトの紹介じゃん!って感じなのですが……初心者は理解できるサイトを探すのに一番時間がかかるなあと思ったためまとめさせていただきました。
どのサイトもすごくわかりやすいんですが、やってるうちにわからないところが出てくると、別のサイトで補完していかないといけなくなるので……
ですが、こんな感じで、初心者で何もわからなくてもネットがあればマクロは使えます。
使いこなせば使いこなすほど作業効率がどんどん上がると思いますので、ぜひ調べながらチャレンジしてみてくださいね!