2017-11-08 41 views
1

数値データを掛けるための条件が適用されている私の下のサンプルテーブルを見つけてください。上記のコードVBA内の複数の列にSQL照会条件を適用してください

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$]" 

私は20の周りに複数の列の上にそれを適用したいonly.But 1列すなわちNUM上の条件を適用するために私を助けます私の実際のdata.itで利用可能な-30列は、列名に言及することは可能ですが、の各列に上記のを書くことはできません。同じように私を導いてください。

答えて

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$] 
関連する問題