【Access】テーブル結合の方法2選 | クエリ・VBA対応

  • クエリでテーブルをつないだが正しく表示されない
  • データが出ない、または件数が増えてしまう
  • VBAでINNER JOINの書き方がわからない

Accessでテーブル結合を行う際このような悩みはありませんか?

これらの原因はクエリの設定ミスやVBAの記述ミスによるものが多いです。

本記事ではクエリとVBAそれぞれのテーブル結合の方法を実務例をもとにわかりやすく解説します。

この記事で分かること
  • Accessでテーブル結合を行う2つの方法
  • クエリを使ったテーブル結合の具体的な手順
  • VBAによるテーブル結合の書き方
  • テーブル結合でよくあるミスと対処法
目次

Accessでテーブル結合する方法は2つ

Accessでテーブル結合を行う方法は主に次の2つです。

クエリで結合する方法

Accessのクエリ機能を使えば画面上の操作だけで複数のテーブルを結合できます。

結合したいフィールド同士をドラッグして結びつけるだけで設定できるため、

SQLを書かなくても簡単に扱えるのが特徴です。

こんな人におすすめ

  • 初めてテーブル結合を行う人
  • SQLに慣れていない人

VBAで結合する方法

VBAではSQLを使ってテーブルを結合します。

INNER JOINを使うことで、クエリで行っている結合処理をコードとして実装できます。

処理を自動化したい場合や条件を細かく制御したい場合に役立ちます。

こんな人におすすめ

  • 処理を自動化したい人
  • 条件を細かく制御したい人

クエリでテーブル結合するやり方

ここでは、クエリを使ったテーブル結合の方法を解説します。

今回は「T担当者」と「T部署」の2つのテーブルを使用し、部署IDで結合しています。

担当者テーブルのサンプルデータ
部署テーブルのサンプルデータ
STEP
クエリデザインを開く

メニュータブの「作成」から「クエリデザイン」をクリックします。

Accessでクエリデザインを開く画面
STEP
テーブルを追加する

「テーブルの追加」をクリックし、テーブル一覧から追加したいテーブルをダブルクリックして追加します。

クエリにテーブルを追加している画面

複数のテーブルを追加する場合はCtrlキーやShiftキーを使って複数選択できます。

  • Ctrlキーを押しながらクリック:個別に複数選択
  • Shiftキーを押しながらクリック:範囲をまとめて選択

選択した状態で「選択したテーブルを追加」をクリックすると複数のテーブルをまとめて追加できます。

テーブルを追加できたら、次は表示したいフィールドを設定していきます。

STEP
フィールドを追加する

テーブル一覧から表示したいフィールドを下のグリッドへドラッグして追加します。

フィールドはダブルクリックすることでグリッドの右端に追加することもできます。

今回は以下のように「担当者ID」「担当者名」「部署名」を追加したクエリを作成しました。

最初はデータがうまく表示されないことも多いですが、結合条件を見直すことで解決できます。

※担当者IDは並べ替えを「昇順」に設定しています。

この操作で複数のテーブルの情報を1つの一覧として表示できるようになります。

STEP
クエリを保存する

Ctrl + Sを押すとクエリを保存するダイアログが表示されます。

クエリを保存するダイアログ画面

今回はクエリ名を「Q担当者」として保存します。

クエリ名「Q担当者」を入力して保存する画面
クエリ保存ダイアログでOKをクリックする画面
STEP
保存したクエリを確認する

作成した「Q担当者」をダブルクリックして、結果を表示します。

テーブル結合した結果を表示したクエリ一覧画面

担当者ID・担当者名・部署名が結合されて表示されていれば、正しくテーブル結合できています。

クエリを使うことでテーブルを直接編集せずにデータを組み合わせて表示できるのがポイントです。

VBAでテーブル結合する方法

基本構文

VBAでテーブルを結合する場合はINNER JOINを使ってSQLを記述します。

INNER JOINの基本的な書き方は次の通りです。

SELECT
    テーブル1.フィールド名,
    テーブル2.フィールド名
FROM
    テーブル1
    INNER JOIN テーブル2 ON テーブル1.共通フィールド = テーブル2.共通フィールド;

具体例

SELECT
    T担当者.担当者ID,
    T担当者.担当者名,
    T部署.部署名
FROM
    T担当者
    INNER JOIN T部署 ON T担当者.部署ID = T部署.部署ID;

T担当者とT部署を部署IDで結合し、両方に存在するデータだけを一覧として取得しています。

VBAで使う場合

Dim sql As String

sql = "SELECT T担当者.担当者ID, T担当者.担当者名, T部署.部署名 " & _
      "FROM T担当者 " & _
      "INNER JOIN T部署 ON T担当者.部署ID = T部署.部署ID;"

SQLを文字列として定義することでVBAからテーブル結合(INNER JOIN)を実行できます。

また、SQLは1行でも記述できますが可読性を上げるために& _を用いて改行しています。

テーブル結合でよくあるミスと原因

データが表示されない

両方のテーブルに一致するデータがない場合、データは表示されません。

  • T担当者の部署IDに「D005」がある
  • T部署の部署IDに「D005」がない

このような場合INNER JOINでは一致するデータのみ取得されるため表示されません。

実務でも「データが表示されない」というトラブルは非常に多く、

原因の多くがこのINNER JOINの仕様によるものです。

対処法

一致しないデータも表示したい場合はLEFT JOINの使用を検討しましょう。

件数が増える

結合条件が適切でない場合、データが重複して表示されることがあります。

  • 部署IDが重複していると組み合わせが増える

特に1対多の関係では意図せず件数が増えることがあるため注意が必要です。

対処法

結合条件(ON句)が正しいか確認し、不要な重複がないかチェックしましょう。

勝手に結合される

クエリにテーブルを追加すると同じ名前のフィールドがある場合に自動で結合されることがあります。

意図しない結合になる場合もあるため注意が必要です。

対処法

不要な結合線は削除し正しい結合条件を手動で設定しましょう。

まとめ

今回はAccessでテーブル結合を行う方法について解説しました。

クエリとVBAの2つの方法で実装できます。

  • クエリ:画面操作で簡単に結合できる
  • VBA:SQLを使って柔軟に制御できる

用途に応じて使い分けることでより効率的にデータを扱うことができます。

実務では複数のテーブルを組み合わせてデータを扱う場面が多いためテーブル結合は必須のスキルといえます。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次