Excelでupdate文を作成する

Excelファイルで管理されていた内容を、

DBに反映することがあります。

ODBCで、アップデートをする方法もありますが、

大がかりになってしまいます。

 

簡単にやろうと思うと、Excelの式で加工して

SQLを作成する方法もあると思います。

 

前述のものは、大がかりであり、

後述のものは、手作業が多くなり、汎用的ではありません。

 

そんな悩みを解決する方法として、

ユーザ定義関数でSQLを組む方法を考えてみました。

 

以下にVBAのコードを示します。

---------------------------------------------------------------------------------------

Function genUpdateSql(テーブル名 As String, _

                      更新対象カラム名 As Range, 更新対象カラム型 As Range,更新対象データ As Range, _

                      条件カラム名 As Range, 条件カラム型 As Range, 条件データ As Range)

 

    Dim setString As String

    Dim whereString As String

    Dim count As Long

 

    ' SET句を作成

    If 更新対象カラム名.Columns.count = 更新対象カラム型.Columns.count _

        And 更新対象カラム名.Columns.count = 更新対象データ.Columns.count Then

 

        For count = 1 To 更新対象カラム名.Columns.count

            If 更新対象カラム型.Cells(1, count) = "varchar" Then

                If Len(更新対象データ.Cells(1, count)) > 0 Then

 

                    If Len(setString) > 0 Then

                        setString = setString & ","

                    End If

 

                    setString = setString & 更新対象カラム名.Cells(1, count) & "='" & 更新対象データ.Cells(1, count) & "'"

 

                End If

            Else

                If Len(更新対象データ.Cells(1, count)) > 0 Then

 

                If Len(setString) > 0 Then

                    setString = setString & ","

                End If

 

                    setString = setString & 更新対象カラム名.Cells(1, count) & "=" & 更新対象データ.Cells(1, count)

                End If

            End If

 

        Next

    Else

        genUpdateSql = CVErr(xlErrRef) 'エラー値

        Exit Function

    End If

 

    If Len(setString) = 0 Then

        genUpdateSql = ""

        Exit Function

    End If

 

    ' Where句を作成

    If 条件カラム名.Columns.count = 条件カラム型.Columns.count _

        And 条件カラム名.Columns.count = 条件データ.Columns.count Then

 

        For count = 1 To 条件カラム名.Columns.count

            If Len(whereString) = 0 Then

                whereString = "WHERE " & 条件カラム名.Cells(1, count)

            Else

                whereString = whereString & " AND " & 条件カラム名.Cells(1, count)

            End If

 

            If 条件カラム型.Cells(1, count) = "varchar" Then

                whereString = whereString & "='" & 条件データ.Cells(1, count) & "'"

            Else

                whereString = whereString & "=" & 条件データ.Cells(1, count)

            End If

 

        Next

 

    Else

        genUpdateSql = CVErr(xlErrRef) 'エラー値

        Exit Function

 

    End If

 

    ' UPDATEのSQL文を作成

    genUpdateSql = "UPDATE " & テーブル名 & " SET " & setString & " " & whereString & ";"

 

End Function

---------------------------------------------------------------------------------------
 
使い方は、「関数の挿入」→「関数の分類:ユーザ定義関数」で、
genUpdateSql」を選択します。
 
引数は下記の通りです。
 テーブル名:対象のテーブルを指定する。
 更新対象カラム名:更新対象となるカラムです。範囲で指定します。
 更新対象カラム型:更新対象となるカラムのデータ型です。
          更新対象カラム名と対応付けして、範囲指定します。
 更新対象データ:更新対象のデータです。
         更新対象カラム名と対応付けして、範囲指定します。
 条件カラム名:Where句で条件として指定するカラムです。範囲で指定します。
 条件カラム型:Where句で条件として指定するカラムの型を指定します。
        条件カラム名と対応付けして、範囲指定します。
 条件データ:Where句で条件として指定するカラムの型を指定します。
       条件カラム名と対応付けして、範囲指定します
 
作成できるUPDATE文は、下記の通りになります。
 UPDATE TABLE名 SET カラム1='aaaa', カラム2=1111 WHERE 条件1=1000;
 

写真素材のピクスタ