2009年6月23日火曜日

マクロ記録について

今回は、マクロ記録について、書きたいと思います。

マクロ記録は、メニューバーのツール→マクロ→新しいマクロの記録で、マクロ名(規定値はmacro1)を入力して、OKボタンを押すと、始まります。



記録終了ボタンを押すと、それまでの、マクロ記録された内容が、VBAのソースとして、標準モジュールに、サブルーチンとして、記録されます。

例えば、シート上で、罫線を引く事をマクロ記録した場合、下記のようなサブルーチンが作成されました。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2007/3/2  ユーザー名 : azuma-keiichi
'
    'A1セル~C8セルを選択
    Range("A1:C8").Select
    '選択しているセルに対して、罫線なしにする
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    '選択しているセルに対して、左罫線をセットする
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous     'ラインスタイル
        .Weight = xlThin              '太さ
        .ColorIndex = xlAutomatic     '色
    End With
    '選択しているセルに対して、上罫線をセットする
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    '選択しているセルに対して、下罫線をセットする
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    '選択しているセルに対して、右罫線をセットする
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    '選択しているセルに対して、水平罫線をセットする
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    '選択しているセルに対して、垂直罫線をセットする
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End Sub

コメントは私が、付加したのですが、これを一々コーディングするのは、結構大変ですね!
だから、マクロ記録をうまく使いたいのですが、このままだと、プログラミングし難い事があります。

マクロ記録で一番気をつけなければいけないのは、セルを表す命令がCellsではなく、Rangeになる事です。Cellsは、i行目のj列目という指定ができるのですが、Rangeは、A列の8行目のような指定の仕方をします。Range("A1:C8").Selectのように、列方向の指定が数字ではなく、英字なのです。

これでは、プログラムし難いですよね!

ですから、マクロ記録したソースを使用する場合、Rangeの部分は、Cellsに置き換える必要があります。又、当然、iとかjとかの変数ではなく、定数で展開されますので、その部分も変換します。

基本的には、注意事項はそれだけです。

EXCEマクロ(VBA)には、豊富な機能に対する命令が沢山用意されていますが、マクロ記録をうまく利用すれば、難しそうな事も、結構、簡単に実現できていまします。

この辺が、他の言語と違う所で、私が一番気に入っている所です。

それでは!

0 件のコメント:

コメントを投稿