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

※Web開発

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文を生成してみてください。

コメント

タイトルとURLをコピーしました