プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、データ操作のメソッド、Sort、Find、FindNext、Replace、AutoFilter、AdvancedFilterなどの使い方について、実例を交えて解説する【Windows 10、Excel 2016に対応】。
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。前回の「プログラムの肝! 条件分岐と繰り返しの基本文法とさまざまな書き方」では、VBAに限らず手続き型プログラミングに必要となる「条件分岐」「ループ処理」について学んだ。
今回は、前回と同じくプログラミングに欠かせない、ソート(並べ替え)や検索、置換、抽出(フィルタリング)などについて解説する。これらの処理をデータで行う「データ操作」は明日にでも業務に取り入れて使用できる処理となるので、ぜひ身に付けてほしい。Excelは、もともとデータを扱うためのソフトウェアだから、データ操作はExcelの得意とするところだ。このデータ操作をVBAで処理できれば、業務の効率が大きく向上する。
そして、VBAの面白さ、醍醐味はExcelのデータを自分の思いのままに操作できる点にあると筆者は思っている。今回は前回の「条件分岐」「ループ処理」などと組み合わせて少し複雑なプログラムとなっているが、便利なマクロなので、きっと本稿を読んだ読者から「おーーー! ExcelのVBAでこんなこともできるのか!」といった感嘆の声が聞こえてくる…… ような気がする。
データの並べ替えは、言うまでもなくデータ処理には100%必要な処理だ。もちろん、Excelのメニューからでも並べ替えはできるが、マクロ化しておくと細かい条件の指定があらかじめセットしておけるので、数倍手間が省ける。
例えば、並べ替えの基準とする列の入力欄を作り、昇順/降順を選択リストから選択させて、ソートの条件を入力したら、ボタンクリックのみで、指定した条件でデータがソートされるのだ。
データの並べ替えを行うにはRangeオブジェクトのSortメソッドを使用する。「書式」(以降、「構文」「使い方」の意)は下記の通りだ。
Rangeオブジェクト.Sort
Key1:={Key1}
,Order1:={Order1}
,Key2:={Key2}
,Type:={Type}
,Order2:={Order2}
,Key3:={Key3}
,Order3:={Order3}
,Header:={Header}
,OrderCustom:={OrderCustom}
,MatchCase:={MatchCase}
,Orientation:={Orientation}
,SortMethod:={SortMethod}
,DataOption1:={DataOption1}
,DataOption2:={DataOption2}
,DataOption3:={DataOption3}
見た目、非常に多くの引数があって、大変に複雑そうだが、実際に使ってみると意外と簡単だ。各引数について説明しておこう(参考「Range.Sort Method(Excel)- MSDN」)。
並び順の値 | 説明 |
---|---|
xlAscending | 昇順(規定値) |
xlDescending | 降順 |
設定値 | 説明 |
---|---|
xlSortLabels | ピボットテーブルをラベルごとに並べ替え |
xlSortValues | ピボットテーブルを値ごとに並べ替え |
設定値 | 説明 |
---|---|
xGuess | 見出しがあるかどうかはExcelが特定する |
xlNo | 最初の行は見出しではない(規定値) |
xlYes | 最初の行が見出し |
設定値 | 説明 |
---|---|
xlSortColumns | 列単位で並べ替え |
xlSortRows | 行単位で並べ替え |
設定値 | 説明 |
---|---|
xlPinYin | ふりがな順 |
xlStroke | ふりがな順を使用しない(規定値) |
設定値 | 説明 |
---|---|
xlSortNormal | 数値と文字データを別個に並べ替える(規定値) |
xlSortTextAsNumbers | 文字を数値データとして並べ替える |
では、この書式を使って図1のような表の並べ替えを行ってみよう。
図1の「社員番号」(B2セル)の表を、最初の行を見出しとして、「読み」を昇順、「性別」を降順、「年齢」を昇順に並べ替えてみよう。マクロコードはリスト1のようになる。
Sub 並べ替え() Range("B2").Sort _ Key1:=Range("D2"), Order1:=xlAscending, _ Key2:=Range("E2"), Order2:=xlDescending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes End Sub
リスト1のマクロコードを見て何か気付いたことはないだろうか。そう、Sortメソッドが途中で改行されているのだ。Sortメソッドは引数が多くなると1行がとても長いマクロコードになってしまい、各条件を把握しづらくなる。そのため、あえて引数の途中で改行しているのだ。
メソッドやプロパティの引数指定などの途中で改行するには、「 」(半角スペース)+「_」(アンダースコア)を入力しないとエラーとなってしまうので、必ず入れるようにしよう。
実行すると図2のように表示される。
「読み」が「昇順」でソートされ、性別が「降順」でソートされ、年齢は「昇順」でソートされている。
以上のようにSortメソッドには、非常にたくさんの引数が用意されており、自分の望み通りの並べ替えが実現できる。読者の方々も、いろいろ設定して試してもらいたい。
次ページでは、表内のデータを検索する「データの検索」について解説しよう。
データの検索も、先のデータの並べ替え同様、日常の業務では100%必要な処理だ。この解説を読んで、ぜひ貴社のデータ検索業務をマクロ化してほしい。
Copyright © ITmedia, Inc. All Rights Reserved.