• 締切済み

Excel2016で複数キーでリレーションシップ

Excel2016を最近使い始めました。 複数テーブルを使ってリレーションシップを使い始めたのですが、結合の為のキーは複数使用できないのでしょうか?(Accessなら簡単にできると思うのですが)

みんなの回答

回答No.2

Sub Test15()   Dim strSQL As String   strSQL = "SELECT [Sheet3$A1:C100].学生ID, 姓, 名, タイトル, 説明" & _       " FROM ([Sheet3$A1:C100] RIGHT JOIN [Sheet3$E1:G100]" & _       " ON [Sheet3$A1:C100].学生ID = [Sheet3$E1:G100].学生ID)" & _       " LEFT JOIN [Sheet3$I1:K100]" & _       " ON [Sheet3$E1:G100].クラスID = [Sheet3$I1:K100].クラスID;"   Call SQLWriter(strSQL, "New") End Sub  このマクロの実行結果は、添付図のようです。つまり、出来るってことです。

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.1

やってみました。できるようです。 なお、やってみる限り、 シート上のリストをテーブルに見立てる場合は table1にtable2をLeftJoin table1にtable3をLeftJoin はできず、 table1にtable2をLeftJoin Joinしたテーブルにtable3をLeftJoin とする必要があるようです。 Sub Test1()  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName  With ThisWorkbook.Sheets("Sh4")   wkSQL = ""   wkSQL = wkSQL & "SELECT T1.[品番],T1.[規格],T1.[個数],[サイズ],T3.[好み]" & vbCrLf   wkSQL = wkSQL & "FROM ([Sh1$A1:G65000] as T1" & vbCrLf   wkSQL = wkSQL & "Left Join [Sh2$A1:G65000] as T2 " & vbCrLf   wkSQL = wkSQL & " ON T1.[品番] = T2.[品番] and T1.[規格] = T2.[規格])" & vbCrLf   wkSQL = wkSQL & "Left Join [Sh3$A1:G65000] as T3 " & vbCrLf   wkSQL = wkSQL & " ON T1.[品番] = T3.[品番] and T1.[規格] = T3.[規格]" & vbCrLf   rs.Open wkSQL, cn   .Cells(2, 1).CopyFromRecordset rs '結果セットを格納  End With    rs.Close   '以下後処理  Set rs = Nothing  cn.Close  Set cn = Nothing End Sub

関連するQ&A

  • access2007 リレーションシップについて

    アクセス初心者です。 テーブルを複数作成しました。 これをリレーションシップをしたいと思うのですが、「主キー」の扱いに悩んでいます。 参考書などは主キーともう1つのテーブルの同じ項目名でかつ主キーでないものを結んでいますが、主キー同志は結んではいけないですか? メインで使うテーブルのIDを支点に、他の複数のテーブルのIDを放射状に結びつけて関連付けたいと考えています。 どのようにして作成していけばできますか? そのようなことができないのでしたら、どのようにしたらできますか?

  • リレーションシップと外部キー制約について

    ■最終的にやりたいこと ・なるべくコード(SELECT文など)を見ずに、「DB」「テーブル定義者」「ER図」等からテーブル間の関係性を把握したい ■具体例 ・投稿一覧。「userテーブル」「postテーブル」 ・「postテーブル」の「user_id」カラムは、「userテーブル」の「id」カラムに対応 ※簡易な場合はある程度想像は付くのですが、ちょっと複雑な構成になると途端に苦労するので、何か良い方法はないかと思い、質問しました ■質問 ◆「リレーションシップを組む」際、「外部キー制約」はかけるのでしょうか? 例えば、上記「投稿一覧」DBを構築する際では、どうするのでしょうか? 1.普通、「外部キー制約」をかける 2.普通、「外部キー制約」をかけない 3.どちらでも良い ◆「外部キー制約」は何の為にかけるのでしょうか? ・「SELECT&JOIN」でデータ取得出来るのであれば、「外部キー制約」と「リレーションシップ構築」に関係性はないと思うのですが、そういう認識で合っているでしょうか? ・参照先データが削除されたら整合性がとれなくなる場合のみかけるものでしょうか? ◆「リレーションシップを確認」する目的で、「外部キー制約」をかけても良いのでしょうか? ・「データ削除の整合性」ではなく、「リレーションシップを確認」する目的で外部キー制約」をかけても良いのでしょうか? ◆「外部キー制約」以外に、「リレーションシップを確認」する方法はあるのでしょうか? ・コード(SELECT文など)を見ずに、テーブル間の「リレーションシップを確認」する方法としては、「外部キー制約」以外に何かあるのでしょうか? ・そもそも、「外部キー制約確認」=「リレーションシップ確認」という考えは正しいのでしょうか?

    • ベストアンサー
    • MySQL
  • Access 複数テーブルのリレーションシップ

    Access2013  4種類の名簿をそれぞれのテーブル(4種類)で管理してありますが、 同じ方(氏名)が4種類の名簿全部には無く、2つや3つの名簿にばらばらにあります。  この4つのテーブルを同時に表示し入力できる分割フォームをつくりたいのですが、 この際の、4つテーブルの氏名をリレーションシップする結合プロパティの設定方法を教えて下さい。 あるいは、クエリのそれぞれのテーブルのフィールド(氏名)の抽出条件になんと書き入れたらよいか。教えて下さい。 宜しくお願いします

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

  • Access(リレーションシップについて) 

     Win XP Office 2003 Accessを勉強中です。  デザインビューでクエリを作成するときに、関連するテーブルを表示させると自動的に「結合プロパティ」の線が表示されますが、 この表示で自動的に「1対多」を表示する時としない時がありますが、これは何故でしょうか。  これはどこかから設定をしてやるのでしょうか。  また、同じような線としてメニュバーから「リレーションシップ」を表示させることが出来ますが、 内容的には「結合プロパティ」と同じものですが、これは「リレーションシップ」とはどのようなに使い分けるものでしょうか。

  • MS ACCESSにおいてのリレーションシップ設定

    ACCESSを使用してシステムを構築しているのですが、テーブル間のリレーションシップについて疑問があります。 リレーションシップを設定することにより、データベースの整合性を得ることができますが、その他のメリットはあるのでしょうか? ある文献では検索時間の短縮になるとあったのですが、本当なのでしょうか? 通常の表結合クエリーと参照整合性以外の違いはどのようなものでしょうか? 回答をお願いします。

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • Access2000のリレーションシップのエラーについて

    どのくらい説明すればいいのかわからないのですが、アクセス2000でリレーションシップの設定をするときに、 「主テーブルで参照されているフィールド用の固有インデックスがありません。」 というエラーメッセージが出てきてリレーションを作る事が出来ません。 問題なのは3つのテーブルのリレーションなのですが、それぞれのインデックスをチェックすればいいのだとは思いますが、対象となったフィールドは主キーではないので、重複は許可していますが、一応どちらもインデックスは作成しています。 どのようなリレーションシップかというと、業者テーブルと商品テーブルと販売履歴テーブルのリレーションで、 商品テーブルの業者IDと業者テーブルのIDのリレーション→左内部結合(商品テーブルの全フィールドに入れる) 業者テーブルの業者IDと販売履歴の業者IDのリレーション→右内部結合 は出来るのですが、商品テーブルの商品名と値段フィールドと、販売履歴の対応する部分についてのリレーションについてもたせようとするとエラーが出てしまいます。このようなリレーションはいらないのでしょうか? どちらも固有の値でない量のリレーションだからなのでしょうか? この二つのフィールドの参照整合性をどう保てばいいのか教えて下さい。

  • Accessのリレーションシップについて

    家にあるAccessの本やヘルプを見たのですが、いまいちよくわからないので 教えてください。 リレーションシップの結合の種類なのですが、 内部結合、左外部結合、右外部結合の3つがよくわかりません。 どういった時に、設定しなければいけないのかがわかりません。  どうか、具体例など挙げて教えていただければうれしいです。

  • アクセスのリレーションシップについて

    ACCESS のリレーションシップについて教えてください! 今、 ★基本情報(会社情報)   L★会社毎案件情報     L★案件毎履歴 を 3つのテーブルで  1対多 のリレーションシップを組んでいます。 ここまではいいのですが、  企業毎の案件が無い場合で 企業毎に アプローチ履歴を つけるとしたらどのようにリレーション組んだらよろしいでしょうか? ↓このようにテーブルを組みたいと考えてます。 ★基本情報(会社情報)(主キー企業ID) | L★会社毎案件情報(主キー案件ID) |   L★案件毎履歴 L★会社毎履歴 ★会社毎履歴 の には 企業ID と 履歴IDの数値型を  おいてますが、1つのテーブルから 2箇所のテーブルへ  1対多  はいくらやってもできなかったのでこのような  形で運用できる 方法があれば教えてください。 アクセスははじめたばかりで、なるべくクエリや、 なるべくシンプルで簡単な方法があればご伝授いただければと 思いますなにとぞよろしくお願いいたします。 

専門家に質問してみよう