Excel VBA (マクロ) Training Center:www.Web-studies.info = Excel VBA (マクロ) メインバナー
  トップ  お問い合わせ  ご利用案内  運営者案内


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 が降順 を意味しています。(他のところは実は無くても構いません)


今日はここまで。おちゅかれさまでした。





www.web-studies.info = Excel VBA (マクロ) を お気に入りに追加



ページトップへ All rights reserved to Web-studies.info = Excel VBA (マクロ)