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?

インサートSQL生成用エクセルマクロ

Posted at

はじめに

インサートSQL生成用エクセルマクロを作成しました。自分用ですが、皆さんにも使ってもらえたらうれしいです。
出力されたSQLがOracle database環境で動くことは確認しています。

ソース

SqlInsertMacro.txt
Sub SqlInsertMacro()

    Dim insert As String: insert = "INSERT INTO "  '出力SQLフォーマット
    Dim sql As String: sql = "" '出力SQL本体
    Dim sqlcount As Long: sqlcount = 0  'SQL数
    Dim Column As Long: Column = 0  '列数
    
    
    'SQL数カウント
    Do
        '// セル値が未設定の場合
        If Cells(sqlcount + 4, 3).Value = "" Then
            '// ループを抜ける
            Exit Do
        End If
        
        '// ループカウンタを加算
        sqlcount = sqlcount + 1
    Loop
    
    
    
    
    '列数カウント
    Do
        '// セル値が未設定の場合
        If Cells(3, Column + 1).Value = "" Then
            '// ループを抜ける
            Exit Do
        End If
        
        '// ループカウンタを加算
        Column = Column + 1
    Loop
    
    
    
    
    'VALUESまでのフォーマット作成
    insert = insert & Range("A1").Value & " ("
    
    For i = 1 To Column
        '最初のカラム以外は前にカンマを付ける
        If i <> 1 Then
            insert = insert & ","
        End If
            
        insert = insert & Cells(2, i).Value
    Next i
         
    insert = insert & ") VALUES ("
    
    
    
    
    
    '最後まで作成し、出力する
    For j = 1 To sqlcount
    
        sql = insert
        
        For k = 1 To Column
        
            '最初のカラム以外は前にカンマを付ける
            If k <> 1 Then
                sql = sql & ","
            End If
            
            
            '型が数字の場合
            If Cells(3, k).Value = "NUMBER" Then
                 sql = sql & Cells(j + 3, k).Value
            '型がDATEの場合
            ElseIf Cells(3, k).Value = "DATE" Then
                sql = sql & "TO_DATE('" & Cells(j + 3, k).Value & "')"
            '型がTIMESTAMPの場合
            ElseIf Cells(3, k).Value = "TIMESTAMP" Then
                sql = sql & "TO_DATE('" & Cells(j + 3, k).Value & "')"
            'シングルクォーテーションをつけたい型の場合
            Else
               sql = sql & "'" & Cells(j + 3, k).Value & "'"
            End If
            
        Next k
        
    
        'SQL作成終了
        sql = sql & ");"
    
        '作成されたSQL文を出力
        Cells(j + 3, k).Value = sql

    Next j
    

End Sub


使い方

1行目…テーブル名を入力
2行目…項目名を入力
3行目…項目の型を入力
4行目以降…データを入力

image.png

マクロを実行すると、最後の列の次の列(この例だとF列)にインサートSQLが生成されます。

おまけ

今回のマクロを作成する際に、テスト用に使用したSQLです。

SQL.txt
DROP TABLE HOGE;

CREATE TABLE HOGE
(
  CHA CHAR(10),	-- 固定長文字列
	VARC VARCHAR(100),	-- 文字列
	NUM NUMBER,	-- 数値
	DA DATE,	-- 日付
	TIST TIMESTAMP	-- タイムスタンプ
);



INSERT INTO HOGE (
CHA
,VARC
,NUM
,DA
,TIST
) VALUES (
  '0001'
 ,'田中太郎'
 ,32
 ,TO_DATE('2024-03-20', 'YYYY-MM-DD')
 ,TO_DATE('2024-03-20', 'YYYY-MM-DD')
);

select * from hoge;

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?