簡単なデータベースの作成(2)~ フィルタと並び替えと検索 ~

析・集計など、データベースから任意のデータを抽出したり、加工する場合には、ピボットテーブル機能(詳しくは、ピボットテーブルとクロス集計 を参照してください)や前項で学習した関数によって、それらの作業は一気に楽になっていきます。

本項では、それらと比較すると多少地味ですが、効率よく作業するためには欠かせない、データの並び替えや簡易検索などの方法を紹介します。

本来であれば、もう少し早い段階で学習すべきものかもしれませんが、用途としてはデータベースに対して使う機能なので本項での紹介としました。

例題のサンプルデータを使って、さまざまな機能を適用してみましょう。

例題
例題13 ヘルプデスクデータベース

まずは、Excelで最もメジャーでよく使われていると思われる機能で、

オートフィルター(または、単にフィルター)

という機能です。言葉で説明するのは案外難しい機能ですが、データベースから任意のデータ群を「抽出」するための機能になります。

なかなかに難しい説明ですが、実際にやってみると一目瞭然です。使い方も簡単で、一定の条件のもと、データベース上にカーソルを置いた状態で、下図の「データ」タブの「フィルター」ボタンをクリックするだけです。(一定の条件というのは後述します)

「データ」タブの「フィルター」ボタンのイメージ

すると、データベースの「見出し行(タイトル行)」に下図のような「下向き三角」マークが付きます。これがフィルターになります。

オートフィルターのフィルターマークのイメージ

このボタンをクリックすると、下図のようなリストメニューが表示されます。

オートフィルタ―のメニューリストのイメージ

メニューのなかから、任意の抽出項目を選択するわけです。たとえば、「区分」のリストマークから「その他」のみ選択すると、下図のように、「その他」項目を含むレコード(行)だけが抽出されて表示されます。

「その他」項目のみをフィルターで抽出したイメージ

このように、オートフィルター(フィルター)機能によって、見出し行にリストマークが付加されると、さまざまな条件での抽出が可能になります。

たとえば、「区分」条件と「部門」条件を複合的にフィルタリングすることも可能です。具体的には、「障害」を報告した「総務部」を抽出すると以下のようになります。

「障害」と「総務部」でフィルタリングして抽出したレコードのイメージ

この場合で注意が必要なのは、当然のことながら最初にフィルタリングをかけた項目のなかに次のフィルタリング項目が含まれるということです。つまり、

1番目のフィルタリング > 2番目のフィルタリング > 3番目のフィルタリング

というように、上の例でいうと、抽出された3つの「総務部」は、「障害」の区分を持つ「総務部」であって、「総務部」の総数(総数は5)ではありません。フィルタリング項目が増えるにつれて、前項で学習した「かつ(AND)」の条件として増えて行くわけです。

フィルターをかけている項目は、視覚的に下図のようにマークが少し変化しているので見分けることが可能です。抽出したデータを活用する前には、必ずどの項目に対してフィルタリングをかけているのか、フィルタリングしている項目をすべて確認するようにしてください。

フィルタリングをかけた「フィルターマーク」のイメージ

さらに、オートフィルターではもっと細かい抽出条件の指定が可能です。

フィルタリングする項目が「テキスト」の場合は、メニューのなかに「テキストフィルター」という抽出条件が表示されます。

「オートフィルタ―」のメニューリストの「テキストフィルター」を選択しているイメージ

テキストフィルターを選択すると、さらに詳細に条件をしてするための様々なメニューが表示されます。

「オートフィルタ―」の「テキストフィルター」メニューのイメージ

上図のように、「●●で始まる文字」であったり、「●●を含む文字」などの抽出条件を付けることが可能です。たとえば、「山田さん」や「山本さん」など「山」が混在するレコードを抽出する場合などに利用できます。

また、フィルタリングする項目が「数値」の場合は、メニューのなかに「数値フィルター」という抽出条件が表示されます。

「オートフィルタ―」のメニューリストの数値フィルター」を選択しているイメージ

数値フィルターを選択すると、テキストフィルターと同様にさらに詳細に条件をしてするための様々なメニューが表示されます。

「オートフィルタ―」の「数値フィルター」メニューのイメージ

上図のように、「●●より大きい」であったり、「●●以上~●●以下」などの抽出条件を付けることが可能です。たとえば、「100より大きい」や「10~150の間」などといったレコードを抽出する場合に利用できます。

なかでも、数値フィルターメニューには上図のとおり「トップテン」という面白い抽出条件があります。

「トップテンオートフィルタ―」画面のイメージ

これは、指定する順位までを抽出することができる機能です。単純に「10項目」までとした場合、10位までのレコードが抽出されますが、「パーセント」で指定することも可能で、「10%」を指定すると、合計数の10%分のレコードが抽出されて表示されます。

「トップテンオートフィルタ―」画面のイメージ

この機能は、大変便利で、売上データの抽出など多岐に利用できます。

このように、様々な角度からデータを抽出することができるのですが、何度もいうように大切なことは規則正しくデータをフォーマットに格納しておくことです。

最初に、「一定の条件のもと」でオートフィルタ―機能を使うと説明しました。この一定の条件とは、まさしくそのことで、正しいフォーマットにデータを格納してあるというのが前提条件となります。

条件を満たさない場合の最たる例としては、見出し行のセルが結合している場合です。以下のように見出し行を結合しているとオートフィルターが見出し行に付加されず、データ行の1行目に付加されてしまいます。

「オートフィルター」が見出し行に付加されないイメージ

データベースで見出し行を結合する場合は見出し行を2列とし、必ず1フィールド(列)に1つのタイトルをつけるようにしましょう。

データベースの「見出し行」のイメージ

さて、このオートフィルタ―機能はデータベース上でボタンをクリックするだけですが、データベース範囲内の任意の範囲を指定することも可能です。

その場合はマウスで範囲指定したのち、同ボタンをクリックします。この場合は、範囲指定した最上位の行にオートフィルターが付加されます。(結合セルにも付加されます)

では次に、抽出したデータを二次利用してみましょう。まず、これをコピーして利用するとどうなるでしょうか。範囲指定してコピーし、適当なスペース(37行)に貼り付けると、以下のようになります。

オートフィルタ―で抽出した複数のレコードをコピーして貼り付けたイメージ

なにが言いたいのかというと、フィルタリングしているデータベースの行番号は「8」から「12」から「29」に飛んでいますが、コピーして貼り付けたものは、オートフィルタ―で抽出した行だけになるということです。

つまり、これが、列の「非表示」機能をつかっている場合には、「非表示」の列もコピーされてしまうので、たとえば、SUM関数で合計値を計算する場合などには正しく計算できませんが、オートフィルタ―で抽出したレコードをコピーして利用する場合にはそのような心配はいりません。完全に抽出したレコード(行)だけを貼り付けるからです。

また、オートフィルタ―には別シートに抽出させる機能もあります。「データ」タブの「詳細設定」をクリックすると、「フィルターオプションの設定」画面が表示されます。

「オートフィルタ―」の「詳細設定」の「フィルターオプションの設定」画面のイメージ

ただ、少し面倒です。抽出させたいシートにセルを置いた状態で同画面を表示させ、「抽出先」を「指定した範囲」に選択し直して、もとのシートのデータベースを範囲指定します。

次に「検索条件範囲」は、データベース関数 で解説したような「抽出条件」を記入した表をデータベースと同じシートに別途作成し、その範囲を参照します。そして、「検索条件範囲」に抽出させたいシートのセル番号を記述(当該シートのセルをクリック)する必要があります。

「フィルターオプションの設定」画面に引数を記述しているイメージ

どちらにしろ範囲指定が必要なのであれば、そのままコピーして貼り付けたほうが簡単で速いと思いますが、別シートに抽出して作業する場合はこのどちらかの方法になります。

次は、データの並べ替えをしてみましょう。

データの並び替えもやり方はオートフィルターと同じです。同様に1フィールド(列)に1タイトルをつけたデータベース上で、「データ」タブの「並べ替え」ボタンをクリックします。

「データ」タブの「並べ替え」ボタンのイメージ

すると、下図のとおり「並べ替え」ウィンドウが表示されます。

「並べ替え」ウィンドウのイメージ

ここでは、「申請者」を「あいうえお順」に並べ替えてみましょう。

並べ替えのことを「ソート」といいますが、この場合、「申請者」でソートするわけです。ウィンドウの「最優先されるキー」のリストメニューから「申請者」を選択すると、申請者をキーとしてソートすることができます。

ただし、ここで注意すべきことは、オートフィルタ―と同様で、見出し行を結合しているとリストに正しく項目名が表示されません。1フィールド(列)に1タイトルという原則はデータベース構築においては重要なことですので、十分理解しておいてください。

次に、「並べ替えのキー」は基本的にセルの値(入力されている数値やテキスト)をキーとしますので、「値」を選択します。

最後に、「順序」は、「昇順」と「降順」から選択します。昇順は「小さいもの順、若いもの順」の意味で、降順は「大きいもの順、古いもの順」の意味になります。「あいうえお」順にソートするということは若い順であり、「昇順」を選択して「OK」ボタンをクリックします。

すると、「申請者」の氏名をキーとして昇順に並び変わります。

レコードを「昇順」で並べ替えたイメージ

さらに、詳細なソートをやってみましょう。もう一度「並べ替え」ボタンをクリックして、今度は「項番」をキーとして「昇順」に並べ替えます。つまり、もとの並びに戻してください。

すると、途中で下図のような「並べ替えの前に」というメッセージが表示されます。

「並べ替えの前に」ウィンドウのイメージ

これは、「項番」のセルが文字列であるために表示されるメッセージです。つまり数値ではありません。(詳しくは、セルの書式設定と表示形式 を参照してください)「001」というように先頭に「0」を付記する表記が数値ではできないために、文字列を使用しているのです。

メッセージは、「文字列ですが、数値とみなして並べ替えますか?」と問いかけてくれています。そのとおり並べ替えを行うので、そのまま「OK」ボタンをクリックします。

次に、この「項番」はそのままで、「B4」から「I33」までの範囲を複数のキーを条件として並べ替えてみましょう。

この場合は、マウスで範囲指定が必要です。「B4:I33」を範囲指定し、「並べ替え」ボタンをクリックし、「並べ替え」ウィンドウを表示させます。

ここで「最優先されるキー」のリストをみてみましょう。下図のとおり、見出し(タイトル)ではなく、1行目のデータ値がリストにあがっています。

「並べ替え」ウィンドウのイメージ

つまり、データ行の1行目をタイトルとみなしている のです。このままソートすると、1行目を残して2行目からソートされてしまいます。この状態を解消するには、ウィンドウ右上の「先頭行をデータの見出しとして使用する」のチェックを外します。

「並べ替え」ウィンドウの「先頭行をデータの見出しとして使用する」チェック項目のイメージ

このチェックは見落としがちですので、十分気を付けてください。すると項目リストが列記号に変更されました。今度は、列記号でソートするキーを指定します。

複数の条件として「部門」と「発生日」を指定します。部門を「降順」にソートし、同部門のなかでは発生日の「昇順」にソートしてみましょう。

同様に、「最優先されるキー」に「部門」である「列C」を指定し、「順序」を「降順」に指定します。そして、条件を追加します。

条件の追加は、ウィンドウ左上の「レベルの追加」ボタンをクリックすると、条件が追加され、「次に優先されるキー」があらわれます。

「並べ替え」ウィンドウの「レベルの追加」ボタンのイメージ

追加された条件に「発生日」である「列B」と「昇順」を指定し、「OK」ボタンをクリックすると複数条件でのソート、この場合は、部門ごとの発生日順でのソートが完了します。

複数条件でソートしたレコードのイメージ

では、最後に「検索」の仕方についてです。

たとえば、数百ならまだしも数千ものレコードをため込んだようなデータベースでは、特定のセルを眺めて(画面から肉眼で)探し出すには結構な労力が必要です。

このような場合において特定のセルを検索するには、「ホーム」タブの「検索と選択」ボタンより「検索」をクリックします。

「ホーム」タブの「検索と選択」ボタンより「検索」を選択しているイメージ

すると「検索と置換」ウィンドウが表示されます。

「検索と置換」ウィンドウのイメージ

上図の「検索する文字列」に検索したい文字を入力して検索します。

ここで「置換」とは、検索した文字列を他の文字列に置き換える(すなわち置換する)ということです。たとえば、「死神」を「しにがみ」に一括して置き換えることができます。表現を統一したい場合に有効な機能です。

対して「検索」は単純に文字を入力して、該当するセルを探すという機能ですが、もう少し知っておくべきことがあります。それは、

ワイルドカード

という文字列の存在です。これは、Ecxelのみならず、その他多くのソフトウェアで適用することのできる文字で、「*(アスタリスク)」や「?」、「~(チルダ)」の記号文字です。

ワイルドカードは、「任意の文字」をあらわします。つまり、「何かの文字」ということで、具体的な使用方法としては「*的」や「?県」のように使います。

前者「*的」で検索すると、「的」の前に何かの文字を有するセル(「理想的」「紳士的」「オレ的」など)がすべてヒットします。後者の「?市」も同様に、「市」の前に何かの文字を有するセル(「大阪市」「倉敷市」「津市」)がすべてヒットします。

両者の意味は任意の文字をあらわす点ではまったく同じです。違いとすれば、「*」は複数文字を兼ねるのに対して「?」は1文字のみをあらわすという違いがありますが、通常の使用においては、それほど違いを意識することはないと思います。

最後の「~」の用途は、「ワイルドカード自体を検索する場合」に使います。たとえば数式で「*」が使われている場合など、「~*」を指定すると「*」自体を検索することができます。

以上で、本項の内容は終了です。本項でも特に課題はありません。例題を利用していろいろなフィルタリング、並べ替えを練習してください。

更新履歴

2012年7月10日
ページを公開。
2017年12月29日
ページをSSL化によりHTTPSに対応。

参考文献・ウェブサイト

当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。

文献
なし
ウェブサイト
なし