0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle DDL作成マクロ【Excelマクロ編】

Last updated at Posted at 2025-09-19

目的

OracleのDDL文をExcelマクロで作成したい。

作成手順

1.マクロ有効ブック(*.xlsmファイル)を作成

通常のExcelファイル(*.xlsx)ではマクロを保存できないため、マクロ有効形式で作成します。

2.シートの準備

  • 以下の3つのシートを作成します。
    1. 「実行」シート
      ⇒ DDL作成ボタンと参照先シートの入力欄配置
    2. 「DDL作成結果」シート
      ⇒ DDL作成結果を出力
    3. 作成したいテーブル情報を記載するシート
      ⇒ シート名は自由。「実行」シートでシート名を記載する必要あり。

3.「テーブル」シートの構成

セル位置 内容
B1 スキーマ名を入力
B2 論理テーブル名を入力
B3 物理テーブル名を入力
A5:E5 テーブル情報を記載

↓こんなイメージ
◆「実行」シート
image.png
◆「DDL作成結果」シート
image.png
◆作成したいテーブル情報を記載するシート
image.png

4.マクロ実行ボタンを作成

Visual Basic for Applications(VBA)を使用して、以下のコードを登録します。

  • コード
    Sub CreateDDL_FromSheetNameInB1_WithDrop()
        Dim wsExec As Worksheet
        Dim wsSrc As Worksheet
        Dim wsOut As Worksheet
        Dim srcSheetName As String
        Dim schemaName As String, logicTableName As String, physTableName As String
        Dim lastRow As Long, i As Long
        Dim ddl As String, pkCols As String
        
        ' 実行シート
        Set wsExec = ThisWorkbook.ActiveSheet
        
        ' 実行シートB1セルから参照元シート名を取得
        srcSheetName = Trim(wsExec.Range("B1").Value)
        If srcSheetName = "" Then
            MsgBox "B1セルに参照元シート名が入力されていません", vbExclamation
            Exit Sub
        End If
        
        ' 参照元シートを取得
        On Error Resume Next
        Set wsSrc = ThisWorkbook.Sheets(srcSheetName)
        On Error GoTo 0
        If wsSrc Is Nothing Then
            MsgBox "参照元シート '" & srcSheetName & "' が見つかりません", vbCritical
            Exit Sub
        End If
        
        ' スキーマ名・論理テーブル名・物理テーブル名を取得
        schemaName = Trim(wsSrc.Range("B1").Value)
        logicTableName = Trim(wsSrc.Range("B2").Value)
        physTableName = Trim(wsSrc.Range("B3").Value)
        
        ' カラム定義の最終行を取得(A列の最終行)
        lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
        
        ' CREATE TABLE文作成
        ddl = "DROP TABLE " & schemaName & "." & physTableName & " CASCADE CONSTRAINTS;" & vbCrLf
        ddl = ddl & "CREATE TABLE " & schemaName & "." & physTableName & " (" & vbCrLf
        
        pkCols = ""
        For i = 5 To lastRow
            If wsSrc.Range("A" & i).Value <> "" Then
                ddl = ddl & "    " & wsSrc.Range("B" & i).Value & " " & wsSrc.Range("C" & i).Value
                If LCase(wsSrc.Range("D" & i).Value) = "yes" Then
                    ddl = ddl & " NOT NULL"
                End If
                ddl = ddl & "," & vbCrLf
                
                If LCase(wsSrc.Range("E" & i).Value) = "pk" Then
                    If pkCols <> "" Then pkCols = pkCols & ", "
                    pkCols = pkCols & wsSrc.Range("B" & i).Value
                End If
            End If
        Next i
        
        ' PK制約追加
        If pkCols <> "" Then
            ddl = ddl & "    CONSTRAINT PK_" & physTableName & " PRIMARY KEY (" & pkCols & ")" & vbCrLf
        Else
            ddl = Left(ddl, Len(ddl) - 3) & vbCrLf ' 最後のカンマ削除
        End If
        
        ddl = ddl & ");" & vbCrLf
        
        ' COMMENT文追加
        ddl = ddl & "COMMENT ON TABLE " & schemaName & "." & physTableName & " IS '" & logicTableName & "';" & vbCrLf
        For i = 5 To lastRow
            If wsSrc.Range("A" & i).Value <> "" Then
                ddl = ddl & "COMMENT ON COLUMN " & schemaName & "." & physTableName & "." & wsSrc.Range("B" & i).Value & _
                      " IS '" & wsSrc.Range("A" & i).Value & "';" & vbCrLf
            End If
        Next i
        
        ' 出力先シート作成 or 取得
        On Error Resume Next
        Set wsOut = ThisWorkbook.Sheets("DDL作成結果")
        On Error GoTo 0
        If wsOut Is Nothing Then
            Set wsOut = ThisWorkbook.Sheets.Add
            wsOut.Name = "DDL作成結果"
        End If
        
        ' 出力
        wsOut.Cells.Clear
        wsOut.Range("A1").Value = ddl
        
        MsgBox "DDL作成完了", vbInformation
    End Sub
    

5.マクロ実行ボタンの設置

  1. 開発タブ > 挿入 > ボタンを選択。
  2. マクロ実行ボタンをシート上に配置。
  3. ボタンに上記マクロを紐づけます。

6.DDL作成結果

image.png

終わり

以上の手順で、簡易的なoracleのDDL文作成可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?