FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【マクロ(業務効率化ツール)】ExcelからマクロでSQLを生成する

【今回の紹介】

マクロでSQLファイル生成するツールを作成したのでそのメモを書いておきます。


【内容】

 

 ◯処理の流れ
  ①ファイルobjを宣言
  ②sql生成内容をシートから取得
  ③sqlの組み立て
  ④ファイルへの書き込み
  ⑤ファイルのクローズ
 ※②から④を繰り返し 


  
 前提:対象エクセルのカラムが
  ・4行ごとに対象カラムが縦に並んでいる  
  だったため、カウントする際、対象のカラムの値もカウントするようにしています。

【参考】

    Dim FSO                 As New FileSystemObject     ' FileSystemObject   
    Dim TS                  As TextStream               ' TextStream
    Dim targetSheetNM       As String                   '対象シート名
    Dim targetTableNM       As String                   '対象テーブル名
    Dim strInsItems         As String                   ' テーブル項目名(登録[INSERT])
    Dim strInsValues        As String                   ' 登録値
    Dim tableName As String       'テーブル名
    Dim column1  As String        '登録項目1
    Dim column2  As String        '登録項目2
    Dim target_row As Integer
    Dim count As Integer

    target_row = 3
    count = 0
    targetTableNM="test_table"
    targetSheetNM="test"
    '書き込みファイルオープン
    Set TS = FSO.CreateTextFile(Filename:="C:\test.sql", Overwrite:=True)
     
    ' *** コメントを書き込み ***
    TS.WriteLine "-- ******************************************"
    TS.WriteLine "-- *◯◯登録SQL"
    TS.WriteLine "-- ******************************************"
    
    
  ' === SQL生成 ===============================================================
    
    Do While Worksheets(targetSheetNM).Range("B" & target_row).Value <> "" 
        
        column1 = Worksheets(targetSheetNM).Range("B" & target_row).Value    'column1
        column2 = Worksheets(targetSheetNM).Range("B" & target_row+1).Value    'column2

    ' *** INSERT句 ***
        strInsItems = "INSERT INTO " & targetTableNM & " (" _
                    & "column1, " _
                    & "column2, " _
                     & ") "
                    
        strInsValues = "VALUES (" _
                    & "'" & column1 & "', " _
                    & "'" & column2 & "', " _
                    & ") "
    
    ' INSERT句を書き込み
        TS.WriteLine strInsItems & strInsValues
        target_row = target_row + 3
        count = count + 1
    Loop
    
    
    ' コミットを追加
    TS.WriteLine "commit;"

    ' 指定ファイルをCLOSE
    TS.Close
    Set TS = Nothing
    Set FSO = Nothing
   
    ' 終了の表示
    MsgBox "ファイル出力が完了しました。(" & count & "行処理しました )"

End Sub
.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }