1.マクロを記録する
ここではExcel 2000で説明しますが、基本的にExcel 2002,2003でも変わりません。
まずマクロを記録したいワークシートを用意してください。
今回はSheet1に作成してある表(図1)を、Sheet2にコピーするマクロを作ります。
図1
コピーを実行する前に、画面上部にあるメニューバーから「ツール」→「マクロ」→「新しいマクロの記録」を順に選んでください。
マクロの記録ダイアログボックス(図2)が表示されますので、マクロ名が”Macro1”に、マクロの保存先が”作業中のブック”になっていることを確認してください。
図2
マクロ名は好きな名前に変更できますが、ここではMacro1のままにします。
マクロの保存先も、現在開いているブックに保存したほうが都合がいいので、そのままにしておきます。
確認したら「OK」ボタンを押してください。
これで、ここから先のワークシート上の操作はすべてマクロとして記録されます。
画面上に「記録終了」の■(停止)ボタンが表示されていることを確認してください。
図3
表示されない場合は、メニューバーから「表示」→「ツールバー」→「記録終了」で表示させてください。
マクロ記録を終了させる場合は、この■(停止)ボタンを押します。
では、表のコピーとSheet2へのペースト(貼り付け)を実行します。
ここではSheet2にペーストすることにしましょう。
まずSheet1のA1からC6までを選択(青く反転させる)してください。
次に「編集」→「コピー」を実行します。
そしてSheet2を開いて、「編集」→「貼り付け」を実行します。
これで終わりです。■(停止)ボタンを押してください。
本当にマクロが記録されているか、確認してみましょう。
図4
Alt + F8 キーでダイアログボックス(図4)が表示されたら、「編集」ボタンを押してみてください。
今回のマクロが記述されたコードウィンドウ(図5)が表示されたと思います。
もし今回の操作で余分な操作を実行していれば、それもそのまま記録されているはずです。
先頭に'(アポストロフィ)がついた行(緑の文字)は、コメントになります。マクロの実行にはまったく関係ありませんので、自由にマクロの説明を書くことができます。
後で”何を実行するマクロだったかな”と忘れそうな場合は、積極的にコメントをつけたほうがいいでしょう。
図5
2.記録したマクロを実行してみる
今度は記録できたこのマクロを実行してみましょう。
現在表示されているコードウィンドウ(VBEともいいます)のツールバー左端にがあるので、それを押してください。
するとワークシートが表示されます。このようにワークシートとマクロのコードウィンドウは自由に切り替えることができます。
次に今コピー&ペーストで作成された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とした場合は、シート全体を表しますのでワークシート以外のシートの指定も可能になります(例えばグラフシートなど)。
しかしワークシートを指定する場合は、SheetsとWorkSheetsどちらで記述しても同じ結果になります。
詳細は office TANAKA をご覧ください
5.ショートカットキーを割り当てる
今度は作成したマクロを、マクロのメニューからではなく直接キーボードから実行できるようにしましょう。
それにはマクロにショートカットキーを割り当てるのが簡単です。
もう一度 Alt + F8キー でマクロのダイアログボックスを表示させてください。
図6
最下段の「オプション」ボタンを押して、ショートカットキー欄に適当なアルファベット(ここではa)を入力します。(横にCtrl+と表示されているので、Ctrlキーとアルファベットキーを同時に押したときに実行されます)
「OK」ボタンを押して、マクロのダイアログボックスに戻ったら、いったん「キャンセル」ボタンを押して終了してください。
再度コピー先をクリアした状態で、Ctrl + a を実行してみてください。
簡単にマクロが実行されたと思います。
ここで1つ注意しておきたいのは、すでにExcelでは「Ctrl + a 」に”すべて選択”のショートカット機能を割り当てていましたので、今回のマクロの割り当てにより、既定のショートカットの機能が置き換わってしまうということです。
なるべく何も割り当てられていないキーか、または使用する頻度の低いキーを割り当てたほうが無難です。