連載
» 2016年08月18日 05時00分 公開

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

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、データ操作のメソッド、Sort、Find、FindNext、Replace、AutoFilter、AdvancedFilterなどの使い方について、実例を交えて解説する【Windows 10、Excel 2016に対応】。

[薬師寺国安,PROJECT KySS]

 プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。前回の「プログラムの肝! 条件分岐と繰り返しの基本文法とさまざまな書き方」では、VBAに限らず手続き型プログラミングに必要となる「条件分岐」「ループ処理」について学んだ。

 今回は、前回と同じくプログラミングに欠かせない、ソート(並べ替え)や検索、置換、抽出(フィルタリング)などについて解説する。これらの処理をデータで行う「データ操作」は明日にでも業務に取り入れて使用できる処理となるので、ぜひ身に付けてほしい。Excelは、もともとデータを扱うためのソフトウェアだから、データ操作はExcelの得意とするところだ。このデータ操作をVBAで処理できれば、業務の効率が大きく向上する。

 そして、VBAの面白さ、醍醐味はExcelのデータを自分の思いのままに操作できる点にあると筆者は思っている。今回は前回の「条件分岐」「ループ処理」などと組み合わせて少し複雑なプログラムとなっているが、便利なマクロなので、きっと本稿を読んだ読者から「おーーー! ExcelのVBAでこんなこともできるのか!」といった感嘆の声が聞こえてくる…… ような気がする。

データの並べ替え(ソート)

 データの並べ替えは、言うまでもなくデータ処理には100%必要な処理だ。もちろん、Excelのメニューからでも並べ替えはできるが、マクロ化しておくと細かい条件の指定があらかじめセットしておけるので、数倍手間が省ける。

 例えば、並べ替えの基準とする列の入力欄を作り、昇順/降順を選択リストから選択させて、ソートの条件を入力したら、ボタンクリックのみで、指定した条件でデータがソートされるのだ。

Sortメソッドの使い方

 データの並べ替えを行うにはRangeオブジェクトのSortメソッドを使用する。「書式」(以降、「構文」「使い方」の意)は下記の通りだ。

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」)。

  • {Key1}には並べ替えの基準とする列を指定。{Order1}には{Key1}で指定した値の並び順(表1)を指定
  • {Key2}には2番目に並べ替えの基準とする列を指定。{Type}にはピボットテーブルを並べ替えるときの基準(表2)を指定。{Order2}にはKey2で指定した値の並び順(表1)を指定
  • {Key3}には3番目に並べ替えの基準とする列を指定。{Order3}にはKey3で指定した値の並び順(表1)を指定
  • {Header}には、最初の行が見出しかどうかを設定(表3)参照
  • {OrderCustom}には、特に今回は指定する必要はない
  • {MatchCase}には大文字、小文字の区別をTrueかFalseで指定。Trueを指定すると区別する。区別しない場合はFalse
  • {Orientaion}には並べ替えの方向を指定(表4)参照
  • {SortMethod}には並べ替えの方法(表5)を指定
  • {DataOption1}にはKey1の並べ替えの方法(表6)を指定
  • {DataOption2}にはKey2の並べ替えの方法(表6)を指定
  • {DataOption3}にはKey3の並べ替えの方法(表6)を指定
表1 {Order1〜3}に指定する値
並び順の値 説明
xlAscending 昇順(規定値)
xlDescending 降順


表2 {Type}に指定する値
設定値 説明
xlSortLabels ピボットテーブルをラベルごとに並べ替え
xlSortValues ピボットテーブルを値ごとに並べ替え


表3 {Header}に指定する値
設定値 説明
xGuess 見出しがあるかどうかはExcelが特定する
xlNo 最初の行は見出しではない(規定値)
xlYes 最初の行が見出し


表4 {Orientaion}に設定する値
設定値 説明
xlSortColumns 列単位で並べ替え
xlSortRows 行単位で並べ替え


表5 {SortMethod}に指定する値
設定値 説明
xlPinYin ふりがな順
xlStroke ふりがな順を使用しない(規定値)


表6 {DataOption}に指定する値
設定値 説明
xlSortNormal 数値と文字データを別個に並べ替える(規定値)
xlSortTextAsNumbers 文字を数値データとして並べ替える

表の並べ替えを行ってみよう

 では、この書式を使って図1のような表の並べ替えを行ってみよう。

図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 各項目を並べ替える

コラム「コードの途中で改行するには」

 リスト1のマクロコードを見て何か気付いたことはないだろうか。そう、Sortメソッドが途中で改行されているのだ。Sortメソッドは引数が多くなると1行がとても長いマクロコードになってしまい、各条件を把握しづらくなる。そのため、あえて引数の途中で改行しているのだ。

 メソッドやプロパティの引数指定などの途中で改行するには、「 」(半角スペース)+「_」(アンダースコア)を入力しないとエラーとなってしまうので、必ず入れるようにしよう。


 実行すると図2のように表示される。

図2 「読み」「性別」「年齢」が並べ替えられている

 「読み」が「昇順」でソートされ、性別が「降順」でソートされ、年齢は「昇順」でソートされている。

 以上のようにSortメソッドには、非常にたくさんの引数が用意されており、自分の望み通りの並べ替えが実現できる。読者の方々も、いろいろ設定して試してもらいたい。

 次ページでは、表内のデータを検索する「データの検索」について解説しよう。

 データの検索も、先のデータの並べ替え同様、日常の業務では100%必要な処理だ。この解説を読んで、ぜひ貴社のデータ検索業務をマクロ化してほしい。

       1|2|3|4|5 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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