VBA講義室 > 記録マクロの整理と統合 > 余分なコードを削除する

余分なコードを削除する

マクロの記録で作成されたマクロのうち、削除してしまっても支障がないと思われるもののうち、初心者でも比較的判断しやすいものを次に列挙しておく。

ウィンドウスクロール動作

ウィンドウをスクロールさせてもその動作は記録されてしまう。単に離れたセルを選択するために行ったスクロールであれば、目的のセルを選択するだけでもスクロールと同じ効果を得ることが出来るため、記録されたスクロール動作は省いてしまっても支障がないことが多い。スクロールの動作を見せる必要がないのであれば、これらのスクロール動作のコードはそのまま削除することができる。

スクロール操作の記録例


ActiveWindow.SmallScroll Down:=17
'方向キーで下方向へ17行スクロールしたとき。
ActiveWindow.LargeScroll Down:=1
'PageDownキーで画面を下方向へスクロールしたとき

クリップボードのリセット動作

マクロの記録でセル範囲のコピー(切り取り)、貼り付け作業を何回か繰り返していると、次のようなステートメントが現れる。


Application.CutCopyMode = False

セル範囲を選択した状態でコピーまたは切り取りを行うと、コピーした選択範囲の外周が点滅破線になる。点滅破線の部分が貼り付け可能な状態でクリップボードに保持されていることを示している。この後に貼り付け以外の動作を行うと貼り付け可能状態がクリアされ、点滅破線状態が解除される。この解除動作が記録されたものが前掲のコードである。
ところが、このコード、ユーザーが意識して行っているものではない。Excelによって自動的に行われる動作であり、先に述べたように、貼り付け以外の動作を次に行えば自動的にCutCopyModeはFalseに設定される。だから、ほとんどの場合、このステートメントは削除してしまってもかまわない。

ただし、コピー・切り取りもしくは貼り付けを最後の動作とするマクロにおいてこのステートメントを全て削除してしまうと、対象範囲外周の点滅破線が残った状態でマクロが終了してしまう。マクロ終了後、クリップボード情報を使わない場合は、最後のステートメントは残しておいたほうがよい場合もある。

SelectメソッドとSelectionプロパティ

 

Range("A1:A5").Select
Selection.Copy

「Range("A1:A5")ををコピーする。」という動作の記録は「Range("A1:A5")を選択する。選択されているオブジェクト(Range("A1:A5"))をコピーする。」というコードで記録される。記録時に対象を選択しないとコピー操作が出来ないため、記録上はこうなる。結果を得るためにはこのままでも支障はないが、次の理由で整形することをお勧めする。

この場合、Selectメソッドで選択されるRangeオブジェクトと Copyメソッドの対象(Selectionプロパティで取得されるオブジェクト)は同じRangeオブジェクトが取得されている。そのため、マクロの記録で生成された「〜.Select Selection〜」と言う連続した2行のステートメントはほとんどのケースで次のように修正しても同じ動作が期待できる。

 

Range("A1:A5").Copy


前(記録マクロの整理と統合) 目次 次(マクロを統合する)


SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送