Excelの醍醐味! 明日からできるデータの並べ替え、検索、置換、抽出:Excelマクロ/VBAで始める業務自動化プログラミング入門(7)(4/5 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、データ操作のメソッド、Sort、Find、FindNext、Replace、AutoFilter、AdvancedFilterなどの使い方について、実例を交えて解説する【Windows 10、Excel 2016に対応】。
データの抽出(フィルター)
最後に、「データの抽出」について解説する。データの抽出は実際の業務においても、高い頻度で使用される処理だ。これをマクロ化しておけば、業務の効率が数倍に跳ね上がること請け合いだ。
まずは、オートフィルター機能を使ってデータを取り出してみよう。オートフィルターとは大量のデータを絞り込んで抽出する際に利用する機能だ。Excelのメニューからも設定はできるが、今回はマクロでやってみる。Excelのメニューでのやり方は、Web上にたくさん情報があるので、そちらを参照してほしい。
オートフィルター機能AutoFilterメソッドの使い方
オートフィルター機能を使うには、AutoFilterメソッドを使用する。書式は下記の通りだ。
AutoFilterメソッドの書式
Rangeオブジェクト.AutoFilter Field:=条件を指定する列番号,Criteria1:={抽出条件1},Operator:={Operator},Criteria2:={抽出条件2},VisibleDropDown:=True|False
VisibleDropDownには、フィルターボタンを表示する値をTrueまたはFalseで指定。表示する場合はTrue、しない場合はFalseを指定する。
記述例 | 説明 |
---|---|
"編集部” | 編集部 |
"*編集部" | 編集部を含む |
"編集部*" | 編集部から始まる |
"<>編集部" | 編集部以外 |
"<>*編集部" | 編集部を含まない |
"=10" | 10と等しい |
">10" | 10より大きい |
">=10" | 10以上 |
"<10" | 10より小さい |
"<=10" | 10以下 |
"<>10" | 10以外 |
"" | 空白セル |
"<>" | 空白セル以外 |
設定値 | 説明 |
---|---|
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には「担任」を入力する欄と「実行」ボタンがある。「担任」を入力して「実行」ボタンをクリックすると、その「担任」データが抽出される。オートフィルターを解除する場合は「オートフィルターの解除」ボタンをクリックする。
「担任」に「綾瀬」と入力して「OK」ボタンをクリックすると、「担任」が「綾瀬」のデータが表示される(図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
変数「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
Criteria1に「3年」を含むそれ以上の条件を指定し、Operatorには「xlAnd」を指定し、Criteria2の抽出条件に「6年」以下を指定している。学年は文字列になっているので、「&」で数値と「年」と連結し、条件は数値部分のみで判別させている。結果、下記と同じ記述になる。
学年>=3 And 学年< 6
1度「オートフィルター」の解除ボタンでフィルターを解除する。その後Excelメニューの「開発」→「Visual Basic」とたどってマクロコードを表示し、リスト9のコードの中にカーソルを置き、「実行」→「Sub/ユーザーフォームの実行」と選択する。すると図13のように表示される。
図13を見ると各見出しの項目に矢印が表示されている。この矢印を非表示にすることも可能だ。それには、「AutoFilterメソッドの書式」で解説している、「VisibleDropDown」にFalseと指定すると非表示にできる。各自が試してみてほしい。
次ページでは、フィルターオプションの機能を使ってデータを取り出してみよう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。