あのときの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
これだけです。