【EXCEL】SQLのWHERE条件的な処理の実現法EXCELの2

Writer: admin Type: clarksre Date: 2019-01-08 00:00
【EXCEL】SQLのWHERE条件的な処理の実現法EXCELの2つの表を、データベースのテーブルに見立てて、複数の条件が一致するデータを取得したいのですが、EXCELにあまり詳しくない為、悩んでいます。お手数ですが、解決方法について、ご教示宜しくお願い致します。(例)以下のような「表A」「表B」があった場合表A-------------|ID1|ID2|名 前|・・・-------------| 1| 1|AAA|・・・-------------| 1| 2|BBB|・・・-------------| 2| 1|CCC|・・・-------------| 2| 2|DDD|・・・-------------表B---------------No|日 付|ID1|ID2|・・・--------------- 1|2018/01/01| 1| 1|・・・--------------- 2|2018/01/01| 1| 2|・・・---------------SQLで書くと、SELECT 表B.No,表B.日付,表A.名前FROM 表A,表BWHERE 表A.ID1 = 表A.ID1 AND 表A.ID2 = 表A.ID2みたいな事を実現したいと考えています。一応調べて、INDEX関数とMATCH関数を使い、WHERE条件が1つの場合は上手くいきましたが、条件が2つ以上になると上手くいきませんでした。この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。###ADO経由ならSub test()Dim thispaththispath = ThisWorkbook.Path & "\" & ThisWorkbook.NameDim cn As New ADODB.Connectioncn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & thispath & ";Extended Properties=""Excel 8.0;"""Dim rs As ADODB.RecordsetDim fldcntDim SQLSQL = "SELECT 表B.[No], 表B.[日付], 表A.[名前] " & _" FROM [表A$] as 表A inner jin [表B$] as 表B " & _" WHERE 表A.ID1 = 表B.ID1 AND 表A.ID2 = 表B.ID2"Set rs = cn.Execute(SQL)Dim iDo Until rs.EOFFor i = 0 To rs.Fields.Count - 1Debug.Print rs.Fields(i)Nextrs.MoveNextLooprs.CloseSet rs = Nothingcn.CloseSet cn = NothingEnd Subとかでしょうか?RecordsetをCopyFromRecordsetメソッドでシートに貼り付けることが多いですけどhttps://msdn.microsoft.com/ja-jp/library/cc408450.aspx?f=255&MSPPEr...ただ、結合についてインデックスがそもそもないので総当たり方式になります。パフォーマンス的にはあまりおすすめしません。ナイス0
###この質問は投票によってベストアンサーに選ばれました!###> WHERE 表A.ID1 = 表A.ID1 AND 表A.ID2 = 表A.ID2どっちも表Aになってますが……抽出は Excelの場合フィルタを使うのが定石です。関数でできるのは検索で 無理やりやればできなくはないですがあまりお勧めしません。そのまま SQLを使ったらどうでしょう。 Excelでも使えます。詳しく解説しているページはありませんがExcel:条件を指定して抽出する3(パラメータクエリ編)http://www.geocities.jp/chiquilin_site/data/160502_extraction3.htmlここを参考にどうぞ。ナイス0

 

TAG