将SQL查询条件应用于VBA

时间:2017-11-08 10:37:14

标签: mysql excel vba ado

请找到我的下面的示例表,我已经应用了if乘以数值数据的条件。

enter image description here

查询代码

sql_string = "Select [Sheet5$].[num] * IIf(([Sheet5$].[to]-[Sheet5$].[frm])<365, .4," & _
"IIf(([Sheet5$].[to]-[Sheet5$].[frm])>365, 1, 0)) from [Sheet5$]"

以上代码将帮助我将条件仅应用于 ie num 一列。但是我想将它应用于20-30列的多列,这些列可以在我的实际数据中使用。可以提及列名称,但不能将上述 if condition 写入每列。请指导我。

1 个答案:

答案 0 :(得分:0)

你的意思是这样吗?

Public Sub test()
Dim sql_string As String
Dim sheet_name As String

    sheet_name = "Sheet5$"

    sql_string = "Select "
    sql_string = sql_string & GetField(sheet_name, "num") & ","
    sql_string = sql_string & GetField(sheet_name, "num1") & ","
    sql_string = sql_string & GetField(sheet_name, "num2") & ","
    sql_string = sql_string & GetField(sheet_name, "num3")
    sql_string = sql_string & " from [" & sheet_name & "]"

    Debug.Print sql_string

End Sub

Public Function GetField(ByVal sheet_name As String, ByVal fieldName As String)

    GetField = "[" & sheet_name & "].[" & fieldName & "] * IIf(([" & sheet_name & "].[to] - [" & sheet_name & "].[frm]) < 365, 0.4, IIf(([" & sheet_name & "].[to] - [" & sheet_name & "].[frm]) > 365, 1, 0))"

End Function

结果:

Select [Sheet5$].[num] * IIf(([Sheet5$].[to] - [Sheet5$].[frm]) < 365, 0.4, IIf(([Sheet5$].[to] - [Sheet5$].[frm]) > 365, 1, 0)),
    [Sheet5$].[num1] * IIf(([Sheet5$].[to] - [Sheet5$].[frm]) < 365, 0.4, IIf(([Sheet5$].[to] - [Sheet5$].[frm]) > 365, 1, 0)),
    [Sheet5$].[num2] * IIf(([Sheet5$].[to] - [Sheet5$].[frm]) < 365, 0.4, IIf(([Sheet5$].[to] - [Sheet5$].[frm]) > 365, 1, 0)),
    [Sheet5$].[num3] * IIf(([Sheet5$].[to] - [Sheet5$].[frm]) < 365, 0.4, IIf(([Sheet5$].[to] - [Sheet5$].[frm]) > 365, 1, 0)) from [Sheet5$]