Excelの醍醐味! 明日からできるデータの並べ替え、検索、置換、抽出Excelマクロ/VBAで始める業務自動化プログラミング入門(7)(4/5 ページ)

» 2016年08月18日 05時00分 公開
[薬師寺国安PROJECT KySS]

データの抽出(フィルター)

 最後に、「データの抽出」について解説する。データの抽出は実際の業務においても、高い頻度で使用される処理だ。これをマクロ化しておけば、業務の効率が数倍に跳ね上がること請け合いだ。

 まずは、オートフィルター機能を使ってデータを取り出してみよう。オートフィルターとは大量のデータを絞り込んで抽出する際に利用する機能だ。Excelのメニューからも設定はできるが、今回はマクロでやってみる。Excelのメニューでのやり方は、Web上にたくさん情報があるので、そちらを参照してほしい。

オートフィルター機能AutoFilterメソッドの使い方

 オートフィルター機能を使うには、AutoFilterメソッドを使用する。書式は下記の通りだ。

AutoFilterメソッドの書式

Rangeオブジェクト.AutoFilter Field:=条件を指定する列番号,Criteria1:={抽出条件1},Operator:={Operator},Criteria2:={抽出条件2},VisibleDropDown:=True|False


 VisibleDropDownには、フィルターボタンを表示する値をTrueまたはFalseで指定。表示する場合はTrue、しない場合はFalseを指定する。

表10 {抽出条件1〜2}の値の例
記述例 説明
"編集部” 編集部
"*編集部" 編集部を含む
"編集部*" 編集部から始まる
"<>編集部" 編集部以外
"<>*編集部" 編集部を含まない
"=10" 10と等しい
">10" 10より大きい
">=10" 10以上
"<10" 10より小さい
"<=10" 10以下
"<>10" 10以外
"" 空白セル
"<>" 空白セル以外


表11 {Operator}の値
設定値 説明
xlAnd {抽出条件1}と{抽出条件2}の論理演算子 AND
xlBottom10Items 下から数えて○番目({抽出条件1}で指定される項目数)まで表示
xlBottom10Percent 下から数えて○%({抽出条件1}で指定される割合)まで表示
xlFilterCellColor セルの色
xlFilterDynamic 動的フィルター
xlFilterFontColor フォントの色
xlFilterIcon フィルターアイコン
xlFilterValues フィルターの値
xlOr {抽出条件1}または{抽出条件2}の論理演算子「OR」
xlTop10Items 上から数えて○番目({抽出条件1}で指定される項目数)まで表示
xlTop10Percent 上から数えて○%({抽出条件1}で指定される割合)まで表示
参考「XlAutoFilterOperator 列挙型 - MSDN

オートフィルター機能を使ってみよう

 図11のような表の中から、担任が「綾瀬」のデータを取り出してみよう。図11には「担任」を入力する欄と「実行」ボタンがある。「担任」を入力して「実行」ボタンをクリックすると、その「担任」データが抽出される。オートフィルターを解除する場合は「オートフィルターの解除」ボタンをクリックする。

図11 生徒名簿の表

 「担任」に「綾瀬」と入力して「OK」ボタンをクリックすると、「担任」が「綾瀬」のデータが表示される(図12)。

図12 「担任」が「綾瀬」のデータが抽出された

 図12からオートフィルターを解除するには「オートフィルターの解除」ボタンをクリックするといい。このマクロはリスト8になる。

Option Explicit
Sub オートフィルターによる抽出()
  Dim myName As String
  myName = Range("E4").Value
  If myName = "" Then
    MsgBox "担任を入力してください。"
  Else
    Range("B6").AutoFilter Field:=4, Criteria1:=myName
  End If
End Sub
 
Sub オートフィルターの解除()
  If ActiveSheet.AutoFilterMode = True Then
    Range("B6").AutoFilter
  End If
End Sub
リスト8 オートフィルターによる抽出と、オートフィルターの解除

 変数「myName」を宣言し、入力された「担当」の値を格納しておく(3〜4行目)。「担当」が未入力の場合は警告メッセージボックスを表示する(5〜6行目)。

 セル「B6」を基準にAutoFilterメソッドのFieldに抽出対象となる列番号を指定する(8行目)。この場合の列番号は、左端から数えて5番目になるが、「B6」のセルを基準にしている。このため、Fieldに指定する列の番号は「4」になるので、注意してほしい。抽出条件の「Criteria1」には変数「myName」の値を指定する。

 このマクロを「実行」ボタンと関連付ける。「実行」ボタンを選択して、マウスの右クリックで表示される「マクロの登録」から登録する。

 12〜16行目のオートフィルターの解除では、オートフィルターモードがオンになっているかどうかを判断して、オンの場合(13行目)にはオートフィルターを解除する(14行目)。このマクロを「オートフィルターの解除」ボタンに登録する。

ちょっと複雑な条件で抽出

 次に、学年が「3年」を含む以上でかつ「6年」以下のデータを抽出してみよう。マクロはリスト9のようになる。

Sub 学年が3年を含む以上かつ6年以下を抽出()
  Range("B6").AutoFilter Field:=3, Criteria1:=">=3" & "年", Operator:=xlAnd, Criteria2:="<6" & "年"
End Sub
リスト9 学年が「3年」を含む以上でかつ「6年」以下のデータを抽出

 Criteria1に「3年」を含むそれ以上の条件を指定し、Operatorには「xlAnd」を指定し、Criteria2の抽出条件に「6年」以下を指定している。学年は文字列になっているので、「&」で数値と「年」と連結し、条件は数値部分のみで判別させている。結果、下記と同じ記述になる。

学年>=3 And 学年< 6

 1度「オートフィルター」の解除ボタンでフィルターを解除する。その後Excelメニューの「開発」→「Visual Basic」とたどってマクロコードを表示し、リスト9のコードの中にカーソルを置き、「実行」→「Sub/ユーザーフォームの実行」と選択する。すると図13のように表示される。

図13 「学年」が「3年」を含むそれ以上でかつ「6年」以下のデータを抽出

 図13を見ると各見出しの項目に矢印が表示されている。この矢印を非表示にすることも可能だ。それには、「AutoFilterメソッドの書式」で解説している、「VisibleDropDown」にFalseと指定すると非表示にできる。各自が試してみてほしい。

 次ページでは、フィルターオプションの機能を使ってデータを取り出してみよう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。