【VBA】ExcelマクロからSQLのinsert文を自動生成する方法

カンボジアから帰国し、一ヶ月あまりが過ぎました。
まだまだ自己成長のために、隙間時間を見つけて勉強しております。

現在はExcelのマクロを勉強しておりまして、勉強の成果を記事にしてみました。ExcelからSQLのinsert文を作ります。

参考サイト:ExcelからSQLのINSERT文を作成するマクロ

下表の左上にカーソルを合わせて、マクロを実行すると、
キャプチャ
このようなinsert文が作られます。

INSERT INTO Member (ID, name, hometown, gender, birthday) values 
    (0, '稲葉浩二', '千葉県', '男', '1970/03/05'), 
    (1, '井上もも', '愛知県', '女', '1983/02/25'), 
    (2, '田村昂之', '新潟県', '男', '1991/01/10'), 
    (3, '北崎七重', '北海道', '女', '1969/10/27'), 
    (4, '日吉浩一郎', '東京都', '男', '2002/09/12');

ソースはこちら↓
解説はコメントで。

Sub createInsertSql()

    Dim currentCell As Range

    Dim srcSheet As Worksheet
    Set srcSheet = ActiveSheet

    Dim targetRange As Range
    Set targetRange = srcSheet.UsedRange

    Dim tableName As Range
    Set tableName = Range("B1")

    'INSERT文の前半を作成
    Dim head As String
    head = "INSERT INTO " & tableName.Value & " ("

    Dim currentColumnIndex As Integer
    Dim currentRowIndex As Integer

    currentRowIndex = targetRange.Row + 1

    '列だけ繰り返す
    For currentColumnIndex = targetRange.Column To targetRange.Columns.Count

        '最初でなければ
        If (currentColumnIndex <> targetRange.Column) Then
            head = head & ", "
        End If

        'セルを指定
        Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex)
        head = head & currentCell.Value
    Next
    head = head & ") "

    Dim sql As String
    sql = head & "values "

    'INSERT文のvalues以降を作成
    '行だけ繰り返す
    For currentRowIndex = targetRange.Row + 2 To targetRange.Rows.Count

         sql = sql & "("

        '列だけ繰り返す
        For currentColumnIndex = targetRange.Column To targetRange.Columns.Count

            '最初でなければ
            If (currentColumnIndex <> targetRange.Column) Then
                sql = sql & ", "
            End If

            'セルを指定
            Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex)

            'nullか空白なら
            If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then
                sql = sql & "null"

            '数値なら
            ElseIf IsNumeric(currentCell.Value) Then
                sql = sql & currentCell.Value

            'それ以外なら
            Else
                sql = sql & "'" & currentCell.Value & "'"
            End If

        Next

        '最終行なら
        If (currentRowIndex = targetRange.Rows.Count) Then
            sql = sql & ");"

        'それ以外なら
        Else
            sql = sql & "), "
        End If

    Next

    'シートにinsert文を出力
    srcSheet.Cells(currentRowIndex + 1, 1).Value = sql

End Sub

いろいろ応用ができそうですね。
マクロかじっといてよかった。

コメントを残す

メールアドレスが公開されることはありません。