自動記録によるEXCELマクロの作成
【手順1】メニューバーの“ツール(T)”をクリックし、表示されるメニュー中の“マクロ(M)”メニュ
ーの“新しいマクロの記録(R)...”をクリックする。すると次図の“マクロの記録”ダイアログ
ボックスが表示される。
【手順2】“マクロ名(M):”は変えても変えなくてもよいが、“マクロの保存先(I):”は当面「作業中
のブック」から変えないことを勧める。“ショートカット キー(K): Ctrl+ ”の欄に小文字でeを記入
する。このeは、作成したマクロを実行するためのものであり、Ctrl+e で実行することを意味
する。同じEXCELブックで二つ以上のマクロを作成する場合は、2番目以降のマクロにはfとかg
などを使わなければならない。最初はeのみを入力してOKボタンを押せばよい。
【手順3】右図の“記録終了”ツールボックスが表示される。このボックスは2つの
ボタンを含んでおり、左側が「記録終了」ボタンで、右側が「相対参照」ボタ
ンである。説明は後でするので、とりあえず「相対参照」ボタンをクリックす
る。「相対参照」ボタンをクリックするとボタンが押し込まれたよう見えるの
で、その状態を確認しておく必要がある。「相対参照」ボタンをもう一度クリ
ックすると「絶対参照」に戻る。
|
 |
【手順4】マクロとして記録すべき作業をEXCEL上で実施する。
【手順5】記録作業が終了したとき、“記録終了”ツールボックスの左側の「記録終了」ボタンをクリ
ックする。
相対参照ボタンがクリックされないときは、絶対参照となる。両者の違いは、記録される作業にお
いて、作業の対象となるセルが絶対番地になるか相対番地になるかである。絶対番地とは、EXCEL
操作で普通に使っているA1やB10などのことである。絶対参照マクロの場合は、記録された作業は
常に同じ番地に対して実施される。一方、相対番地とはマクロの記録が開始されるときにアクティ
ブであったセルからの位置のことであり、相対参照マクロの場合は、当初アクティブであったセル
の場所によって作業対象のセルが変わることになる。したがって、相対参照マクロを作成する場
合は、当初アクティブセルの位置が非常に重要となる。
EXCELマクロの作成方法は簡単なものであるが、手順4での記録作業が重要である。マクロとは、同
様なパターの作業を繰り返し行わなければならないとき、1回分の作業をマクロ化しておけば、以下の
作業はマクロを必要回数実行することで完了するものである。
例題【表の並べ替え】
右の表のデータのグラフを描く問題を
考えてみよう。表としての見易さはこの
形式がよいが、このままではグラフを描
くことができない。
グラフを描くためには、データを一列
に並べ直さなければならない。
一列に並べ直す手順として
@ 各行の間に3行の空白行を挿入し、
下図のようにする。
|
A |
B |
C |
1 |
|
T |
U |
2 |
1977 |
59.80 |
60.51 |
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
1978 |
62.73 |
63.39 |
A セルC2のデータをセルB3へ、D2をB4
へ、E2をB5へ移動すれば、1年分の
並べ直しが完了する。この移動をす
べての年数について実施すれば、全
データの並べ直しが行える。
| |
実質GDP(1990年価格)四半期データ(兆円)
|
A |
B |
C |
D |
E |
1 |
|
T |
U |
V |
W |
2 |
1977 |
59.80 |
60.51 |
63.57 |
70.60 |
3 |
1978 |
62.73 |
63.39 |
67.10 |
74.68 |
4 |
1979 |
66.18 |
67.46 |
70.86 |
78.10 |
5 |
1980 |
68.91 |
69.35 |
72.20 |
80.09 |
6 |
1981 |
71.10 |
71.53 |
74.81 |
82.32 |
7 |
1982 |
72.82 |
73.93 |
77.09 |
85.09 |
8 |
1983 |
74.72 |
75.22 |
79.07 |
87.09 |
9 |
1984 |
77.31 |
78.65 |
82.11 |
90.41 |
10 |
1985 |
80.58 |
81.77 |
85.54 |
95.06 |
11 |
1986 |
83.08 |
84.00 |
88.25 |
97.55 |
12 |
1987 |
86.48 |
86.45 |
91.94 |
102.68 |
13 |
1988 |
92.16 |
91.75 |
98.26 |
108.15 |
14 |
1989 |
97.37 |
95.56 |
102.71 |
113.55 |
15 |
1990 |
101.30 |
101.31 |
108.22 |
119.15 |
16 |
1991 |
107.36 |
105.27 |
111.63 |
122.06 |
17 |
1992 |
109.95 |
106.35 |
112.38 |
122.25 |
18 |
1993 |
109.68 |
106.61 |
113.18 |
122.81 |
19 |
1994 |
110.15 |
107.09 |
114.33 |
123.62 |
20 |
1995 |
110.72 |
108.36 |
115.36 |
127.03 |
21 |
1996 |
116.11 |
111.58 |
119.44 |
130.70 |
|
この作業を検討してみると、3行空白行を挿入し、3つのデータを移動するという作業を繰り返して
いることに気付くであろう。このような繰り返し作業こそがマクロの威力が発揮できるものである。
すなわち、1年分を並べ直す作業をマクロ化すれば、年数分だけマクロを実行するだけでよいことにな
る。以下ではここでの問題を例としてマクロの作成方法を説明する。
(1) マクロ作成の始めに検討すべきことは、絶対参照にするか相対参照にするかである。ここでの例の
場合は、空白行を空ける場所とデータを移動する場所が毎回変わる。したがって、相対参照マクロを
作成することになる。
(2) 相対参照マクロを作成する場合、マクロの記録を開始するときにアクティブにしておくセルの位置
が重要になる。記録開始時にアクティブなセルの位置が‘原点’になり、以降の操作の位置は原点か
らの位置で記録される。原点はどこでもかまわないが、できれば意味のある場所がよいであろう。こ
こでは、セルB2を原点にする(すなわちセルB2をクリックしアクティブにする)。
(3) 前述の手順1〜3を実施する。
(4) 原点(B2)の下に3行(第3〜5行)の空白行を挿入する。
(5) セルC2のデータをセルB3へ、D2をB4へ、E2をB5へ移動する。この操作は、原点の右隣のデータを原
点直下のセルに移動。原点の2つ右隣のデータを原点の2つ下のセルに移動。原点の3つ右隣のデー
タを原点の3つ下のセルに移動。と記録される。
(6) 以上で目的のマクロの作成は終了しているが、作成したマクロを実行するときに原点とすべき位置
は、(5)で最後に移動したセルの直下(B6)であるので、セルB6をアクティブにしてマクロの記録を
終了すれば、マクロの実行の度に原点をクリックする手間が省ける。そこで、セルB6をクリックし、
手順5を実施する。
Ctrl+eを必要回数キーイン(作成したマクロを実行)することで、データの並べ替えが完了する。
作成したマクロを確認する
“ツール(T)”をクリックし、表示されるメニュー中の“マクロ(M)”メニューの“マクロ(M)...”をク
リックする。すると右図の“マクロ”ダイアログボックスが表示される。
ここでは、作成されているマクロがMacro1一つだけであるので、作業対象のマクロを選択する必要がな
い。“実行”ボタンをクリックすれば、Macro1が実行され、Ctrl+eをキーインするのと同じことにな
る。“削除”ボタンをクリックすれば、Macro1が削除される。“オプション”ボタンをクリックし、表
示される“マクロオプション”ダイアログボックスでショートカットキーの文字(ここではe)を変更
することができる。
“編集”ボタンをクリックすれば、Microsoft Visual Basicのウインドウが開き、作成したマクロ
(Macro1)の中身を見ることができるだけでなく、編集することも可能となる。表示されるMacro1の中身
は次ページに示すようにVisual Basicで記述されたプログラムである。
@ Sub Macro1()
A '
B ' Macro1 Macro
C ' マクロ記録日 : 2000/5/9 ユーザー名 : 経済学部
D '
E ' Keyboard Shortcut: Ctrl+e
F '
G ActiveCell.Offset(1, 0).Range("A1:A3").Select
H Selection.EntireRow.Insert
I ActiveCell.Offset(-1, 1).Range("A1").Select
J Selection.Cut Destination:=ActiveCell.Offset(1, -1).Range("A1")
K ActiveCell.Offset(0, 1).Range("A1").Select
L Selection.Cut Destination:=ActiveCell.Offset(2, -2).Range("A1")
M ActiveCell.Offset(0, 1).Range("A1").Select
N Selection.Cut Destination:=ActiveCell.Offset(3, -3).Range("A1")
O ActiveCell.Offset(4, -3).Range("A1").Select
P End Sub
このプログラムは一見非常に複雑そうに見えるが、パターンを理解してしまえばそれほど難しいもので
はない。
@行は、Macro1というマクロの先頭行を意味している。
A行〜F行の先頭にアポストロフィ(')が付いた行は注釈行(メモ行)であり、消去したとしても影
響のないものである。注釈行は、プログラムを分かり易くするために利用される。
P行は、このマクロの最終行を意味する決まり文句である。
このマクロの本文はG行〜O行に記述されているものである。
GIKMO行の最初の記述ActiveCell.Offsetは先に述べたアクティブセル(原点)を移動させる命令
である。この記述に続く(1, 0)などは、移動先を意味しており、最初の数値が上下位置(下が+で上が
−)、後ろの数値が左右位置(右が+で左が−)を表す。
G行のActiveCell.Offset(1, 0)はそれまでのアクティブセルを直ぐ下のセルに移動させることを意味
する。
O行のActiveCell.Offset(4, -3)は下へ4行、左へ3列行ったところにアクティブセルを移動させる命
令となる。
IKMO行の.Range("A1").Selectは単純なアクティブセルの移動であり、G行の
.Range("A1:A3").Selectは移動先をA1としたときにA1からA3までを範囲指定させる命令である。
H行のSelection.EntireRow.Insertは行挿入の命令である。
JLN行のSelection.Cut Destination:=ActiveCell.Offset(*, *).Range("A1")は、そのときのアクテ
ィブセルのデータを(*, *)の位置のセルに移動させる命令である。
各命令が並べ替えのEXCEL操作に対応していることを確認しなさい。
EXCELのいろいろな操作がマクロ上でどのように記述されるかは、マクロを作成して確認すればよいで
あろう。
Microsoft Visual Basicのウインドウ上で表示されているマクロ本文を書き直せば、マクロは直ちに修
正される。したがって、マクロを修正するときは、Microsoft Visual Basicのウインドウ上でマクロ本
文を修正した後、Microsoft Visual Basicのウインドウを閉じればよいことになる。
|