• 締切済み

マクロでエクセル内のテキスト加工(SQL文生成)

SQL文をエクセルマクロで生成したいのですが、この質問にはSQLの知識は全く不要と思います。 検索対象のデータベースからある項目が検索キーワードにヒットするものだけ、 指定の項目を抽出するSelect文を書いて作業しているのですが、 キーワードが多数あるため、手作業で書くのが大変なので、マクロで自動生成したいです。 Sheet1内に以下の内容を記述 ・データベース名 ・検索対象の項目名 ・抽出する項目名を以下のように縦に列挙(個数は変動) ・1行のSQL文に含めるキーワード数(後述) 項目名1 項目名2 項目名3 項目名4 項目名5 ・ ・ ・ Sheet2には検索キーワードが以下のように縦に列挙(個数は変動) キーワード1 キーワード2 キーワード3 キーワード4 キーワード5 ・ ・ ・ Sheet1、Sheet2の内容から、Sheet3に以下のSQL文を生成したいのです。 Select 要素1, 要素2, 要素3, 要素4, 要素5 FROM データベース名 WHERE 項目名 = 'キーワード1' OR 検索対象の項目名 = 'キーワード2' OR 項目名 = 'キーワード3' ただし、キーワードの数が数千になることもあるため、 前述のSheet1で指定した数値の数毎に次の行にしたいです。 例えばこんな感じ Select 要素1 FROM データベース名 WHERE 項目名 = 'キーワード1' OR 検索対象の項目名 = 'キーワード2' OR 項目名 = 'キーワード3' Select 要素1 FROM データベース名 WHERE 項目名 = 'キーワード4' OR 検索対象の項目名 = 'キーワード5' OR 項目名 = 'キーワード6' ・ ・ ・ Select 要素1 FROM データベース名 WHERE 項目名 = 'キーワード1000' OR 検索対象の項目名 = 'キーワード1001' ご存知の方いたらご教授ください。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

キーワード数に「後述」とあるがどこに説明がある? 条件が複数あってもorだから、inで列挙してはどうかな?

tanapyondai
質問者

補足

ただし、キーワードの数が数千になることもあるため・・・以降が後述にあたります。 分かりづらくてすみません。 確かにinでまとめるべきですね。

関連するQ&A

  • 検索が速くなるSQL文を教えてください

    データベースに、例えば辞書に載っている単語が1000万件分入っているデータベースがあるとします。 このデータをあいうえお順に昇順にソートした上で、500万番目から30個のデータ(つまり、5,000,000番目~5,000,029番目)までのデータを取り出したいです。 このようなケースで検索がもっとも高速になるSQL文の書き方はどのような描き方になるのでしょうか? SELECT keyword FROM table ORDER BY keyword OFFSET 5000000 LIMIT 30 と書いたのですが、すごく遅いです。OFFSETが0であればとても速いです。

  • SQLのSelect文をfor nextしたい

    Select from where文で A1~A〇(〇は可変)セルに記入されているものを検索対象にしたく、 構文を無視して希望したい完成形を大雑把に書くと aaa = Range("A1").End(xlDown).Row SQL = Select * from TBL  for i = 1 to aaa where Fld = cells(i,1) next i こうなるのですが、当然動くはずもなく。 ORやINでも予め検索する個数が固定されていないとダメなような気がするのですが どのように文を書くとよろしいのでしょうか?

  • SQL文について質問させて頂きます。

    いつもお世話になっております。いろいろSQL文の本を読んだのですがわからないので今回もよろしく お願い致します。 SELECT DISTINCT * FROM bukken WHERE (id IN (SELECT fid FROM fudou_kodawari WHERE kid IN (1,4))) というSQL文があるのですが、これだと1,4が1つでも含まれるリストが出てくるのですが1,4が完全に一致しないと出てこないようにするにはどのようにSQL文を変更すれば良いのでしょうか? 何卒よろしくお願い致します。

  • SQL文

    名前、性別、年齢の載っているA表から19歳以下の女性、または26歳以上の女性の名前を抽出するSQL文はSELECT 名前 FROM 表A WHERE 性別=’女’AND 年齢<20 OR 性別=’女’AND 年齢>25 が正解ですが、性別=’女’を1回にして SELECT 名前 FROM 表A WHERE 性別=’女’AND 年齢<20 OR  年齢>25 ではだめでしょうか。教えてください。

  • SQL文で

    SQLのWHEREの条件文の中に、「(+)」というのがあるのですが、 どういう意味なのでしょうか? select * from Office WHERE a.Office_cd=b.Office_cd(+) といった感じですが。 よろしくお願いします。

  • sql select文の作り方で困っています

    C#2010で作ったアプリ から sql サーバー2008のデータベースにselect文を発行する際に困っています 検索キーワードが3つあるのですが、3つのキーワードの組み合わせでselect文を発行したいのですが、種類がたくさんできてしまい 困っています 例えば、検索キーワード A、B、Cの3つとすると、以下の組み合わせで7種類ものselect文を作るのが煩わしいです GetData(A) GetData(B) GetData(C) GetData(A,B) GetData(A,C) GetData(B,C) GetData(A,B,C) これらを1つのselect文でさばくには、どうすれば良いでしょうか? ご指導よろしくお願いいたします

  • FROM SQL文 がしたい

    いつもお世話になってます。 SQL分の 「SQL1」 「SQL2」 を予めstring変数に入れておいて、 SELECT SQL1.項目x, SQL2.項目y FROM SQL1,SQL2 WHERE SQL1.項目z = SQL2.項目z ということがしたいのですが、そんなことできますか? アクセスのクエリではできたのですが。

  • SQL文でWhere+orを使う理由

    ItemsテーブルからValueにAという値かBという値を持ってる人のNameを取得するSQL文について調べたのですが、以下のようになってました。 SELECT Name FROM Items WHERE Value IN ('A', 'B') これで動く結果については納得できたのですが、ORを使っても良いのではないでしょうか。以下のようなやり方は出来ないのかと思ったのですが SELECT Name FROM Items WHERE Value = 'A' or 'B' のように=(イコール)の後の値にorをつけるという書き方は見当たりませんでした。これで動かない場合、以下の方法なら動くはずだと思います。 SELECT Name FROM Items WHERE Value = 'A' or Value = 'B' おそらく結果はINを使った場合と同じだと思うのですが、これはどのようにして使い分けられているのでしょうか?文の短さで言えば値が複数の場合はINの方がはるかに短くなってスマートですが、単数でもINの方が短く済みそうな気がします。INの後のカッコ内に更にSQL文を書くことも出来ますし、Where+orの意義がよく分からなくなってきました。

  • SQL文について

    商品表と注文表から、注文のある商品名を知るためのSQL文で、適切なものはどれか。 商品表(商品番号,商品名,単価) 注文表(注文番号,商品番号,注文数) 答えはこれ↓なんですが、なぜなのか分かりません。 SELECT 商品番号,商品名 FROM 商品表        WHERE EXISTS (SELECT * FROM 注文表 WHERE 商品番号 = 商品表.商品番号)

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

専門家に質問してみよう