INSERT文を自動生成! -便利ツールで作業を楽に!!-
Webアプリを扱う際に、データベースは切っても切り離せない存在でしょう。
作業の中にはデータを追加したり編集したりすることがあるかと思います。
そんな時に、1,2個データを作る程度であれば素でSQL文を書いてしまったほうが早いでしょう。
しかし、これが1,000、10,000を超えるようなデータを扱う場合はそうは行きません。
そんな時に必要な情報だけでSQL文を生成するツールがあるととても便利です!
そこで!今回はExcelのVBAでINSERT文を生成するツールをご紹介しようと思います!
下準備
INSERT文を生成するために必要なデータを入力するために
Excel側の下準備をしましょう。
![](https://engr-tavern.com/wp-content/uploads/2022/02/image-3-1024x405.png)
上図のようにテーブル名とテーブル、そのカラムが文字列か数値かを入力する場所を用意します。
データ数、カラム数は減らしたり増やしたりしても大丈夫です。
シート名はお好みで、メインの「main」シートとSQL文を吐き出す「SQL」シート
実行用のボタンも用意しておきます。
VBAソース
もったいぶっても仕方ないので先にコードをお見せします!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
Option Explicit Sub SqlInsertMacro() '各ステートメント宣言 Dim sql As String: sql = "" Dim insert As String: insert = "INSERT INTO " Dim setdate As String 'mainシートセット Dim mainSheet As Worksheet Set mainSheet = ThisWorkbook.Sheets("main") 'SQLシートセット Dim sqlSheet As Worksheet Set sqlSheet = ThisWorkbook.Sheets("SQL") 'SQLシート初期化 sqlSheet.Cells.Clear 'INSERT句作成 insert = insert & mainSheet.Range("B1").value '一括作成用ループ(データ数繰り返す) Dim i As Long:i = 5 '入力されているデータ数だけ繰り返す While mainSheet.Cells(i, 2).value <> "" 'VALUESまでのSQL分を用意 sql = insert & " VALUES (" 'カラム数だけ繰り返す Dim k As Long: k = 2 While mainSheet.Cells(4, k).value <> "" '最初のカラム以外は前にカンマを付ける If k <> 2 Then sql = sql & "," End If '文字の場合シングルクォーテーションを付ける If mainSheet.Cells(3, k).value = "文字" Then sql = sql & "'" & mainSheet.Cells(i, k).value & "'" Else sql = sql & mainSheet.Cells(i, k).value End If k = k + 1 Wend 'SQL文を締める sql = sql & ");" '作成されたSQL文を転記 sqlSheet.Cells(i - 4, 1).value = sql i = i + 1 Wend 'SQLシートのA1セルにカーソルを合わせて終了 sqlSheet.Activate sqlSheet.Range("A1").Select End Sub |
マクロの動き
テストとして以下のようにデータを入れてみます。
![](https://engr-tavern.com/wp-content/uploads/2022/02/image-4.png)
ボタンにマクロを登録してポチッとすると…
![](https://engr-tavern.com/wp-content/uploads/2022/02/image-5.png)
このように各行のデータのINSERT文を出力してくれます!!
しっかりと文字列はシングルクォーテーションで括って、
数値は括らないように出力されます!
最後に
いかがでしたでしょうか。
もしこれを関数で実現しようとするとめちゃくちゃ重くなります。
マクロでやれば一瞬なので、是非試してください。
特に中身を解説することもないでしょう。
ExcelとVBAをうまく使ってどんどん作業を楽にしちゃいましょう!
ディスカッション
コメント一覧
まだ、コメントがありません