Excelのテーブル定義書からVBAを使ってSQL文を出力する(MySQL用)

Excelで作ったテーブル定義書から、サクっとcreate table文を出力してくれると便利だなと思い、
VBASQL文をファイルに出力するコードを書いてみた。MySQL用ね。

まずは、こんな感じの表を用意する。



下記コードを記入する。

Sub WriteFile()
    Dim TB_name As String      'テーブル名称(英語)
    Dim a(1000) As String      '項目名称(英語)
    Dim b(1000) As String      'データ型
    Dim c(1000) As String      'Size
    Dim d(1000) As String      'Null
    Dim strFileName As String  '出力ファイル
    Dim intFileNo As Integer
    
    TB_name = ActiveSheet.Cells(2, 3).Value
    strFileName = "C:\tmp\create_" & TB_name & ".sql"
    intFileNo = FreeFile
    
    '項目数を確認
    j = 3
    Do
        j = j + 1
        If IsEmpty(ActiveSheet.Cells(j, 3).Value) Then Exit Do
    Loop
    
    'ファイル出力
    Open strFileName For Output As #intFileNo
    Print #intFileNo, "create table "; TB_name; " ("
    
    '項目1からn-1まで出力(n=最終行)
    For i = 4 To j - 2
        a(i) = ActiveSheet.Cells(i, 3).Value
        b(i) = ActiveSheet.Cells(i, 4).Value
        c(i) = ActiveSheet.Cells(i, 5).Value
        d(i) = ActiveSheet.Cells(i, 6).Value
                
        If c(i) = "" Then
        Else
            c(i) = "(" & c(i) & ")"
        End If
                        
        If d(i) = "N" Then
            d(i) = "NOT NULL"
        End If
        
        b(i) = b(i) & c(i)
        
        Print #intFileNo, a(i); " "; b(i); " "; d(i); ","
        
    Next
    
    '項目最終行出力(n=最終行)
    a(i) = ActiveSheet.Cells(j - 1, 3).Value
    b(i) = ActiveSheet.Cells(j - 1, 4).Value
    c(i) = ActiveSheet.Cells(j - 1, 5).Value
    d(i) = ActiveSheet.Cells(j - 1, 6).Value
        
    If c(i) = "" Then
    Else
        c(i) = "(" & c(i) & ")"
    End If

    If d(i) = "N" Then
        d(i) = "NOT NULL"
    End If
    
    b(i) = b(i) & c(i)
    
    Print #intFileNo, a(i); " "; b(i); " "; d(i);
    Print #intFileNo, vbNewLine; ") type=InnoDB;"

    Close intFileNo
End Sub

実行すると「C:\tmp\create_TB_TEST.sql」に下記内容が出力される。



出力内容が見にくいし、美しくないコードで悲しいが・・・。
まぁコレから使いやすいように手を加えていこうと思う。