オフィス・ブールは、Excel全般について皆さまのお仕事をサポートします。
オフィス・ブールのロゴ
 代 表   : 末永 尚登(スエナガ ヒサト)
 E-mail  : suenaga@officeboole.com
 携 帯  : 070-4087-0025
 TEL/FAX    : 095-893-6090







Excelマクロを作ってみよう


目 次
  1. マクロを記録する
  2. 記録したマクロを実行してみる
  3. 記録したマクロを修正する
  4. 修正マクロを実行する
  5. ショートカットキーを割り当てる
  6. 最後に
Excelマクロは、初心者の方でも簡単に作ることができます。
あなたもマクロを作ってみませんか?
結構普段Excelを使いこなしている方でも、”マクロは使ったことがない”という人は多いようです。
でも一度体験すると、”こんな便利な機能をなぜ利用しなかったのだろう?”と思われること請け合いです。
自分用にコード(VBA)を手直し(カスタマイズ)すれば、さらに使いやすくすることもできます。
論より証拠。では、まず始めましょう!

1.マクロを記録する

ここではExcel 2000で説明しますが、基本的にExcel 2002,2003でも変わりません。

まずマクロを記録したいワークシートを用意してください。
今回はSheet1に作成してある表(図1)を、Sheet2にコピーするマクロを作ります。

図1
図1

コピーを実行する前に、画面上部にあるメニューバーから「ツール」→「マクロ」→「新しいマクロの記録」を順に選んでください。
マクロの記録ダイアログボックス(図2)が表示されますので、マクロ名が”Macro1”に、マクロの保存先が”作業中のブック”になっていることを確認してください。

図2
図2

マクロ名は好きな名前に変更できますが、ここではMacro1のままにします。
マクロの保存先も、現在開いているブックに保存したほうが都合がいいので、そのままにしておきます。
確認したら「OK」ボタンを押してください。
これで、ここから先のワークシート上の操作はすべてマクロとして記録されます。
画面上に「記録終了」の■(停止)ボタンが表示されていることを確認してください。

図3
図3

表示されない場合は、メニューバーから「表示」→「ツールバー」→「記録終了」で表示させてください。 マクロ記録を終了させる場合は、この■(停止)ボタンを押します。

では、表のコピーとSheet2へのペースト(貼り付け)を実行します。
ここではSheet2にペーストすることにしましょう。
まずSheet1のA1からC6までを選択(青く反転させる)してください。
次に「編集」→「コピー」を実行します。
そしてSheet2を開いて、「編集」→「貼り付け」を実行します。
これで終わりです。■(停止)ボタンを押してください。

本当にマクロが記録されているか、確認してみましょう。

図4
図4

Alt + F8 キーでダイアログボックス(図4)が表示されたら、「編集」ボタンを押してみてください。
今回のマクロが記述されたコードウィンドウ(図5)が表示されたと思います。
もし今回の操作で余分な操作を実行していれば、それもそのまま記録されているはずです。
先頭に'(アポストロフィ)がついた行(緑の文字)は、コメントになります。マクロの実行にはまったく関係ありませんので、自由にマクロの説明を書くことができます。
後で”何を実行するマクロだったかな”と忘れそうな場合は、積極的にコメントをつけたほうがいいでしょう。

図5
図5

2.記録したマクロを実行してみる

今度は記録できたこのマクロを実行してみましょう。
現在表示されているコードウィンドウ(VBEともいいます)のツールバー左端にExcelマークがあるので、それを押してください。
するとワークシートが表示されます。このようにワークシートとマクロのコードウィンドウは自由に切り替えることができます。

次に今コピー&ペーストで作成されたSheet2の表をいったん削除しておきましょう。
Sheet2の表を選択した状態で、「編集」→「クリア」→「すべて」を選びます。これでSheet2の表は消去されました。

ではマクロを実行します。
Sheet1を開いた状態にして、Alt + F8 キーでダイアログボックスが表示されたら、マクロ名の一覧からMacro1を選択し(今回は1つしか登録されていないので、すでに選択状態になっていると思います)、「実行」ボタンを押してください。

どうでしたか?マクロは実行されましたか?
もしうまくいかなかった場合は、マクロを記録するときに余計な操作が入ったか(図2のサンプルと比べてみてください)、Sheet1を開かないで実行した可能性があります。よく確かめてみましょう。

あるいはSheet2のアクティブセル(黒い枠がついたセル)がA1以外のところになっていれば、そこに表が作成されているかもしれません。必ずA1に表の左隅がくるように、後で修正をしてみましょう。

3.記録したマクロを修正する

今度は、先ほど記録したマクロに少し冗長な部分があるので、それを修正してみましょう。
今回の操作で次のようなマクロのコード(VBA)が記録されていると思います。

Sub Macro1()

  Range("A1:C6").Select
  Selection.Copy
  Sheets("Sheet2").Select
  ActiveSheet.Paste

End Sub

ここでSub Macro1()End Subで囲まれた部分がマクロのコードになります。

  • コピー元の範囲を選択 → Range("A1:C6").Select
  • 選択された部分をコピー → Selection.Copy
  • Sheet2を選択 → Sheets("Sheet2").Select
  • コピー先にペースト → ActiveSheet.Paste

と操作の通りにコードが記録されています。
コピー&ペーストをしただけなのに、コードが4行にもなり、少し見にくいですね。
ではこのコードをもう少しスッキリさせましょう。

サンプルでは1行目のRange("A1:C6").Selectで、コピー元の表を選択して、それからSelection.Copyで選択した範囲をコピーしています。
これは次のように1行目と2行目をドッキングさせれば、1行にまとめることができます。
Range("A1:C6").Copy

同様に3行目のSheets("Sheet2").Selectでコピー先のシートを選択して、ActiveSheet.Pasteでアクティブシートにペースト(貼り付け)しています。
これも3行目と4行目を1つにできそうです。
次のように修正してみてください。
Sheets("Sheet2").Paste

まとめると次のようになりますね。

【修正1】
Range("A1:C6").Copy
Sheets("Sheet2").Paste

4.修正マクロを実行する

それではもう一度マクロを実行してみましょう。
Sheet1を開いておき、Alt + F8キー でマクロのダイアログボックスを表示して、「実行」キーを押してください。
うまくコピーできましたか?
最初は4行だったコードが2行になり、だいぶスッキリと見やすくなりました。

ただこのコードでは、このマクロを実行する前に、必ずSheet1を開いておかなければ正常にコピーされません。 なぜならRange("A1:C6").Copyには、どのシートの範囲"A1:C6"かをExcelに知らせていないので、Excelは現在開いているシート上の範囲"A1:C6"と解釈するためです。
どのシートからでも正しくSheet1の表をコピーしてくるためには、範囲"A1:C6"の前にシート名を付けます。 →Sheets("Sheet1").Range("A1:C6").Copy
こうすればOKです。もうどのシートを開いた状態でも、このマクロを実行することができます。

【修正2】
Sheets("Sheet1").Range("A1:C6").Copy
Sheets("Sheet2").Paste

さらに、今はSheet2のアクティブセルの位置にペースト(貼付け)するようになっていますが、もしペースト先を固定させたければ、次のように修正します。
例えば必ずセルA1に貼り付けるようにするには、次のように変更してください。

【修正3】
Sheets("Sheet1").Range("A1:C6").Copy
Sheets("Sheet2").Range("A1").Select
ActiveSheet.Paste

また、余談ですが貼り付ける際にPasteメソッドではなく、PasteSpecialメソッドを使えば、指定された範囲にいっきにデータを貼り付けることができます。
メソッドというのは、特定のオブジェクト(ワークシートやセルなど)を操作する命令のことです。

【別解1】
Sheets("Sheet1").Range("A1:C6").Copy
Sheets("Sheet2").Range("A1").PasteSpecial

さらに、1行で済ませようと思えば、【別解2】のような書き方も可能です。
VBAのヘルプに書いてありますが、もともとCopyメソッドにはコピー先を指定できるようになっていますので、1行で書くこともできるわけです。
VBAを勉強したい人は、ヘルプを見て”美しい”コードを研究してみてください。
コードの書き方は、人それぞれですし、状況によっても異なります。正解は1つではありません。
目的の処理に最もふさわしいと思われるコードを見つけてください。

【別解2】
Sheets("Sheet1").Range("A1:C6").Copy Sheets("Sheet2").Range("A1")

さあ、それでは先ほどコピー&ペーストで作成されたSheet2の表をいったん削除して、もう一度Alt + F8キー でマクロのダイアログボックスを表示してから、「実行」を選んでMacro1を実行してみてください。
意図したとおりに動作しましたか?

【SheetsとWorkSheetsの違いについて】
なお、ここではシートを指定する場合に、マクロ記録で自動的に記録されたSheets("Sheet1")の表現を使いましたが、WorkSheets("Sheet1")としてもまったく同じに動きます。
Sheetsとした場合は、シート全体を表しますのでワークシート以外のシートの指定も可能になります(例えばグラフシートなど)。
しかしワークシートを指定する場合は、SheetsWorkSheetsどちらで記述しても同じ結果になります。
詳細は office TANAKA をご覧ください

5.ショートカットキーを割り当てる

今度は作成したマクロを、マクロのメニューからではなく直接キーボードから実行できるようにしましょう。
それにはマクロにショートカットキーを割り当てるのが簡単です。
もう一度 Alt + F8キー でマクロのダイアログボックスを表示させてください。

図6
図6

最下段の「オプション」ボタンを押して、ショートカットキー欄に適当なアルファベット(ここではa)を入力します。(横にCtrl+と表示されているので、Ctrlキーとアルファベットキーを同時に押したときに実行されます)
「OK」ボタンを押して、マクロのダイアログボックスに戻ったら、いったん「キャンセル」ボタンを押して終了してください。
再度コピー先をクリアした状態で、Ctrl + a を実行してみてください。
簡単にマクロが実行されたと思います。

ここで1つ注意しておきたいのは、すでにExcelでは「Ctrl + a 」に”すべて選択”のショートカット機能を割り当てていましたので、今回のマクロの割り当てにより、既定のショートカットの機能が置き換わってしまうということです。
なるべく何も割り当てられていないキーか、または使用する頻度の低いキーを割り当てたほうが無難です。

6.最後に

これでマクロ(VBA)の体験は終わりです。
”意外と簡単だな”と思われた方、”やっぱり結構難しいな”と思われた方、いろいろいらっしゃると思います。
これをきっかけに自分で作ってみようという方は、市販のテキストがたくさんありますので、ご自分で勉強なさってみてください。 難しいと思われた方も、マクロの便利さは実感されたと思います。

ここではマクロ(VBA)の修正を説明するために、そのままでも問題なく動作するコードをあえて修正してみました。
しかし実際の現場では、どうしてもマクロ記録だけでは解決できない場面に、ときどき遭遇することがきっとあると思います。
もしこれから仕事でどうしても処理の自動化を検討する必要がありましたら、ご連絡いただければお客様のお力になりたいと思います。是非よろしくお願いいたします。



ページのトップに戻る

 


office boole banner 長崎県長崎市 Office Boole 末永 尚登
E-mail: suenaga@officeboole.com   TEL/FAX: 095-893-6090