Excelシートの表からSQLのCREATE TABLE文を生成する

VBAを使って実現できます。

コード例

VBA

Sub GenerateCreateTableSQL()

  Dim ws As Worksheet
  Dim tbl As ListObject
  Dim col As ListColumn
  Dim sql As String
  Dim firstCol As Boolean

  ‘対象のワークシートとテーブルを指定
  Set ws = ThisWorkbook.Sheets(“Sheet1”) ‘シート名を変更
  Set tbl = ws.ListObjects(“Table1”) ‘テーブル名を変更

  ‘SQL文の初期化
  sql = “CREATE TABLE ” & tbl.Name & ” (“

  ‘各列をループ処理
  firstCol = True
  For Each col In tbl.ListColumns
    If Not firstCol Then
      sql = sql & “, “
    End If
    sql = sql & “[” & col.Name & “] ” & GetSQLDataType(col.Range.Cells(1).Value)
    firstCol = False
  Next col

  sql = sql & “);”

  ‘SQL文を出力
  Debug.Print sql

End Sub

‘データ型をSQLデータ型に変換する関数
Function GetSQLDataType(cellValue As Variant) As String

  Select Case TypeName(cellValue)
    Case “String”
      GetSQLDataType = “VARCHAR(255)”
    Case “Double”
      GetSQLDataType = “FLOAT”
    Case “Integer”
      GetSQLDataType = “INT”
    Case “Date”
      GetSQLDataType = “DATE”
    Case Else
      GetSQLDataType = “VARCHAR(255)”
  End Select

End Function

コードの解説

  1. 対象のシートとテーブルを指定: Sheet1 の Table1 というテーブルを対象としています。シート名とテーブル名は適宜変更してください。
  2. SQL文の初期化: CREATE TABLE で始まるSQL文を作成します。
  3. 各列をループ処理: テーブルの各列に対して、列名とデータ型をSQL文に追加します。
  4. データ型変換: GetSQLDataType 関数でExcelのデータ型をSQLのデータ型に変換します。
  5. SQL文を出力: 生成されたSQL文をイミディエイトウィンドウに出力します。

使用方法

  1. ExcelのVBAエディタを開きます(Alt + F11)。
  2. 挿入 > 標準モジュール を選択し、上記のコードをモジュールに貼り付けます。
  3. コード内のシート名とテーブル名を実際のシート名とテーブル名に変更します。
  4. GenerateCreateTableSQL マクロを実行します。

注意点

  • このコードは基本的なデータ型のみをサポートしています。必要に応じて GetSQLDataType 関数を拡張してください。
  • プライマリキーや外部キーなどの制約は考慮されていません。
  • テーブルに大量のデータが含まれている場合は、処理に時間がかかることがあります。

拡張機能

  • プライマリキーや外部キーなどの制約を追加する。
  • NULL値の許容/非許容を設定する。
  • データ型をより詳細に指定する (例: VARCHAR のサイズ指定)。
  • 生成されたSQL文をファイルに出力する。

このコードを参考に、Excelシートの表からSQLのCREATE TABLE文を生成してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です