• ベストアンサー

EXCEL VBAでSQL文自動作成

VBA初心者です。 エクセルに入ってる値をVBAで自動的にINSERT文を作りたいと思っております。 とりあえず簡単でいいんで教えていただけないでしょうか。 ---------------------------------------------------------- A1:テーブル名 B1:shain A2:カラム名  B2:ID    C2:NAME      D2:address A3:型 B3:int   C3:varchar(20)   D3:varchar(30) B:41 C4:鈴木 D4:suzuki B:52 C5:阿部 D5:abe B:63 C6:田口 D6:taguchi 上記のようなエクセルがあります。 INSERT INTO shain(ID,NAME,address) values(1,'鈴木','suzuki'); というINSERT文を作りたいと思っております。 他にツールはあると思いますが、VBAのみで作らなければなりません。 めっちゃ困ってるんでどなたか助けてください

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

1.B1からテーブル名を取得して、"INSERT INTO テーブル名"という文字列を作成する。 2.B2から横方向に空セルまで走査して、"(カラム1,カラム2,カラム3,...)"の文字列を作る。 3.B4から横方向に2で走査した列と同じ数だけ走査して、"VALUES(値1,値2,値3,...)"の文字列を作る。このとき、列毎に3行目の値(型名)を確認して、型が文字列(charを含む)なら''で値を括る。 4.1,2,3で作った文字列を結合。 5.空行になるまで3,4を繰り返す。

その他の回答 (1)

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.1

VBAでももちろん作れますが、もっと簡単に作れますよ。 E4セルに、 ="INSERT INTO "&$B$1&"("&$B$2&","&$C$2&","&$D$2&") values ("&B4&","&C4&","&D4&");" と書いて、セルをコピーしてE5,E6以下のセルにペースト。 表示されたE4~E6セルの結果をコピーしてテキストに貼り付け。 でどうでしょうか。

関連するQ&A

  • SQL文にて順位表をつくりたい

    create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values(1,"A",2012,1),(2,"B",2012,1),(3,"C",2012,1),(4,"D",2012,1),(5,"A",2012,2),(6,"B",2012,2),(7,"C",2012,2),(8,"D",2012,2),(9,"A",2011,1),(10,"B",2011,1),(11,"C",2011,1),(12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values(1,3,2,2),(3,1,4,0),(1,0,3,2),(2,2,4,2),(1,1,4,2),(2,0,3,0),(2,1,1,2),(4,1,3,3),(3,5,1,2),(5,3,6,3),(5,1,7,1),(7,1,8,1),(9,1,10,1),(11,1,12,3); データベース内にデータがあったときに年やleague_idごとに順位表を作りたいのですが、どのようにSQL文を書いてよいかわからず困っています。 理想はこのような感じです。 http://soccer.yahoo.co.jp/ws/standing/?l=52 お分かりの方がいらっしゃいましたらご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • エクセルでSQL文を自動で出力させたい

    INSERT INTO `TableInfo` ( `author_id` , `name` , `no` , `addr` ) VALUES ('其一', '其二', '其三', '其四'); 上記のようなテーブルがありINSERTでデータを登録させていきたいと思っています。 そこで、エクセルに打ち込んだデータを、 '其一' '其二' '其三' '其四' に置き換えてSQL文としてテキストファイル等に出力させたいと思います。 エクセルはあまり得意ではなくどうやれば良いか判りません。 どなたか御教授お願い致します。

  • SQL文がわかりません。

    SQL文がわからなく困っております。 下記のデータ*01を*02のデータのようにSELECTするためには、 どのようなSQL文を書けばよいのかお教えいただけますでしょうか? DBはoracle11gです。 ※01 ID      所属部署 _____________________________    1     a    1     b     2     a    2     b    2     c    3     a    3     b    3     c    3     d ____________________________ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ※02  ID   所属部署    所属部署2   所属部署3   所属部署4 _________________________________________   1         a         b 2         a         b         c 3         a         b         c         d

  • エクセルVBAで、INSERT文を生成

    エクセルのデータよりDBにINSERTするためのINSERT文を生成するマクロを作っています。 INSERT文生成のVBAはできたのですが、少し仕様がいつもと違い困っております。皆様のお知恵を拝借できればと思っております。 【仕様】 1.1行ずつセルに文字列があるかどうかチェックする 2.セルに文字列が入ってる場合、例えば"z_1"が入ってる場合、一番左端のセル(A列)に記載されているID、例えば"001"、とともにinsert文を生成。 → INSERT INTO TBL名 id,code VALUES ('001','z_1') 3.1行には複数文字列が入っている場合があるので、文字列がある限りinsert文を生成。 4.文字列がないと判明した場合、次の行へ移動。 【具体例】 A1のセルにID:001 1行目の行、C1のセルに"z_1"、F1のセルに"j_5"、M1のセルに"c_3"などといった文字列があります。 この行のセルを一個ずつチェックして文字列があると、A1のIDを参照して、 INSERT INTO TBL名 id,code VALUES ('001','z_1') などといったインサート文を生成。 文字列がある限りINSERT文を生成します。 お知恵を拝借できれば幸いです。

  • SQL文で

    T-SQLを使用しています。 下記のような場合どのようにSQL文を組めばよいのでしょうか?Group byを使用すると思うのですが・・・ テーブル名:SampleTbl フィールド1:ID(プライマリ) フィールド2:Name(varchar(4)) 【名前】 フィールド3:UpTime(varchar(16))【更新時刻】 ※UpTimeの概要 yyyyMMddhhmmssss 2004/06/01 12:00:0000 中身 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 4,鈴木,2004060112200000 5,山田,2004060112000000 抽出条件: 同一の名前で更新日が5分以内の範囲で更新されているデータのみ抽出する 抽出結果 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 上記の抽出結果を取得するにはどのようにすればよいか、ご教授お願い致します。

  • SQL INSERT文を作成したいのですが

    お世話になります。 INSERT文を作成したのですが条件が多すぎて難しいです。 教えてください。 ・AテーブルにB・C・D・Eテーブルを元にデータを抽出しINSERT処理をしたいです。 ・データはBテーブル(親)の項目1が'10'の場合 ・結合条件はCテーブル(子)=B.項目2 = C.項目2 Dテーブル(子)=B.項目2 = D.項目2 Eテーブル(子)=B.項目2 = E.項目2 アドバイスをよろしくお願いします。          

  • PostgresSQL のSQL文について(SELECT)

    PostgresであるSelect文がわかりません。 以下のテーブルより *KOUMOKU*[テーブル名] SUB1|SUB2|SUB3|SUB4|SUB5|ID_NAME A01 | | | | |大項目1 A01 |B01 | | | |大項目2 A01 |B01 |C01 | | |大項目3 A01 |B01 |C01 |D01 | |大項目4 大項目1~大項目4の値(ID_NAME)を一気に取得する SELECT文がわかりません。 よろしくお願いいたします。

  • SQL文 テーブルの作成方法について

    以下のようなTABLE1からTABLE2というテーブルを作成したいと考えております。 元テーブル(TABLE1)は、IDという項目がキーとなってデータが入っており、NAME1とNAME2という項目があります。 (NAME1は必ず値が入っていますが、NAME2は値が入っていない場合もあります) 加工後のテーブル(TABLE2)で、NAME1とNAME2の値を結合した形で結果を出力したいと考えております。 (新たに作成したNAMEカラムは、必ずしもユニークになっているとは限りません。NAMEとIDを組み合わせるとユニークになります) ---------------------------------------------------- ■ TABLE1 ID NAME1 NAME1_CATE NAME2 NAME2_CATE ---------------------------------------------------- 001 鈴木 A 山田 B 002 山本 A 003 佐藤 A 高橋 B ---------------------------------------------------- ---------------------------------------------------- ■ TABLE2 ID NAME NAME_CATE ---------------------------------------------------- 001 鈴木 A 001 山田 B 002 山本 A 003 佐藤 A 003 高橋 B ・・・ ---------------------------------------------------- いろいろ試していますが、どのようなSQL文を書いたらよいのか分かりません。 現状のSQL(エラーとなります) ====================================================================================== SELECT ID, NAME, NAME_CATE FROM (SELECT ID, NAME1 as NAME, NAME1_CATE as NAME_CATE FROM TABLE1 WHERE NAME1<>NULL) JOIN (SELECT ID, NAME2 as NAME, NAME2_CATE as NAME_CATE FROM TABLE1 WHERE NAME2<>NULL) ====================================================================================== 初歩的な質問になるかと思ってしまうかと思いますが、よろしくお願いいたします。

  • SQL文の書き方

    以下の様なテーブルがあったとして name ┌────┬───┐ │NAME_CD │ NAME │ ├────┼───┤ │1     │ hoge1│ ├────┼───┤ │2     │ hoge2│ ├────┼───┤ │3     │ hoge3│ └────┴───┘ id ┌───┬──┐ │ID_CD │ ID │ ├───┼──┤ │1    │ a1 │ ├───┼──┤ │2    │ b2 │ ├───┼──┤ │3    │ c3 │ └───┴──┘ 結果として ┌─┬───┐ │ID│ NAME │ ├─┼───┤ │a1│ hoge1│ ├─┼───┤ │b2│ hoge2│ ├─┼───┤ │c3│ hoge3│ └─┴───┘ のようにするにはどうしたらよいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?