LoginSignup
1
2

More than 5 years have passed since last update.

Excelシートにあるそこそこ多めのデータに対してinsert文を生成する

Last updated at Posted at 2016-08-05

あのときのExcel遺産シリーズです。Excelに15000行程ためてたデータをDBに放り込みたくてどうしようかなーと悩んでいて取った方法です。ググッてみるとクリップボードにコピーするところまでやっている方もいたのですが、そこまではいけませんでした。今回はこういう感じ↓でDBのテーブルと全く同じ定義をしたExcelシートにデータが入っているときに1行ずつinsert文を生成し、隣のセルに書き込むというのをします。

こういうシートが

id col1 col2 col3 insert文が入るセル
1
2
3
4
5
...

こうなる

id col1 col2 col3 insert文が入るセル
1 insert into tbl_name (col1, col2) ...
2 insert into tbl_name (col1, col2) ...
3 insert into tbl_name (col1, col2) ...
4 insert into tbl_name (col1, col2) ...
5 insert into tbl_name (col1, col2) ...
... insert into tbl_name (col1, col2) ...

insert文を生成

Sub insert文を生成()

Dim i As Long
Dim LastRow As Long
Dim tbl_name As String
Dim insertstmt1 As String, insertstmt2 As String

'id列で最終行が何行目が取得します。
'途中で空白があることは考慮していません
LastRow = Range("a2").End(xlDown).Row

'例えばこういう形式のinsert文を生成したいとき
'INSERT INTO tbl_name (col1, col2, col3) VALUES (data1, data2, data3);
'(idはauto_incremntになっているとします)
tbl_name = "tbl_name"
insertstmt1 = "INSERT INTO " & tbl_name
insertstmt2 = "(col1, col2, col3, col4) VALUES ("

'最後の');'を忘れないようにしてください
For i = 2 To LastRow
Cells(i, 5) = insertstmt1 & insertstmt2 & _
                "'" & Cells(i, 2) & "'" & ", " & _
                "'" & Cells(i, 3) & "'" & ", " & _
                "'" & Cells(i, 4) & "'" & ");"
Next

End Sub

これだけです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2