SQL作成が面倒な人なための、コピペするだけで使えるUPDATE文作成自動化VBA入門
Advertisements
Excelでデータを編集していて、このセルで編集したデータをそのままSQLにできたらいいのに、と思う人はきっといるはず。
そんな人のために、前回のINSERT文生成自動化マクロに引き続き、UPDATE文を生成するマクロを作ってみた。
コピペするだけで使えるので、そのままコピペするなり,改変するなりして、使ってみてください。
①プロパティを設定する。
②データはこのように「●」「★」で区切って格納する。何行でも入れることができる。
③VBAのコードはこんな感じ
Const Properties As String = "プロパティ" Const UPDATE_SHEET As String = "UPDATE" Option Explicit Sub UPDATE文生成() Dim TABLE_NAME As String Dim Column As Long Dim Row As Long Dim END_Column As Long Dim START_WHERE_Column As Long Dim END_WHERE_Column As Long Dim OutputFolder As String Dim OutputTextName As String Dim OutputText As String Dim reply As Integer '-------------------- ' プロパティの設定 '-------------------- TABLE_NAME = Worksheets(Properties).Range("B2").Value OutputFolder = Worksheets(Properties).Range("B3").Value OutputTextName = Worksheets(Properties).Range("B4").Value '--------------------------------- 'フォルダの末尾が[\]でなければ追記 '--------------------------------- If Right(OutputFolder, 1) <> "\" Then OutputFolder = OutputFolder & "\" End If OutputText = OutputFolder & OutputTextName reply = MsgBox(OutputFolder & " 以下にUPDATE文を生成します。よろしいですか?", vbYesNo) If reply = vbNo Then Exit Sub End If '-------------------- ' カラムの末尾の設定 '-------------------- Column = 2 Do While Worksheets(UPDATE_SHEET).Cells(2, Column) <> "●" Column = Column + 1 Loop 'カラム末尾の列番号 END_Column = Column - 1 START_WHERE_Column = Column + 1 '-------------------------------- ' WHERE条件の末尾の列番号を取得 '-------------------------------- Do While Worksheets(UPDATE_SHEET).Cells(2, Column) <> "★" Column = Column + 1 Loop END_WHERE_Column = Column - 1 Row = 4 Open OutputText For Output As #1 Do While Cells(Row, 1).Value <> "●" Print #1, "UPDATE " & TABLE_NAME Print #1, "SET" For Column = 2 To END_Column '-------------------------------- ' 最終カラム以外は[,]で区切る '-------------------------------- If Column <> END_Column Then '------------------------------ ' 空白の場合はNULL '------------------------------ If Cells(Row, Column).Value = "" Then Print #1, Cells(2, Column) & "= NULL," Else '----------------------------- ' シングルクォテーションの要否 '----------------------------- If Cells(3, Column).Value = "○" Then Print #1, Cells(2, Column) & " = '" & Cells(Row, Column).Value & "'," Else Print #1, Cells(2, Column) & " = " & Cells(Row, Column).Value & "," End If End If Else '---------------------------- ' 空白の場合はNULL '---------------------------- If Cells(Row, Column).Value = "" Then Print #1, Cells(2, Column) & "= NULL" Else '----------------------------- ' シングルクォテーションの要否 '----------------------------- If Cells(3, Column).Value = "○" Then Print #1, Cells(2, Column) & " = '" & Cells(Row, Column).Value & "'" Else Print #1, Cells(2, Column) & " = " & Cells(Row, Column).Value End If End If End If Next '-------------------------------- ' WHERE文以下を記載 '-------------------------------- Print #1, "WHERE" For Column = START_WHERE_Column To END_WHERE_Column '------------------------------------------------- 'WHERE文の最終列かどうか。最終列以外なら[AND]が必要 '------------------------------------------------ If Column <> END_WHERE_Column Then '---------------------------- ' 空白の場合はNULL '---------------------------- If Cells(Row, Column).Value = "" Then Print #1, Cells(2, Column) & "= NULL AND" Else Print #1, Cells(2, Column) & " = " & Cells(Row, Column) & " AND" End If Else '---------------------------- ' 空白の場合はNULL '---------------------------- If Cells(Row, Column).Value = "" Then Print #1, Cells(2, Column) & "= NULL" Else Print #1, Cells(2, Column) & " = " & Cells(Row, Column) End If End If Next Print #1, ";" Row = Row + 1 Loop Close #1 MsgBox "UPDATE文を生成しました" End Sub
④上記のマクロを実行すると、設定したフォルダにSQLが出力される。
⑤テキストの中身はこんな感じ
UPDATE emp_copy SET ename = '林', deptno = 20 WHERE empno = 1009 AND deptno = 20 ; UPDATE emp_copy SET ename = '小林', deptno = 30 WHERE empno = 1010 AND deptno = 30 ; UPDATE emp_copy SET ename = '中林', deptno = 40 WHERE empno = 1011 AND deptno = 20 ; UPDATE emp_copy SET ename = '大林', deptno = 50 WHERE empno = 1012 AND deptno = 30 ;
⑥SQLを実行した結果
以下、余談。
このページを見てくれた誰かが、必要なコードを書く時の参考にしてもらえたら嬉しいと思って記事を書いた。
例えば、VBAなんて書いたこともない新人のために。
しかし、自分がプログラムなんてクソも書けなかった新人時代を振り返ると、自分が最も欲しかった情報は
「どうやったらプログラムが書けるようになるの?」
ということだった。
そして、ソースをコピペするだけでは絶対にプログラムを書けるようにはならないのである。
プログラムを書くために必要なことは、第一に
「自分がコンピューターに何をやらせたいのか」
を明確に思い描くことである。
次に、
「やらせたいことを実現するためには、コンピューターにどういう手順を踏ませればよいか」
を組み立てること。
最後に、組み立てた手順をコードにすることである。
そして、手順を考えるために必要な練習は、普段から手を動かして、サンプルを作ったり、ソースを読むことだ。
無から有は生まれないように、まずは実際にサンプルを作って処理を実行してみたり、ソースを読んで処理を追ってみた"経験"があり、
それらを組み合わせることで、手順(いわゆるロジック)を組み立てることができる。
ことVBAに限っては、プログラミングの練習として非常にわかりやすいので、自宅で適当にサンプルを作って動かすといいと思う。
SIerで働く限り、幸か不幸かExcelを使った単純作業を避ける事などできないのだから。