Excelのテーブル定義書からVBAを使ってSQL文を出力する(MySQL用)
Excelで作ったテーブル定義書から、サクっとcreate table文を出力してくれると便利だなと思い、
VBAでSQL文をファイルに出力するコードを書いてみた。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」に下記内容が出力される。
出力内容が見にくいし、美しくないコードで悲しいが・・・。
まぁコレから使いやすいように手を加えていこうと思う。