システム開発ブログ

Excel

MySQL

ExcelマクロでSQLのUPDATE文を作る

こんにちは。
テーブルのデータを更新するときに使うUPDATE文ですが、 複数のレコードを更新するときにその数だけUPDATE文を書くのは なかなか手間のかかる作業です。

UPDATE文を作成するxcelマクロを作成したので ご紹介したいと思います。

updateマクロ.xlsm
クリックするとダウンロードできます。

ファイルを開くと以下のようになっています。
1行目に更新するカラム名、2行目以降に更新するデータを入力します。 カラム名の先頭に「w_」を付けたものがWHERE条件になります。

20170413_1.jpg

次に更新するテーブル名を設定します。

Excelのメニューバー→表示→マクロをクリックしてコードを表示させ、VBAの23行目「sql = "UPDATE TABLE SET "」の"TABLE"を更新するテーブル名に書き換えます。 以下VBAです。

Option Explicit

Sub UPDATE()
    Dim newbook As Workbook
    Dim currentCell As Range
    Dim headCell As Range

    '前処理
    Dim srcSheet As Worksheet
    Set srcSheet = ActiveSheet

    Dim targetRange As Range
    Set targetRange = srcSheet.UsedRange

    '新しいBook作成
    Set newbook = Workbooks.Add

    'UPDATE文
    Dim currentRowIndex As Long
    For currentRowIndex = 2 To targetRange.Rows.Count

        Dim sql As String
        sql = "UPDATE TABLE SET "
        Dim first As Boolean
        first = True
        Dim first2 As Boolean
        first2 = True

        Dim currentColumnIndex As Long
        For currentColumnIndex = 1 To targetRange.Columns.Count
            Set headCell = srcSheet.Cells(1, currentColumnIndex)
            Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex)
            If Left(headCell, 2) <> "w_" Then
                If (first) Then
                    first = False
                Else
                    sql = sql & ", "
                End If
                If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then
                    sql = sql & headCell & " = 'null'"
                Else
                    sql = sql & headCell & " = '" & currentCell.Value & "'"
                End If
            Else
                If (first2) Then
                    first2 = False
                    sql = sql & " WHERE "
                Else
                    sql = sql & " AND "
                End If
                If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then
                    sql = sql & Replace(headCell, "w_", "") & " = 'null'"
                Else
                    sql = sql & Replace(headCell, "w_", "") & " = '" & currentCell.Value & "'"
                End If
            End If
        Next

        sql = sql & ";"

        newbook.ActiveSheet.Cells(currentRowIndex - 1, 1).Value = sql
    Next
End Sub

マクロを実行すると新しいブックにUPDATE文が作成されます。

20170413_2.jpg クリックすると拡大します

UPDATE文を書く時間がかなり短縮できるのでぜひ使ってみてください。

システム周りのお悩みを解決します

まずは無料ダウンロード

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ