PR

 前回までのレッスンを通じて、マクロ記録機能を利用したマクロの作成法と、オブジェクトやメソッドといったVBAの核になるキーワードを紹介しました。しかし当然のことながら、作成したマクロは実用度という点では満足のいくものではありません。たとえば、問い合わせデータが増えても、抽出対象となるセル範囲が固定されているため、決まりきった結果しか得ることができません(図1)。また、担当者だけでなく、質問コードなど他のフィールドからも重複しないデータを抽出できれば、マクロの役立ち度はより大きくなるでしょう。


図1 作成したマクロではデータの増加に応じた処理ができない

汎用的なマクロへとコードを書き換える

 マクロの中身を書き換える前に、改良するポイントを確認しておきましょう。ポイントは2つです。
1.対象となるフィールドを指定できる
2.データの増加に対応できる

 できるだけ改良する手間を少なくするために、ポイント1のフィールドの指定は、マクロの中で指定するのではなく、「事前に抽出対象となるフィールドの見出しセルを選択→マクロを実行」という仕様にしたいと思います。

 上記の条件を踏まえた上で、手直ししたマクロのコードは以下のようになります。VBEの画面で実際にコードを参考にキーボードから修正していただいてもかまいませんが、この記事をお読みいただいているブラウザー画面で、コード部分をコピーし、VBE画面で貼り付けていただいてもけっこうです(VBE画面については第6回「記録したマクロの内容を確認する」をご参照ください)。

Sub UniqueFilter()
'
' 機能 :フィールドから重複しないデータを取り出す
' 利用法:対象フィールドの見出しセルを選択して
'     マクロを実行する
  Range(ActiveCell, ActiveCell.End(xlDown)).AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("H4"), Unique:=True
End Sub