
Sub ボタン1_Click()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim r As Long, c As Long
Dim tableName As String
Dim sql As String
Dim columns As String
Dim values As String
Dim colType As String
Dim v As Variant
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.columns.Count).End(xlToLeft).Column
tableName = ws.Cells(1, 1).Value
columns = ""
For c = 2 To lastCol
columns = columns & ws.Cells(1, c).Value & ","
Next c
columns = Left(columns, Len(columns) - 1)
For r = 3 To lastRow
values = ""
For c = 2 To lastCol
colType = LCase(ws.Cells(2, c).Value)
v = ws.Cells(r, c).Value
If Trim(v) = "" Then
values = values & "NULL,"
Else
Dim baseType As String
baseType = Split(colType, "(")(0)
Select Case baseType
Case "int", "bigint", "smallint", "tinyint", _
"decimal", "numeric", "float", "real", _
"money", "smallmoney"
values = values & v & ","
Case "date", "datetime", "datetime2", _
"smalldatetime", "datetimeoffset"
values = values & "'" & Format(v, "yyyy-mm-dd HH:mm:ss") & "',"
Case "bit"
If v = True Or v = 1 Then
values = values & "1,"
Else
values = values & "0,"
End If
Case "uniqueidentifier"
v = Replace(v, "'", "''")
values = values & "'" & v & "',"
Case "varchar", "nvarchar", "char", "nchar", "text", "ntext"
v = Replace(v, "'", "''")
values = values & "'" & v & "',"
Case Else
v = Replace(v, "'", "''")
values = values & "'" & v & "',"
End Select
End If
Next c
values = Left(values, Len(values) - 1)
sql = "INSERT INTO " & tableName & " (" & columns & ") VALUES (" & values & ");"
ws.Cells(r, lastCol + 1).Value = sql
Next r
MsgBox "SQL Server 用 INSERT文の生成が完了しました"
End Sub