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