エクセルマクロの挫折しない勉強法や仕事で使いこなすコツを徹底解説!
講師の寺澤さんはこれまでの20年間マクロを使って様々な業務を効率化させるなど、数多くの社内表彰を受けてきました。例えば、数十万行の元データから分析用データを毎週作成する作業。人の手だと1週間かけても終わらない作業ですが、マクロを使うと30分程で完成してしまいます。さらに自ら社内講座も主催、全くマクロを触ったことがない数百人を指導し、満足度98%と人気を博しています。近著『4時間のエクセル仕事は20秒で終わる』では、そのエッセンスを余すところなく紹介しています。
本連載では、エクセルマクロを仕事で使うための本当に必要な知識だけを、できるだけわかりやすく説明していきます。

このワンパターンでOK!「シートごとコピー」するExcelマクロをマスターPhoto: Adobe Stock

それでは、実際に他のエクセルファイルからシートをコピーするマクロを書いていきます。

今回は例として、「コピー元.xlsx」の中の「売上」シートを「コピー先.xlsm」ファイルの一番左へシートごとコピーさせてみましょう。

今回のマクロはこれまでよりも少し複雑です。ただ、他のエクセルファイルを開くマクロはほぼすべての状況で再利用できます。一度きちんと動くマクロを作りさえすれば、コピペで対応できます。ですから作り方を事細かに覚える必要はありません。「細部までちゃんと覚えないと!」と身構えずに、肩の力を抜いて読んでください。

マクロは次のように書きます。

最初に変数を3つ宣言しておきます。それぞれの意味もコメントで書いておきましょう。

Dim a  ’ コピー先ファイルの名前
Dim b_path  ’ コピー元ファイルのパス
Dim b  ’ コピー元ファイルの名前

マクロが入っているコピー先ファイルの名前は「ThisWorkbook.Name」を使って取得します。「このブック名」という意味です。それを変数aに入れます。

a = ThisWorkbook.Name

それでは、順を追って説明していきます。

コピー元のファイル(コピーしたいデータがあるファイル)を選択

「コピー元」を開きます。「Application.GetOpenFilename」を使うと、ファイルを選択するウィンドウが出ます。

このワンパターンでOK!「シートごとコピー」するExcelマクロをマスター

そこで選んだファイルのパスが変数「b_path」に入るように=(イコール)で結んでマクロを記載します。

b_path = Application.GetOpenFilename

選択したファイルを開く

「Workbooks.Open b_path」と記載するとb_pathに入っているファイルパス先のファイルが開きます。

Workbooks.Open b_path

この2行だけだと、ファイルを選ばずにキャンセルを押したり、ウィンドウを閉じたりすると「Workbooks.Open b_path」で開くファイルを指定できずエラーが出ます。

それを回避するため「b_path」に何も入らなかった場合にメッセージを出して処理を止めるようにIfで条件分岐させます。少しマクロは長くなりますがエラーは出ないようにしておきましょう。

もし「b_path」が「False(=空の状態)」ならメッセージボックスで「処理を中断しました」と出し「Exit Sub(実行終了)」させます。そうでなければ「Workbooks.Open b_path」でコピー先ファイルを開き処理を進めます。

b_path = Application.GetOpenFilename
 If b_path = False Then
  MsgBox "処理を中断しました"
  Exit Sub
 Else
  Workbooks.Open b_path
 End If