Excel VBA (マクロ) Training Center 、はExcel VBA (マクロ) プログラミングしたい方々の為の情報交換サイトです。
当サイトでは、Excel 2007 を利用しております。
|
|
2-1 : 1-2 マクロの記録の解説 |
1-2 で作成したマクロの記録を解説していきましょう。
次のサンプルファイル1-2を開いてください
サンプルBook0102
(保存後、ブックを開いて キーボードのAlt + F11 を押してください。)
このサンプルで行った処理は
1.A1−A10をコピーする
2.C1にコピーしたものを貼り付ける
3.C1を降順に並び替える
というものでした。
すると、次のように表示されます。

右側の部分を取り出したものが以下の部分です。(赤数字は行数を意味します)
01:Sub Macro1()
02:'
03:' Macro1 Macro
04:' マクロ記録日 : 2010/9/20 ユーザー名 : pup1
05:'
06:
07:'
08: Range("A1:A10").Select
09: Selection.Copy
10: Range("C1").Select
11: ActiveSheet.Paste
12: Range("C1").Select
13: Application.CutCopyMode = False
14: Range("C1:C10").Sort Key1:=Range("C1"), Order1:=xlDescending, Header:= _
15: xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
16: SortMethod:=xlPinYin, DataOption1:=xlSortNormal
17:End Sub
早速 解説していきます。
01行目が Sub ○○ () ではじまっています。そして 17行目は End Sub となっています。これは 一般的なプログラムのルールです。 Excel VBAの場合、プロシージャーが どこからはじまり、どこで終わる を意味しています。そして各プロシージャーには任意の名前が付けられます。
この例の場合 プロシージャー名は Macro1 となり、それは01行目から17行目まで という意味になります。このプロシージャーの中に 命令(ステートメント)を書き込むことになります。
02-05,07行目は '(シングル クォーテーション) で始まっています。
' から右に書かれている部分は コメント と呼ばれて、プログラムの命令には一切反映されません。この ' の影響範囲はその行の ' の右側のみです。
※ 左側に書かれている部分はコメントではなく本文なので、プログラムに反映されます。
何のために使うのかというと、 将来のVBA編集者のためへのメッセージ と考えてください。というのも、完璧なプログラムは初回から作れませんので、修正を繰り返しながらより良く改善するのが常だからです。将来見直したときに どれが何を意味するのか? をその都度考えていては時間の無駄ですよね。だから、将来の誰か(自分を含む)にコメントを通じて教えてあげる という発想です。
08-09 行目を見てみます。
この部分が 1.A1−A10をコピーする に対応することとなります。
08: Range("A1:A10").Select
09: Selection.Copy
08行の Range("A1:A10").Select が 範囲A1−A10 を選択しています。そして、
09行の Selection.Copy が 選択されている部分を Copy と命令されています。だから1.A1−A10をコピーする に対応する ということになったのです。
プログラムは英語を元に作成されていることが多いです。ですので、英語を元に Range()は範囲を意味し、Select は選択するを意味し、Copy はコピーする という意味だと想定すると意外とあっているものなんです。
さらに言うと、プロシージャーの名前は 自由に付けられるのですが、英語で名付ける癖をつけておくことをオススメします。(パソコンは英語の方がエラーが少ないため)
次に 10-11 行目を見てみます。
この部分が 2.C1にコピーしたものを貼り付ける に対応することとなります。
10行の Range("C1").Select が 範囲C1 を選択しています。そして、
11行の ActiveSheet.Paste が ActiveSheet に Paste と命令されています。だから 今選んでいるシートに Paste(貼付け)する ということになります。
このように考えると、
○○.△△(○○ に △△ しなさい) という命令構造が分かってきます。つまり、命令対象 と 具体的命令 の組み合わせが基本構造と言えます。
一般的にこの○○の部分が オブジェクト であり、△△の部分が メソッド となります。前項参照
最後に 12-16 行目を見てみます。長いですが・・・
この部分が 3.C1を降順に並び替える に対応することとなります。
12: Range("C1").Select
13: Application.CutCopyMode = False
14: Range("C1:C10").Sort Key1:=Range("C1"), Order1:=xlDescending, Header:= _
15: xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
16: SortMethod:=xlPinYin, DataOption1:=xlSortNormal
まず12行目で セルC1を選んでいます。
13行目は 実は無くても構いません。マクロの記録を使うと 頻繁に自動挿入されるのでわざと残しました。(意味は、09行でコピーしたことを無効にするという命令です。)
先に14行目と15行目の最後に _(アンダーバー) がついていることを説明します。これは、1行で命令できなかったので次の行に命令がつづく という意味です。
14行目が 降順に並び替える という意味なのですが、具体的には
Range("C1:C10").Sort Key1:=Range("C1"), Order1:=xlDescending
の Sort が並び替え、Order1:=xlDescending が降順 を意味しています。(他のところは実は無くても構いません)
今日はここまで。おちゅかれさまでした。
|
|

|