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
コードの解説
- 対象のシートとテーブルを指定: Sheet1 の Table1 というテーブルを対象としています。シート名とテーブル名は適宜変更してください。
- SQL文の初期化: CREATE TABLE で始まるSQL文を作成します。
- 各列をループ処理: テーブルの各列に対して、列名とデータ型をSQL文に追加します。
- データ型変換: GetSQLDataType 関数でExcelのデータ型をSQLのデータ型に変換します。
- SQL文を出力: 生成されたSQL文をイミディエイトウィンドウに出力します。
使用方法
- ExcelのVBAエディタを開きます(Alt + F11)。
- 挿入 > 標準モジュール を選択し、上記のコードをモジュールに貼り付けます。
- コード内のシート名とテーブル名を実際のシート名とテーブル名に変更します。
- GenerateCreateTableSQL マクロを実行します。
注意点
- このコードは基本的なデータ型のみをサポートしています。必要に応じて GetSQLDataType 関数を拡張してください。
- プライマリキーや外部キーなどの制約は考慮されていません。
- テーブルに大量のデータが含まれている場合は、処理に時間がかかることがあります。
拡張機能
- プライマリキーや外部キーなどの制約を追加する。
- NULL値の許容/非許容を設定する。
- データ型をより詳細に指定する (例: VARCHAR のサイズ指定)。
- 生成されたSQL文をファイルに出力する。
このコードを参考に、Excelシートの表からSQLのCREATE TABLE文を生成してみてください。
コメント