VBEでマクロを編集してみよう

参考書やネットで見かけるサンプルのマクロを目にした人は、それらが記録したマクロと比べると ずいぶんすっきりしていることに気が付かれるかもしれません。 実は「マクロの記録」によって作成されたコードは多くの場合やりたいこと以外の余分な部分まで 記録しています。
また、記録したマクロではオウム返しの操作しかできない場合が多いので、「もっと融通の効くものに できないだろうか」という欲も出てきます。
「すっきりした記述にしたい」
「マクロを融通の利くものに」
という希望をかなえるには記録したマクロを編集するしかありません。
いきなり「マクロを編集してみましょう」と言ってもマクロを使い始めたばかりの人にはなかなか 「おっかない」ものですが、編集のコツさえつかめばそれほど難しいものでもありません。
まずは記録したマクロを編集することから始めてみましょう。

  1. 【重要】コードを編集する前に
  2. 余分なコードを削除する

  1. 【重要】コードを編集する前に
  2. コード編集に慣れないうちは、思わぬミスをしてしまうことはやむを得ません。 ですが、そのミスで大事なデータを壊してしまったり、失ったりしては大変です。 何しろ、マクロで行った操作は元に戻せない場合が多いのです。 ファイルの保存を行う操作はとくにそうです。 そこで、できるだけ後悔しないための対策をとっておきましょう。

    ◆バックアップを保存しておこう

    実行するマクロに関連するブックはマクロの動作が確実になるまではコピーファイルを作成して 必ずバックアップするようにしましょう。
    とくに内容を変更してから上書き保存するようなマクロは、最悪の場合、 もとのデータを復活できなるので、必ず復元できるような対策を採ってください。

    ◆マクロの動作を確認しておこう

    記録したマクロを編集する前にまずステップイン機能を利用してどのコードがどんな動作を行っているか 自分の目で確認しておきましょう。 「こんな動作まで記録されちゃってるの?」って言う場合が結構あります。 とくに、操作を行うセルを探すために行ったスクロール操作も律儀に記録してくれますが、 スクロール操作は実行の段階では不要である場合が多いのです。 本当に必要なコードがどれなのかをあらかじめチェックしておきましょう。

    ▲PAGETOP

  3. 余分なコードを削除する
  4. 手始めに記録したマクロの編集をやって見ましょう。 「マクロの記録」で作成したコードは実は結構ムダな動作まで記録してしまいます。 まずはこの「余分なコード」を除いていく作業からとりかかると、いい練習になります。 では、どんなコードが「余分なコード」なのでしょうか。

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

    マクロの記録では、離れたセルを選択するためにウィンドウをスクロールさせても その動作も記録してしまいます。
    記録する際には必要な操作ですが、実際の作業ではセルが選択されれば済むことが多いので 無駄な動作の記録と言えます。
    記録される動作はおおむね次のようなコードが記録されるはずです。

    ≪例≫スクロール操作の記録
    	ActiveWindow.SmallScroll Down:=17
    		'方向キーで下方向へ17行スクロールしたとき。
    	ActiveWindow.LargeScroll Down:=1
    		'PageDownキーで画面を下方向へスクロールしたとき
    
    スクロールの動作をあえて見せる必要がないのであれば、これらのスクロール動作のコードはそのまま削除することができます。

    ◆重複したオブジェクトの指定

    セルの範囲選択をしてそのセル範囲に対して何らかの操作を記録した場合、 セル範囲の選択の記述が多少くどい表現で記録されます。

    ≪例≫セル範囲"A1:A5"を選択して、コピーする
        Range("A1:A5").Select
        Selection.Copy
    
    「Range("A1:A5")を選択する。選択したセル範囲(=Selection)をコピーする。」 という多少くどい表現になります。 Selectメソッドで取得した「Range("A1:A5")」というセル範囲と Copyメソッドの対象となる「Selection」はまったく同じセル範囲をあらわします。
    そこで、マクロの記録で生成された「〜.Select Selection〜」と言う連続した2行のステートメントは 次のように修正しても同じ動作が期待できます。
    ≪修正例≫
        Range("A1:A5").Copy
    「〜.Select Selection〜」の部分を省略して
    「Range("A1:A5")をコピーする。」という簡潔な表現にすることができます。

    ◆デフォルト設定の動作の記録

    マクロの記録でオプション設定の必要なコマンドを実行した場合には、 変更していないオプションの部分についても記録されてしまいます。
    これが実は記録したマクロを見づらくしてしまう一因なのですが、デフォルト状態のオプションの設定は省略することができます。つまり、変更したい部分のみ残しておけばだいたいのコマンドは動きます。

    ≪例≫形式を選択して貼付けで「値」を選択した場合
        Range("B1").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,  _
    		SkipBlanks:=False, Transpose:=False
    
    「PasteSpecial」が「形式を選択して貼り付け」の動作にあたるメソッドですが、 オプション設定は「貼り付け」の「値」しか変更していないのにその他の変更していないオプションも記録されてしまいます。例えば、後で見直したときにこのステートメントでどんな作業をしているのか、逆に読みづらくなってしまいます。 ヘルプなどで調べてみるとそれぞれのオプションの設定は「Paste:=xlValues」以外はデフォルト状態、つまり、まったく変更を加えてない状態なのがわかります。
    ≪修正例≫余計なオプション設定の部分を省略
        Range("B1").Select
        Selection.PasteSpecial Paste:=xlValues
    
    このように不要なオプション設定の部分はごっそり省略することができます。
    さらに、前項の「重複したオブジェクトの指定の省略」の部分を適用すれば次のようにさらにコンパクトにすることができます。
    ≪修正例≫重複したオブジェクトの指定の省略
        Range("B1").PasteSpecial Paste:=xlValues
    このように3行もあったステートメントが1行でまったく同じ動作をするようになります。

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

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

    ≪例≫CutCopyModeプロパティの設定
    	Application.CutCopyMode = False
    
    これは何をしている動作かと言うと、クリップボードの情報をクリアしているコードなのです。
    たとえば、セル範囲を選択した状態でコピー動作を行うと、コピーした選択範囲の外周が点滅破線になります。
    これはそのセル範囲の情報が貼り付け可能な状態でクリップボードに存在していることを示しています。

    Applicationオブジェクトアプリケーションオブジェクト(エクセルプログラム)を表します。
    CutCopyModeプロパティアプリケーションの切り取り、コピー(した後のクリップボード)の状態(貼り付け可能な状態かどうか)を返します。
    = False CutCopyModeプロパティにFalseを代入します。クリップボードはリセットされます。(点滅破線ではなくなります)
    逆にTrueの場合は点滅破線の状態のままになり、クリップボードの情報は保持されます。

    つまり、VBAで実行中のアプリケーションであるエクセルの状態を設定するステートメントです。 このステートメントが本当に必要かどうかと言うと、そうでもなくて、例えば貼り付け以外の動作を次に行えば自動的にCutCopyModeは内部的にFalseに設定されます。
    何かシートやセルの内容を変更するコマンドを次に実行しているのであれば、このステートメントは削除してしまってもかまいません。

    ただし、全て削除してしまうと
    • マクロ終了時点での選択セル範囲外周が点滅破線になってしまう
    • クリップボード情報をどうするかのメッセージウィンドウ(下図参照)が表示されてしまう 【図】


    ことがあるので、残しておいたほうがよい場合もあります。
    そのような場合だけ、このステートメントは必要なので
    	Application.CutCopyMode = False
    
    上記コードをクリップボードの情報を終了したあとに挿入しておけば良いでしょう。

以上、初心者の方でも比較的に手をつけやすい編集の仕方を紹介しました。
次のステップに進むためにも 記録したマクロをこのような形で編集しながら、コードに目を慣らす練習をしていってください。 ▲PAGETOP
≪前のページへ   VBAマクロビギナーの部屋目次へ   次のページへ≫

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