日々の業務の中で、「データの比較」という作業が必要になった際、どのような方法がパッと思い浮かぶだろうか。おそらくExcel関数を用いた比較作業が代表的だろうが、その場合、扱うデータ内容やデータ量によっては、相当の労力と時間を要してしまう場合がある。例えば、下記図1のような社員情報の新旧の比較を行うとする。
可変的な項目(この場合、[Address]や[Department])の数が少なければ、1つのExcelファイルにXLOOKUP関数でデータを集計し、IF関数で比較結果を表示させれば作業は完了する。
では、この可変的な項目が50、100・・・と増えた場合はどうだろうか。それぞれの項目に対して、XLOOKUP関数でデータを集計、IF関数で比較結果を表示・・・Excelファイル自体のデータ量が増加するにつれ、Excelそのものの処理時間が増加し、最悪Excelが動かなくなってしまうかもしれない・・・と少し考えただけでもかなりの労力と時間を消費してしまうことが想像出来る。
そこで便利なツールが、Microsoft Accessである。
Microsoft Accessは、Microsoft社が提供するデータベースアプリを制作するためのツールである。
データベースアプリを制作、というとMicrosoft Accessを使い始めるまでにハードルが高いように感じるかもしれないが、アプリ制作を目的とせずとも、データ比較作業においてはかなり便利なツールとなる。
総じて、Excelに比べて労力も時間も消費が少なく済むツールとして、活用できる。
筆者も過去に膨大なデータの比較作業を担当し、Microsoft Accessで乗り越えた経験がある。
当時10以上の表に対して30パターンでの比較作業が必要で、更に表の行数が1,000,000行を超えていることもあり、Excelではファイルを開くだけで5分以上かかってしまうような状態だった。そのため、実際にExcel関数で比較作業を進める場合1ファイル対応するだけでも最低1時間は要するところを、Microsoft Accessで行うことで30分以下まで短縮することが出来た。加えて、Microsoft Accessでのデータ比較作業はデータベースやSQLといった専門的知識の必要がないため、別の作業者への作業方法の引継ぎにも時間を取らなかった。
以上のことから、Microsoft Accessを使用したデータの比較作業方法の有用性をご理解頂けたと思う。
そこで本稿では、実際にMicrosoft Accessを使用したデータの比較作業方法をご紹介する。
それではMicrosoft Accessを使用してデータベースの作成からデータの比較作業を行う。(以降、Microsoft AccessはAccessと表記する。)
本稿では、実際のデータの比較作業を想定し、図4のように比較したい項目同士が隣り合って表示され、更に項目の値が一致していれば〇、不一致であれば×を表示する列を追加で作成し、一目でデータの比較結果が分かるアウトプットを作成することを目的とする。
なお、使用するデータとデータの比較結果のアウトプットはExcelデータとする。
① [新規]タブ > [空のデータベース]を選択
② 作成するデータベースの名前を決定 > [作成]ボタンをクリック
本稿では「test.accdb」というデータベース名としている。
[作成]ボタンをクリックすると、画面が切り替わり、図5のように画面左側に[すべてのAccessオブジェクト]欄の中に[テーブル]タブと[テーブル1]が表示される。これで新規のデータベースが作成された。
本工程での作業時間はおよそ3分ほどである。
最初に、準備したExcelデータを作成したデータベースへインポートし、テーブルを作成する。
テーブルとは、Excelでいう表のことを指す。
Accessでのテーブルの作成は以下の手順で行う。
① [テーブル1]を右クリック > [インポート] > [Excel]を選択
② [参照]ボタン > インポートするExcelデータを選択
③「現在のデータベースの新しいテーブルにソースデータをインポートする」を選択 > [OK]をクリック
④「先頭行をフィールド名として使う」を選択 > [OK]をクリック
なお、「フィールド名」とはテーブルの列名を指す
⑤ 各フィールドのオプションを設定 > [次へ]をクリック
ここでは各列の列名やデータ型を設定することが可能である。なお、テーブルを作成した後でも変更可能のため、本作業はスキップしてもよい。
⑥ 主キーを設定 > [次へ]をクリック
ここでは必要に応じて主キーを設定することが可能である。「主キー」とは、各データを一意に指定することが出来る列のことを指す。
なお、後にテーブルの結合を行う際に主キーを使用するため、比較するデータの中で値が完全に一致する項目を指定しておくことが望ましい。
本稿では、図6のように「社員.xlsx」の[ID]という項目を主キーとして設定した。
⑦ 作成するテーブル名を決定 > [完了]をクリック
ここではテーブル名を設定することが可能である。
本稿では、インポートするExcelデータ名から「社員」というテーブル名に設定した。
⑧ インポート操作の保存を行うか選択 > [閉じる]をクリック
ここでは①~⑦の手順を保存するか選択することが可能である。保存せずとも作業時間に大きな影響は無いため、本稿では、保存しないことを選択した。
以上、①~⑧の手順を行うことでテーブルを作成することが出来た。
本工程での作業時間はおよそ3分ほどである。
なお、[すべてのAccessオブジェクト]欄の作成したテーブルをダブルクリックすると、図7のように、作成したテーブルが表示されるので確認してみてほしい。
また、データの比較作業を行うにあたり、本稿では、同様の手順で比較先のテーブルである「比較対象_社員.xlsx」もインポートを行った。
データの比較作業を行うにあたり、比較する項目同士が隣り合って表示されるように、比較元のデータと比較先のデータを結合したテーブルを作成する。
Accessでのデータ結合は以下の手順で行う。
① [作成]タブ > [クエリデザイン]をクリック
この機能を使用することで、作成したテーブルを操作し、任意の項目のみの表示や他のテーブルとの結合、表示するデータの条件を指定することが可能となる。
「クエリ」とは、インポートしたデータに対して行う操作とイメージしてほしい。(例えば、「社員」テーブルの[ID]と[LastName]のみを表示させる操作、というイメージ)
② 画面右側の[テーブルの追加] > 比較するテーブルを選択 > [選択したテーブルを追加]をクリック
この操作を2回行い、比較元のテーブルと比較先のテーブルを操作可能な状態にする。
③ 比較元のテーブルに主キーを選択 > 比較先のテーブルの主キーへドラッグアンドドロップ
この操作ではどの項目を基準に、テーブルの結合を行うかを設定することが可能である。
ドラッグアンドドロップ後、図8のように、基準とする項目同士が黒い線で繋がり、設定が完了したことが分かる。
本稿では2-⑥の手順で設定した主キー[ID]を基準に、テーブルの結合を行った。
④ 画面下側にて[フィールド名]行の1列目を選択 > 比較を行う項目を選択する
この操作では、比較を行う項目をどのテーブルから、どの順番で表示させるかを設定することが可能である。
本稿では、比較元のテーブル(社員)と比較先のテーブル(比較対象_社員)の[ID]・[Address]・[Department]を交互に表示させられるよう、図9のように設定した。
⑤ [クエリデザイン]タブ > [実行]をクリック
この操作を行うことで画面が切り替わり、④の設定を基にしたテーブルが新たに表示される。
図10のように、④で設定した比較する項目が交互に表示されていることが分かる。
なお、項目名は「テーブル名.項目」となるよう自動で設定される。
以上、①~⑤の手順を行うことで比較する項目同士を隣り合って表示させることが出来た。
本工程での作業時間はおよそ5分ほどである。
前項で作成したテーブルに、各項目の値同士を比較した結果を〇×で表示する列の追加を行う。この作業は、第2.3項で作成したテーブルをExcelでエクスポートした後、Excel関数でも行うことも可能だが、Access上でも可能なためその方法をご紹介したい。
Accessでの列の追加・値の比較は以下の手順で行う。
① [ホーム]タブ > [表示] > [デザイン ビュー]を選択し、テーブルの操作画面へ戻る。
② 画面下側で列を追加したい項目の、右隣の列を選択
本稿では、比較元テーブルと比較先テーブルの[Address]項目の値の比較結果を、[比較対象_社員]の[Address]項目と[社員]の[Department]項目の間に表示させたいので、図11のように[社員]の[Department]項目を選択した。
③ [クエリデザイン] > [列の挿入]をクリック
この操作により、図12のように空欄の列が[比較対象_社員]の[Address]項目と[社員]の[Department]という項目の間に挿入された。
④ 画面下側で、③で挿入した空欄の列のフィールドを選択
⑤ [クエリデザイン]タブ > [ビルダー]を選択
この操作を行うと、[式ビルダー]というポップアップ画面が表示される。[式ビルダー]機能では、任意の条件を適用した列を表示させるための、関数を設定することが可能である。
⑥ [式ビルダー]画面上側のテキストボックスに、関数を入力 > [OK]をクリック
本稿では、比較元テーブルと比較先テーブルの[Address]項目の値の比較結果を、AccessのIF関数を用いて条件を設定するため、以下の関数を入力した。
Addressの比較結果: IIf([社員.Address]=[比較対象_社員.Address],”〇”,”×”)
上記の関数では、「もし比較元テーブルの[Address]項目の値と比較先テーブルの[Address]項目の値が一致する場合「〇」、不一致の場合「×」を表示する。」条件を設定している。
また、上記の関数の文法は、以下の通りである。
・「Adressの比較結果:」 → 「:」(コロン)の直前までが、項目名を表す
・「IIF()」 → IF関数を表す
・「[社員.Address]」 → []で項目名を表す。「.」(ピリオド)を挟んで、[テーブル名.項目名]という構成となる
⑦ [クエリデザイン]タブ > [実行]をクリック
この操作を行うことで画面が切り替わり、図13のように[比較対象_社員]の[Address]項目と[社員]の[Department]項目の間に、[Address]項目の比較結果を表示することが出来た。
以上、①~⑦の手順を行うことで各項目の値同士を比較した結果を〇×で表示する列を追加することが出来た。
本工程での作業時間はおよそ10分ほどである。
なお、本稿では、[Department]項目の比較も同様の手順で行った。
最後に、前項で作成したテーブルのExcelファイルでのエクスポートを行う。
AccessでのExcelファイルでのエクスポートは以下の手順で行う。
① [外部データ]タブ > [Excel]を選択 > [OK]をクリック
この操作を行うと、[エクスポート Excelスプレッドシート]というポップアップ画面が表示される。本画面では、エクスポートするファイル名やファイル形式を設定することが可能である。
本稿では、図14のように「社員_比較結果」というファイル名に設定した。
② エクスポート操作の保存を行うか選択 > [閉じる]をクリック
ここでは①の手順を保存するか選択することが可能である。保存せずとも作業時間に大きな影響は無いため、本稿では、保存しないことを選択した。
以上、①~②の手順を行い作成したテーブルをExcelファイルでエクスポートすることで、本稿の目的であった比較したい項目同士が隣り合って表示され、更に項目の値が一致していれば〇、不一致であれば×を表示する列が追加されたデータの比較結果を作成することが出来た。
本工程での作業時間はおよそ3分ほどである。
なお、エクスポートしたExcelファイルを開くと、図15のように前項で作成したテーブルがそのままExcel形式で作成されているので確認してみてほしい。
以上、Microsoft Accessを使用したデータの比較作業を行う方法をご紹介させて頂いた。
各工程の作業時間を合計しても30分以下で作業を完了することが出来た。Microsoft Accessを使用すれば、データ量が多くとも作業速度に影響はなく、大きな労力も時間も消費することなくデータ比較作業を行うことが可能である。
実際にデータの比較作業業務を行う際には、本稿を活用して頂きたい。
【参考】
アーツアンドクラフツConsulting & Solution事業部/アナリスト。元エンジニア。得意分野はデータベースやプログラミング。