[Excel ADO]未登録データの抽出方法

このQ&Aのポイント
  • Excel ADOを使用して、名簿に未登録のデータを抽出する方法について教えてください。
  • CSVデータをADOによるSQL処理している中で、名簿に未登録のデータを抽出する方法を知りたいです。
  • Excel2007を使っている際に、名簿に未登録のデータを抽出する方法について教えてください。
回答を見る
  • ベストアンサー

[Excel ADO]未登録データの抽出方法

Excel2007を使っています CSVデータをADOによるSQL処理していますが、 名簿に未登録のデータが入っているかどうかを抽出するにはどうしたらいいでしょうか? T_名簿 No,登録者名 1,佐藤 2,鈴木 : という名簿に対して T_訪問者 No,日付,訪問者名 1,0601,鈴木 2,0601,佐藤 3,0602,山田 : という訪問者リストと照らし合わせ、山田さんは未登録者リストとして出力するというものです SELECT * FROM T_訪問者 WHERE 訪問者名 NOT IN (SELECT 登録者 FROM T_名簿) などとしてみましたが、うまくいきません SELECT * FROM T_訪問者 WHERE 訪問者名 NOT IN ('佐藤','鈴木') とすると出てくるのですが、名簿の中身は数十はあり変動もあるのでそのまま列挙はできません リテラル部分をテーブルから持ってくる方法、あるいは全く別のやりかたなど ありましたら教えてください よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

SQLだけで。 SELECT * FROM T_訪問者 WHERE NOT EXISTS ( SELECT * FROM T_名簿 WHERE T_名簿.登録者名 = T_訪問者.訪問者名 ); これだと、たとえば、 T_名簿 No,登録者名 1,佐藤 2,鈴木 T_訪問者 No,日付,訪問者名 1,0601,鈴木 2,0601,佐藤 3,0602,山田 4,0602,田中 とすれば、上記SQL文で、 山田と田中が表示されます。

hzd00430
質問者

お礼

バッチリです ありがとうございました

関連するQ&A

  • RE: [Excel ADO]未登録データの抽出法

    以前質問した内容↓で、一旦解決したかに思えたのですが http://okwave.jp/qa/q9185441.html Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & ";" & _ "Extended Properties='Excel 8.0;HDR=YES'" CN.CursorLocation = adUseClient Sql = "SELECT * FROM T_訪問者 WHERE NOT EXISTS " & _ "( SELECT * FROM T_名簿 WHERE T_名簿.登録者名 = T_訪問者.訪問者名 )" Set RS = CN.Execute(Sql) Debug.Print RS.RecordCount 以上のようなコード(疑似です)で、 未登録データがないにもかかわらず、RS.RecordCountが1を返す場合があります Sql = "SELECT COUNT(*) FROM T_訪問者 WHERE NOT EXISTS " & _ "( SELECT * FROM T_名簿 WHERE T_名簿.登録者名 = T_訪問者.訪問者名 )" として、件数を出した場合も同様です。 RS.fields(0)などはNULLのままで何も入っていません 未登録データがある場合の抽出は全く問題ないのですが、 抽出数が0(登録済みデータだけ)なら通常処理、といきたいのに うまくいかず困っています。 何が悪いのでしょうか。

  • 出欠登録について

    現在phpとデータベースにて出欠登録を作成しています。 データベースには メンバーのテーブル、スケジュールのテーブル、出欠登録用のテーブルがあります。 $schedule_id = $_GET["scheduleno"]; $memberquery = sprintf("SELECT * FROM `member`"); $schedulequery = sprintf("SELECT * FROM `schedule` WHERE `scheduleno`='$schedule_id'"); $entryquery = sprintf("SELECT * FROM `entry` LEFT JOIN `member` ON `member_id`=member.no WHERE `schedule_id`='$schedule_id' AND `member_id`='$member_id'"); memberテーブル | no | 名前 | | 1 | 佐藤 | | 2 | 鈴木 | | 3 | 渡辺 | scheduleテーブル | no | 日程 | | 1 | 2011-01-23 | | 2 | 2011-01-30 | entryテーブル | no | schedule_id | member_id | entry | | 1 | 1 | 1 | 1 | | 2 | 1 | 2 | 2 | としてり、 出席者を割り出すには $entryquery1 = sprintf("SELECT * FROM `entry` LEFT JOIN `member` ON `member_id`=member.no WHERE `schedule_id`='$schedule_id' AND `entry` = 1"); 欠席者を割り出すには $entryquery2 = sprintf("SELECT * FROM `entry` LEFT JOIN `member` ON `member_id`=member.no WHERE `schedule_id`='$schedule_id' AND `entry` = 2"); としています。 ここで質問なのですが、出席者や欠席者は取得できていますが、未登録者を取得ができず困っています。 例 出席者 佐藤 欠席者 鈴木 未登録者 渡辺 としたいが、未登録者 渡辺がだせない。 どなたか仕組みを教えていただけないでしょうか? また、ソースも教えていただけれると助かります。

    • ベストアンサー
    • PHP
  • Excel2007並べ替えについて

    元々あった名簿は、50音順ではありませんでしたが、昇順の並べ替え機能で50音順に並べ替え、名簿を作り直しました。 今度は、50音順の名簿から元の名簿に順序を戻したいのですが、そのような方法はあるのでしょうか。 名前と点数の2つの列のみ並べ替えたいです。 例) 山田 佐藤 渡辺 鈴木 : : だったのを 佐藤  70 鈴木  80 山田  60 渡辺  90 という名簿に作り変えました。これを、 山田  60 佐藤  70 渡辺  90 鈴木  80 と元の順に、右隣の列の点数も一緒に並べ替えたいのです。 何か方法があれば教えてくださいませんか。

  • 漢字とふりがなで抽出できるようにしたい

    長くなりますがお付き合いいただければ幸いです。 T名簿(テーブル) 名前   ふりがな     所属(フィールド) 佐藤武   さとうたけし      B社 田中太郎  たなかたろう      A社 ****************************************************** F名簿(フォーム) 名前テキスト 所属テキスト を配置しています。 ****************************************************** 名前も所属もNull値でも検索できるようにしたいので SELECT T名簿.名前, T名簿.ふりがな, T名簿.所属 FROM T名簿 WHERE (((T名簿.名前) Like "*" & [Forms]![T名簿]![名前テキスト] & "*") AND ((T名簿.所属) Like "*" & [Forms]![T名簿]![所属テキスト] & "*")); としました。 このクエリなら F名簿の名前テキストに「佐藤武」と入力したら、佐藤武のレコードが表示されます。 さらに F名簿の名前テキストに「さとうたけし」と入力しても 佐藤武のレコードが表示できるようにしたいのですがどうすればいいでしょうか?

  • WHERE句だと抽出できない VBA ADO

    アクセスのADOについて質問があります。 SQL文の中でWHERE句を使ってフィルタをすると返り値が0件になるのに、 rs.Open strSQLした後に、 rs.Filterで抽出すると、適切な数値が返ります。 具体的に言うと 【1】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名 WHERE (((T_会社名.住所) Like ""*埼玉*""));" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic i = rs.RecordCount 【2】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名;" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic rs.Filter = "T_会社名.住所 like '%埼玉%'" i = rs.RecordCount だと、【2】が、適切な数値が返ります。 なぜ【1】はダメなのでしょうか?

  • NOT EXITSを用いたデータ抽出

    以下の様のテーブル内容でb_tblにないa_tblのデータを抽出するにはNOT EXITSを使用したSQLはどの様に記述すればよいでしょうか。尚、NOT INでは以下の様な記載になりますが、これを単純にNOT EXITSに置き換えると同様の結果が得られません。 select distinct a from a_tbl where a not in (select a from b_tbl); a_tblの内容 項目a 10001 10001 11001 12002 13003 13003 13003 14004 14004 15005 15005 16006 16006 16006 17007 18008 18008 18008 b_tblの内容 項目a 10001 11001 13003 15005 17007 結果 12002 14004 16006 18008

  • エクセルでデータ抽出→並べ替え

    エクセルで   A列   B列   C列    D列  E列        4月1日 9:00 山田太郎   9:15   佐藤仁  4月1日 10:05 佐藤聡 10:00 鈴木正夫  4月1日 11:15 高橋二郎 11:00 山田勇        4月2日 9:05 渡邊正志 9:15 佐々木正夫        4月2日 10:00 山田太郎  10:15 佐藤仁         4月2日 11:02 佐藤仁   11:00 高橋二郎 という複数の営業マンの訪問予定表があります。この「山田太郎」さんに 月間の訪問予定表を発行したいと思っています。 ※発行対象は全員です。 関数でもマクロでも結構ですが、ご教授いただけると助かります。

  • SQLiteのLike句で抽出できない

    SQLiteのLike句で抽出できないレコードがあります。 原因についてご教授いただけますでしょうか。 以下、操作手順になります。 ■データベースの作成 C:\>sqlite3.exe member.db SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" ■テーブルの作成、レコードの追加 sqlite> create table t_member(name text, age integer); sqlite> insert into t_member values('山田一郎', 25); sqlite> insert into t_member values('田中次郎', 35); sqlite> insert into t_member values('鈴木三郎', 45); ■検索 sqlite> select * from t_member where name like '%一郎'; 山田一郎|25 sqlite> select * from t_member where name like '%次郎'; 田中次郎|35 sqlite> select * from t_member where name like '%三郎'; sqlite> 三郎だけが検索条件に適合しないのは何故でしょうか。 よろしくお願いします。

  • Access もっと簡単な抽出方法はありますか?

    お世話になります。 Access2010 抽出方法についてご教示下さい。下記のテーブルがあります。 <社員テーブル> 社員番号 氏名   性別  血液型 00100  山田太郎  男性  A 00200  鈴木一郎  男性  A 00300  田中次郎  男性  B 00400  鈴木花子  女性  O <人事テーブル> 社員番号 人事C   部署名C  開始日    終了日 00100   1           2000/04/01  2000/04/01 00100   2     2     2000/04/01  2005/03/31 00100   3     1     2005/04/01  2008/04/01 00100   3     3     2008/04/01 00200   1           2005/04/01  2004/04/01 00200   2     1     2005/04/01  2007/03/31 00200   3     3     2008/04/01 00300   1           2010/10/01  2010/10/01 00300   2     2     2010/10/01 00400   1           2011/04/01  2011/04/01 00400   2     1     2011/04/01  2015/03/31 00400   4           2015/03/31  2015/03/31 ※人事Cの1(入社)の登録では部署名Cは登録されず、別レコードに  登録されます。 <人事マスタ> 人事C 人事  1  入社  2  人事  3  部署移動  4  退職 <部署マスタ> 部署名C  部署名  1    営業部  2    経理部  3    総務部 最終的にフォーム上のリストボックスに下記にように表示したいところです。 社員番号 部署名 氏名   性別 血液型 00100   総務部 山田太郎 男性  A 00200   総務部 鈴木一郎 男性  A 00300   経理部 田中次郎 男性  B 00400   営業部 佐藤花子 女性  O 下記のようにやって、とりあえず抽出はできたのですが。。 もっとよい方法があればお教え頂けたらと思います。 1.人事テーブルで人事Cが2 or 3で抽出し、グループ化、かつ開始日の最大  でクエリを作成   00100 2008/04/01   00200 2008/04/01   00300 2010/10/01   00400 2011/04/01 2.1のクエリと人事テーブルを社員番号と開始日で紐づけてクエリ作成  社員番号  部署名C   開始日    00100    3     2008/04/01  00200    3     2008/04/01  00300          2010/10/01  00300    2     2010/10/01  00400          2011/04/01  00400    1     2011/04/01  このように、00300と00400については入社のレコードも抽出されて  しまうので、ここでさらに部署名CをIs Not Nullとする。  00100    3     2008/04/01  00200    3     2008/04/01  00300    2     2010/10/01  00400    1     2011/04/01 3.社員テーブルと2のクエリ、部署マスタを紐付けます。  社員テーブル---------2のクエリ---------部署マスタ       (社員番号)    (部署名C)  このクエリをリストボックスのソースとしてます。 なお、実際には1と2のクエリはひとつにまとめてます。 SELECT Q.社員番号, 人事テーブル.部署名C FROM (SELECT 人事テーブル.社員番号, Max(人事テーブル.開始日) AS 開始日の最大 FROM 人事テーブル WHERE (((人事テーブル.人事C)=2 Or (人事テーブル.人事C)=3)) GROUP BY 人事テーブル.社員番号) AS Q INNER JOIN 人事テーブル ON (Q.開始日の最大 = 人事テーブル.開始日) AND (Q.社員番号 = 人事テーブル.社員番号) WHERE (((人事テーブル.部署名C) Is Not Null)); もっとシンプルに結果を出せるのでは?ということで質問させて 頂いた次第です。 宜しくお願い致します。

  • SQL NOT INで抽出できない

    SQL NOT INで抽出できない SQLで条件抽出したいと思っています。テーブル1に「名前」というフィールドがあるとします。名前には「青木さやか」、「矢口真里」、「青山裕子」、「山田はな子」・・・などがあります。文字列の中に「青」や「子」が含まれていたら、抽出条件から外すといった処理をしたいと思っています。この例でいうと、「青木さやか」、「山田はな子」は抽出条件から外します。 そこで、 select 名前 from テーブル1 where 名前 NOT IN('青','子') といったら文を書きましたが、うまく動きません。どういった文にすればよいでしょうか?よろしくお願いいたします。

専門家に質問してみよう