Skip to content

Instantly share code, notes, and snippets.

@paranoiq
Created April 8, 2011 08:58
Show Gist options
  • Save paranoiq/909520 to your computer and use it in GitHub Desktop.
Save paranoiq/909520 to your computer and use it in GitHub Desktop.
sada funkcí pro skládání SQL dotazů v Excelu
sada funkcí pro skládání SQL dotazů v Excelu
autor: Vlasta Neubauer [@paranoiq]
licence: public domain
pro koho to je:
- pro každého, kdo musí ručně upravovat/importovat větší množství záznamů a nestačí mu prostředky GUI nástrojů a ručně psaného SQL
co to umí:
- jednoduše vytvářet z dat v Excelu SQL dotazy typu INSERT, UPDATE, DELETE, INSERT IGNORE, REPLACE a INSERT ON DUPLICATE KEY UPDATE
- ošetřuje vstupní hodnoty:
- escapuje řetězce
- formátuje čísla a datumy
- rozpozná NULL (řetězec "NULL" nebo nenalezená hodnota #N/A)
- dovede přijmout i literál (přímým zápisem řetězce do vzorce, např. "NOW()")
- chytře generuje podmínky:
- dosazuje správné operátory (=, LIKE, REGEXP, IN, IS NULL)
- NULL testuje pomocí IS NULL ("IS NOT NULL" lze zapsat literálem)
- u datumu konvertuje sloupec explicitně na DATE (sloupec může být DATETIME)
- při zadání více hodnot než sloupců sloučí přebývající hodnoty pomocí operátoru IN
- rozpoznává regulární výrazy (počáteční a koncové lomítko) a testuje je operátorem REGEXP
- lze zadat i jednoduchý výraz - místo jména sloupce uvedete operátor (např. =Where("abc,*"; 10; 20) -> "`abc` = 10 * 20")
- literály u podmínek se píší včetně operátoru (např. "= NOW()" nebo "IS NOT NULL")
použití:
=Insert(tabulka; sloupce; hodnoty...)
=InsertIgnore(tabulka; sloupce; hodnoty...)
=InsertReplace(tabulka; sloupce; hodnoty...)
=InsertUpdate(tabulka; sloupce; hodnoty...)
=Delete(tabulka; limit; sloupce podmínky; hodnoty podmínky...)
=Update(tabulka; limit; Where(sloupce podmínky; hodnoty podmínky...); sloupce; hodnoty...)
=Update2(tabulka; limit; sloupce podmínky; hodnoty podmínky; sloupce; hodnoty...)
(`sloupce` je řetězec se seznamem sloupců odděleným čárkou)
instalace:
- v Excelu otevřete VBA editor (Alt+F11)
- přidejte do projektu nový modul a zkopírujte do něj kód
- funkce se dají použít jako běžné Excelové vzorce (musí být zapnutá makra)
'sada funkcí pro skládání SQL dotazů v Excelu
'autor: Vlasta Neubauer [@paranoiq], licence: public domain
Function Insert(tbl, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
sql = "INSERT INTO " & Table(tbl) & " (" & Columns(cols) & ") VALUES (" & Values(val1)
If (Not IsMissing(val2)) Then sql = sql & ", " & Values(val2)
If (Not IsMissing(val3)) Then sql = sql & ", " & Values(val3)
If (Not IsMissing(val4)) Then sql = sql & ", " & Values(val4)
If (Not IsMissing(val5)) Then sql = sql & ", " & Values(val5)
If (Not IsMissing(val6)) Then sql = sql & ", " & Values(val6)
If (Not IsMissing(val7)) Then sql = sql & ", " & Values(val7)
If (Not IsMissing(val8)) Then sql = sql & ", " & Values(val8)
If (Not IsMissing(val9)) Then sql = sql & ", " & Values(val9)
If (Not IsMissing(val10)) Then sql = sql & ", " & Values(val10)
If (Not IsMissing(val11)) Then sql = sql & ", " & Values(val11)
If (Not IsMissing(val12)) Then sql = sql & ", " & Values(val12)
If (Not IsMissing(val13)) Then sql = sql & ", " & Values(val13)
If (Not IsMissing(val14)) Then sql = sql & ", " & Values(val14)
If (Not IsMissing(val15)) Then sql = sql & ", " & Values(val15)
If (Not IsMissing(val16)) Then sql = sql & ", " & Values(val16)
If (Not IsMissing(val17)) Then sql = sql & ", " & Values(val17)
If (Not IsMissing(val18)) Then sql = sql & ", " & Values(val18)
If (Not IsMissing(val19)) Then sql = sql & ", " & Values(val19)
If (Not IsMissing(val20)) Then sql = sql & ", " & Values(val20)
Insert = sql & ");"
End Function
Function InsertIgnore(tbl, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
sql = "INSERT IGNORE INTO " & Table(tbl) & " (" & Columns(cols) & ") VALUES (" & Values(val1)
If (Not IsMissing(val2)) Then sql = sql & ", " & Values(val2)
If (Not IsMissing(val3)) Then sql = sql & ", " & Values(val3)
If (Not IsMissing(val4)) Then sql = sql & ", " & Values(val4)
If (Not IsMissing(val5)) Then sql = sql & ", " & Values(val5)
If (Not IsMissing(val6)) Then sql = sql & ", " & Values(val6)
If (Not IsMissing(val7)) Then sql = sql & ", " & Values(val7)
If (Not IsMissing(val8)) Then sql = sql & ", " & Values(val8)
If (Not IsMissing(val9)) Then sql = sql & ", " & Values(val9)
If (Not IsMissing(val10)) Then sql = sql & ", " & Values(val10)
If (Not IsMissing(val11)) Then sql = sql & ", " & Values(val11)
If (Not IsMissing(val12)) Then sql = sql & ", " & Values(val12)
If (Not IsMissing(val13)) Then sql = sql & ", " & Values(val13)
If (Not IsMissing(val14)) Then sql = sql & ", " & Values(val14)
If (Not IsMissing(val15)) Then sql = sql & ", " & Values(val15)
If (Not IsMissing(val16)) Then sql = sql & ", " & Values(val16)
If (Not IsMissing(val17)) Then sql = sql & ", " & Values(val17)
If (Not IsMissing(val18)) Then sql = sql & ", " & Values(val18)
If (Not IsMissing(val19)) Then sql = sql & ", " & Values(val19)
If (Not IsMissing(val20)) Then sql = sql & ", " & Values(val20)
InsertIgnore = sql & ");"
End Function
Function InsertReplace(tbl, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
sql = "REPLACE INTO " & Table(tbl) & " (" & Columns(cols) & ") VALUES (" & Values(val1)
If (Not IsMissing(val2)) Then sql = sql & ", " & Values(val2)
If (Not IsMissing(val3)) Then sql = sql & ", " & Values(val3)
If (Not IsMissing(val4)) Then sql = sql & ", " & Values(val4)
If (Not IsMissing(val5)) Then sql = sql & ", " & Values(val5)
If (Not IsMissing(val6)) Then sql = sql & ", " & Values(val6)
If (Not IsMissing(val7)) Then sql = sql & ", " & Values(val7)
If (Not IsMissing(val8)) Then sql = sql & ", " & Values(val8)
If (Not IsMissing(val9)) Then sql = sql & ", " & Values(val9)
If (Not IsMissing(val10)) Then sql = sql & ", " & Values(val10)
If (Not IsMissing(val11)) Then sql = sql & ", " & Values(val11)
If (Not IsMissing(val12)) Then sql = sql & ", " & Values(val12)
If (Not IsMissing(val13)) Then sql = sql & ", " & Values(val13)
If (Not IsMissing(val14)) Then sql = sql & ", " & Values(val14)
If (Not IsMissing(val15)) Then sql = sql & ", " & Values(val15)
If (Not IsMissing(val16)) Then sql = sql & ", " & Values(val16)
If (Not IsMissing(val17)) Then sql = sql & ", " & Values(val17)
If (Not IsMissing(val18)) Then sql = sql & ", " & Values(val18)
If (Not IsMissing(val19)) Then sql = sql & ", " & Values(val19)
If (Not IsMissing(val20)) Then sql = sql & ", " & Values(val20)
InsertReplace = sql & ");"
End Function
Function InsertUpdate(tbl, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim vals As String
Dim cvals As New Collection
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
vals = ""
For Each valx In cvals
vals = vals & valx & ", "
Next
vals = Left(vals, Len(vals) - 2)
InsertUpdate = "INSERT INTO " & Table(tbl) & " (" & Columns(cols) & ") VALUES (" & vals & ") ON DUPLICATE KEY UPDATE " & Pairs(cols, cvals) & ";"
End Function
Function Delete(tbl, limit, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
Dim cvals As New Collection
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
sql = "DELETE FROM " & Table(tbl) & " WHERE " & Where(cols, cvals)
If (limit) Then sql = sql & " LIMIT " & limit
Delete = sql & ";"
End Function
Function Update(tbl, limit, condition, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
Dim cvals As New Collection
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
sql = "UPDATE " & Table(tbl) & " SET " & Pairs(cols, cvals) & " WHERE " & condition
If (limit) Then sql = sql & " LIMIT " & limit
Update = sql & ";"
End Function
Function Update2(tbl, limit, cond_cols, cond_vals, cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
Dim cvals As New Collection
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
sql = "UPDATE " & Table(tbl) & " SET " & Pairs(cols, cvals) & " WHERE " & Where(cond_cols, cond_vals)
If (limit) Then sql = sql & " LIMIT " & limit
Update2 = sql & ";"
End Function
Function Table(tbl)
Dim sql As String
Dim parts() As String
If (InStr(1, tbl, ".")) Then
parts = Split(Replace(tbl, " ", ""), ".")
For n = 0 To UBound(parts)
sql = sql & "`" & (parts(n)) & "`."
Next
Table = Left(sql, Len(sql) - 1)
Else
Table = "`" & tbl & "`"
End If
End Function
Function Where(cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
Dim acols() As String
Dim ccols As New Collection
Dim cvals As New Collection
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "^'\d{4}-\d{2}-\d{2}'$"
If (TypeOf cols Is Range) Then
For Each cell In cols
If (cell <> "") Then ccols.Add (Column(cell))
Next
Else
acols = Split(Replace(cols, " ", ""), ",")
For n = 0 To UBound(acols)
ccols.Add (Column(acols(n)))
Next
End If
If (TypeOf val1 Is Collection) Then
For n = 1 To val1.Count
cvals.Add (val1(n))
Next
Else
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
End If
If (ccols.Count < cvals.Count) Then
skipLast = 1
Else
skipLast = 0
End If
If (Not skipLast Or ccols.Count > 1) Then
For n = 1 To ccols.Count - skipLast
If (Left(ccols(n), 1) = "`") Then
If (cvals(n) = "NULL") Then
sql = sql & ccols(n) & " IS NULL AND "
ElseIf (IsNumeric(cvals(n))) Then
sql = sql & ccols(n) & " = " & cvals(n) & " AND "
ElseIf (regex.Test(cvals(n))) Then
sql = sql & "DATE(" & ccols(n) & ") = " & cvals(n) & " AND "
ElseIf (Left(cvals(n), 2) = "'/" And Right(cvals(n), 2) = "/'") Then
sql = sql & ccols(n) & " REGEXP '" & Mid(cvals(n), 3, Len(cvals(n)) - 4) & "' AND "
ElseIf (Left(cvals(n), 1) = "'") Then
sql = sql & ccols(n) & " LIKE " & cvals(n) & " AND "
Else
sql = sql & ccols(n) & " " & cvals(n) & " AND "
End If
Else
sql = Left(sql, Len(sql) - 5) & " " & ccols(n) & " " & cvals(n) & " AND "
End If
Next
End If
If (skipLast) Then
If ((regex.Test(cvals(ccols.Count)))) Then
sql = sql & "DATE(" & ccols(ccols.Count) & ") IN ("
Else
sql = sql & ccols(ccols.Count) & " IN ("
End If
For n = 0 To cvals.Count - ccols.Count
sql = sql & cvals(ccols.Count + n) & ", "
Next
sql = Left(sql, Len(sql) - 2) & ")"
Else
sql = Left(sql, Len(sql) - 5)
End If
Where = sql
End Function
Function Pairs(cols, val1, Optional val2, Optional val3, Optional val4, Optional val5, Optional val6, Optional val7, Optional val8, Optional val9, Optional val10, Optional val11, Optional val12, Optional val13, Optional val14, Optional val15, Optional val16, Optional val17, Optional val18, Optional val19, Optional val20)
Dim sql As String
Dim acols() As String
Dim ccols As New Collection
Dim cvals As New Collection
If (TypeOf cols Is Range) Then
For Each cell In cols
If (cell <> "") Then ccols.Add (Column(cell))
Next
Else
acols = Split(Replace(cols, " ", ""), ",")
For n = 0 To UBound(acols)
ccols.Add (Column(acols(n)))
Next
End If
If (TypeOf val1 Is Collection) Then
For n = 1 To val1.Count
cvals.Add (val1(n))
Next
Else
x = addValues(cvals, val1)
If (Not IsMissing(val2)) Then x = addValues(cvals, val2)
If (Not IsMissing(val3)) Then x = addValues(cvals, val3)
If (Not IsMissing(val4)) Then x = addValues(cvals, val4)
If (Not IsMissing(val5)) Then x = addValues(cvals, val5)
If (Not IsMissing(val6)) Then x = addValues(cvals, val6)
If (Not IsMissing(val7)) Then x = addValues(cvals, val7)
If (Not IsMissing(val8)) Then x = addValues(cvals, val8)
If (Not IsMissing(val9)) Then x = addValues(cvals, val9)
If (Not IsMissing(val10)) Then x = addValues(cvals, val10)
If (Not IsMissing(val11)) Then x = addValues(cvals, val11)
If (Not IsMissing(val12)) Then x = addValues(cvals, val12)
If (Not IsMissing(val13)) Then x = addValues(cvals, val13)
If (Not IsMissing(val14)) Then x = addValues(cvals, val14)
If (Not IsMissing(val15)) Then x = addValues(cvals, val15)
If (Not IsMissing(val16)) Then x = addValues(cvals, val16)
If (Not IsMissing(val17)) Then x = addValues(cvals, val17)
If (Not IsMissing(val18)) Then x = addValues(cvals, val18)
If (Not IsMissing(val19)) Then x = addValues(cvals, val19)
If (Not IsMissing(val20)) Then x = addValues(cvals, val20)
End If
For n = 1 To ccols.Count
If (Left(ccols(n), 1) = "`") Then
sql = sql & ccols(n) & " = " & cvals(n) & ", "
Else
sql = Left(sql, Len(sql) - 2) & " " & ccols(n) & " " & cvals(n) & ", "
End If
Next
sql = Left(sql, Len(sql) - 2)
Pairs = sql
End Function
Function Columns(cols)
Dim sql As String
Dim acols() As String
If (TypeOf cols Is Range) Then
For Each cell In cols
sql = sql & Column(cell) & ", "
Next
sql = Left(sql, Len(sql) - 2)
Else
acols = Split(Replace(cols, " ", ""), ",")
For n = 0 To UBound(acols)
sql = sql & Column(acols(n)) & ", "
Next
sql = Left(sql, Len(sql) - 2)
End If
Columns = sql
End Function
Function Column(col)
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "^[a-zA-Z0-9_]+$"
If (regex.Test(col)) Then
Column = "`" & col & "`"
Else
Column = col
End If
End Function
Function Values(vals)
Dim sql As String
If (TypeOf vals Is Range) Then
For Each cell In vals
sql = sql & Value(cell) & ", "
Next
sql = Left(sql, Len(sql) - 2)
Else
sql = Value(vals)
End If
Values = sql
End Function
Function Value(val, Optional escape = 0)
If (IsError(val)) Then
Value = "NULL"
ElseIf (IsNull(val) Or val = "NULL") Then
Value = "NULL"
ElseIf (IsEmpty(val) Or val = "") Then
Value = "''"
ElseIf (IsNumeric(val)) Then
Value = Replace(Replace(val, ",", "."), " ", "")
ElseIf (TypeOf val Is Range) Then
If (InStr(1, val.NumberFormatLocal, "h")) Then
Value = "'" & Format(val.Value2, "yyyy-mm-dd hh:mm:ss") & "'"
ElseIf (InStr(1, val.NumberFormatLocal, "d")) Then
Value = "'" & Format(val.Value2, "yyyy-mm-dd") & "'"
Else
Value = "'" & Replace(Replace(val, "\", "\\"), "'", "\'") & "'"
End If
ElseIf (escape Or (Left(val, 1) = "/" And Right(val, 1) = "/")) Then
Value = "'" & Replace(Replace(val, "\", "\\"), "'", "\'") & "'"
Else
Value = val
End If
End Function
Private Function addValues(avals, vals)
If (TypeOf vals Is Range) Then
For Each cell In vals
avals.Add (Value(cell))
Next
Else
avals.Add (Value(vals))
End If
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment