マクロ記録は、ユーザーの操作をそのまま記録しようとする。これを実現するために、ActiveとかSelectなどユーザーが選んでいるオブジェクトを使う。Excel本体を動かすとApplication。よく見るのはActiveCell、Selection、ActiveSheetなどがある。これらのオブジェクトは、どれもApplicationオブジェクトの直下にある。オブジェクトブラウザのグローバルなメンバーです。
マクロ記録では、Application直下というかグローバルなメンバーが使いやすいでしょうね。
さて、マクロ記録の結果の一部ですが以下は変換/修正しやすい。
- ActiveSheet:Worksheetクラス(型)
- ActiveCell:Rangeクラス(型)
ActiveSheetは、Sheet1やSheet2に変える
ActiveCellは、Sheet1.Rnage(“??”)やSheet1.Cells(2,4)のように変える。
しかし、
Selection:Objectクラス/型(オブジェクトの型なら何でもSetできる汎用的なクラス/型)
SelectionはObject型なのでどんなオブジェクトでも私達がマウスであるものを選択すればそれがSelectionとして使えるのでマクロを記録するシステムからすると利用範囲が広い。だから、マクロを読む場合は、何を選択したか流れを読む必要がある。例えば、以下はマクロ記録の一部。行を選択して削除(行削除)をしている。
ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp
この場合は、Selectionは、.EntireRow.Selectで行を選択していることがわかる。つまり、Selectionは前の行でSelectしているオブジェクトをチェックする。
記録したマクロ/Macro1()を以下の手順で修正する。
- 欲しいメンバー(プロパティやメソッド)を探す
- そのメンバーを持つオブジェクトが修正の対象になる
- どんな流れでそのオブジェクトを取り出すか手順を探す
- 記録したマクロのコードをメモ帳にコピーしておく
- Macro1()などのコードを修正してF8(デバッグのステップイン)で動作を確認する
- 引数を追加して汎用的に使えるようにする。