Microsoft Access、使っていますか?
すでにAccessなどの高度なリレーショナルデータベース管理システム(RDBMS)を使いこなしている方には、本記事は物足りないと思いますので、どうぞスキップしてください。
Accessを使ってないけれど、業務用データベースを作成したい!と考えている人には、ちょっと役立つTipsがあるかもしれませんので、すこしお付き合いくださいね。
今回は、Excelで、マクロも使用せず関数だけで、カンタンな検索システムを作った事例について、ご紹介します。
ExcelとAccessは、どう使い分けますか?
ExcelとAccessは、ともにMicrosoft Officeの一部で、データ管理や分析のためのアプリ(ソフト)です。
しかし、両者は異なる目的と機能を持っていますので、以下に、それぞれの特性とメリット・デメリットを整理してみましょう。
〔Excel〕
特性;Excelは表計算ツールで、数値計算、データ分析、グラフ作成などに適しています。VBAを使用して、カスタム関数やマクロを作成することも可能です。
メリット;Excelは直感的で使いやすく、初心者でもすぐ使いこなせるようになります。データ視覚化も容易で、フィルタリングやソートなどの基本的なデータ操作が可能です。
デメリット;.xlsxファイルでは、ワークシートの最大行数が1,048,576 行ですから、大量のデータ(100万行以上)を扱えません(100万行以下(数10万行)のデータでも、Excelメモリ上で編集、検索、加除訂正するのはかなり難しいでしょう)。また、複数ユーザーが、同時にデータ編集することも困難です。
〔Access〕
特性;Accessはリレーショナルデータベース管理システム(RDBMS)で、大量のデータを効率的に管理し、複雑なクエリを実行することができます。
メリット;Accessは大量データを取り扱うのに適し、データ整合性をたもつ機能があります。複数ユーザーが、同時にデータを編集することも可能です。
デメリット; Accessを初心者が使いこなせるようになるまでには、かなり学習・訓練を積む必要があるでしょう。データ視覚化についても、Excelほど直感的ではありません。
両者の特性や、メリット&デメリットを比べると、Excelは簡単なフィルタリングと検索が可能で、小〜中規模データ・マネジメントには十分な機能を提供してくれます。
しかし、Accessは大規模なデータセットや、複雑なクエリに対応する能力を持っています。
どちらを選択するかは、具体的な要件(データの規模、必要な機能、技術的なスキルなど)によって決めることになるでしょう。
カンタンなExcel関数だけで検索システムを作ってみました
それでは、実際にカンタンな「検索システム」をExcelで作ってみましょう。
住所録や顧客台帳、製品や部品台帳など、どのようなデータでもよいのですが、今回は広くWeb上に公開されている 全国地方公共団体コード.xlsx を題材にします。国内で使われるGIS(地理情報システム)データベースなどの主キーとなることが多い、「都道府県コード」や「市区町村コード」を、漢字やカナ(の一部)などから検索するためのものです。
現在日本国内には、全国地方公共団体コードが振られた行政区が約1,800件あります。レコード数が1800件程度であれば、1枚のExcelワークシートで、十分加除訂正やフィルタリングすることができますが、できれば元のレコードは「テーブル」として手を加えず保存し、必要な情報だけを別フィールドに抽出できた方が、検索の自由度が高まります。
総務省公式HPで一般公開されている「全国地方公共団体コード.xlsx」は、上図のようなワークシート1枚約1800行の一覧表ですが、このExcelブックの別ワークシートに、下図のような検索条件入力フィールドを作り、入力された検索条件にもとづいて、一覧表から条件に適合するレコードだけを抽出・表示するシステムです。
[データ]→[フィルタ]ボタンからExcel標準のフィルター機能を使って、類似の検索をすることはもちろんできますが、上記のような検索システム化をすることで、
(1)元のテーブルへ手を加えずに検索が完了する
(2)毎回フィルターのダイアログボックスを立ち上げることなく、
自由に検索条件を変更し、新しい検索結果を得ることができる
(3)”可視セルのみ選択”をしなくても、抽出できた一覧をコピー&ペーストして
取りまとめようとする別資料などへ転載・引用できる
など、多くのメリットが生まれます。
それでは、まず上図(検索ワークシート)セルA5へ、Microsoft 365およびExcel 2021で使用できるFILTER関数を入れてみましょう。
=FILTER(市区町村名,
IFERROR(FIND(A2,市区町村名[団体コード]),0)*
IFERROR(FIND(B2,市区町村名[都道府県名(漢字)]),0)*
IFERROR(FIND(C2,市区町村名[市区町村名(漢字)]),0)*
IFERROR(FIND(D2,市区町村名[都道府県名(カナ)]),0)*
IFERROR(FIND(E2,市区町村名[市区町村名(カナ)]),0),””)
関数式入力の前提として、総務省公式サイトからダウンロードしてきたコード一覧表をテーブル(※)化してください。
(※)CF.テーブル化の詳細はこちら。
ここでは、テーブル名を「市区町村名」と名付けておくようにします。
そこで、[データ]→[フィルター]機能を関数化したFILTER関数を使い、検索条件に適合したレコードだけを、別ワークシートへ抽出するのですが、
構文は
=FILTER(範囲, 条件, 一致しない場合の値)
です。
範囲はテーブル;市区町村名、一致しない場合の値は””(空白)とします。
第2引数(フィルター条件)については、FIND関数
=FIND(検索文字列,対象,[開始位置])
を使って、入力フィールド(A2,B2,C2,D2,E2)の値を検索文字列、テーブル;市区町村名のそれぞれA,B,C,D,E列を検索対象として、検索条件に合ったレコードだけをFINDし(見つけ)ます([開始位置]は文字列最初の文字から検索開始する場合は省略可)。
最後に、FIND関数をIFERROR関数
=IFERROR(値,エラーの場合の値)
で囲い、FIND関数の検索文字列がテーブル;市区町村名に含まれていない場合にも、#VALUE!などのエラー値を出さないようにして完成です。
FILTER関数が使えるMicrosoft 365 やExcel 2021であれば、同時にスピル(※※)機能も働きますので、上図(検索ワークシート)セルA5に関数式を1つ入れるだけで、A列からE列までに同じ関数式が、自動で代入されます。
(※※)CF.スピル;一つのセルから複数セルに、データを「こぼれ落ちる」ように自動代入する機能。 この検索ワークシートへ、市区町村名(漢字)の一部文字を入力すれば、その文字を含む市区町村コードのみが自動抽出されるようになりました。
コードから、当該行政団体名を逆引きすることも可能です。
まとめ:数千件程度のレコード検索システムにはAccess要らず。
FILTER関数+スピル機能活用、関数式たった1文で目的達成!!
検索や抽出を必要とする元レコードが数千件以上あると、Accessなどのリレーショナルデータベース管理システム(RDBMS)が必要かしら? という気にもなりますが、ちょっと待ってください。
現在仕事で使っているパソコンのメモリ容量が充分にあり、1枚のExcelワークシートで読み込めるレコード数ならば、Excelだけで(元のテーブルは、手を加えることなく保持したまま)簡単に検索システム化することができますよ。
しかもマクロ不要のため、作成したExcelブックを電子メールなどにも安心して添付、送信できます。
FILTER関数を使用できるMicrosoft 365版Excel、もしくはExcel 2021などでしたら、関数式を1文入力するだけで、あとはスピル機能が自動で検索条件を判別して、結果抽出まで一気にやってくれますから、ぜひ試してみてください。
一度やり方を習得しておくと、ほかの大量データ検索場面でも、いろいろと応用できるようになりますよ。