INSERT文マクロ

2017/11/23

f:id:ainekurainenahatomujiku:20170729132004p:plain

Sub Insert()

////////////////////////////////////////////////////////////////////////////////////////////
// キーショートカット Ctrl + Shift + I
////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////
// 変数宣言
////////////////////////////////////////////////////////////////////////////////////////////

Dim display As New UserForm1

Dim row As String 行番号

Dim rowsCnt As String 選択範囲の行数

Dim col As String 列番号

Dim colsCnt As String 選択範囲の列数

Dim tblName As String テーブル名

Dim insertHeader As String INSERT文のヘッダ項目

Dim insertBody As String INSERT文のボディ項目

Dim tmpVal As String 選択範囲のデータ格納用変数


////////////////////////////////////////////////////////////////////////////////////////////
// 選択範囲より行列情報の取得
////////////////////////////////////////////////////////////////////////////////////////////

row = Selection.row 選択範囲の左上のセルの行番号取得

rowsCnt = Selection.Rows.Count 選択範囲の行数取得

col = Selection.Column 選択範囲の左上のセルの列番号取得

colsCnt = Selection.Columns.Count 選択範囲の列数取得

////////////////////////////////////////////////////////////////////////////////////////////
// INSERT文のヘッダ部生成
////////////////////////////////////////////////////////////////////////////////////////////

tblName = Range("C2").Value テーブル名取得
tblName = Selection(1).Offset(-1, 0).Value テーブル名取得

tblName = Range(Cells(row, col).Value テーブル名取得

insertHeader = "INSERT INTO " & tblName & "("

取得した列数分だけINSERT文のヘッダ項目を作成
For i = 0 To colsCnt - 1

1つ目のカラムの場合
If i = 0 Then
insertHeader = insertHeader & Cells(row, col + i)

2つ目以降のカラムの場合
Else
insertHeader = insertHeader & ", " & Cells(row, col + i)
End If
Next

////////////////////////////////////////////////////////////////////////////////////////////
// INSERT文のボディ部生成
////////////////////////////////////////////////////////////////////////////////////////////

取得した行数分だけINSERT文のボディ項目を作成
For i = 1 To rowsCnt - 1

INSERT文のボディ項目にVALUES句を追記

insertBody = ") VALUES ("

取得した列数分だけVALUES句のデータを追記
For j = 0 To colsCnt - 1

選択したセルのデータを取得
tmpVal = Cells(row + i, col + j)

選択したセルが1つ目のカラムの場合
If j = 0 Then
insertBody = insertBody & "" & tmpVal & ""

選択したセルが2つ目以降のカラムの場合
Else
insertBody = insertBody & ", " & tmpVal & ""

End If

Next

////////////////////////////////////////////////////////////////////////////////////////////
// 処理結果の格納
////////////////////////////////////////////////////////////////////////////////////////////

ヘッダ部とボディ部を結合し、改行
output = output & insertHeader & insertBody & " );" & vbCr

Next

////////////////////////////////////////////////////////////////////////////////////////////
// ユーザーフォームのテキストボックスに表示
////////////////////////////////////////////////////////////////////////////////////////////
display.TextBox1.Text = output
display.Show

End Sub