給定一個ADODB連接到一個.xls,一個
"SELECT * FROM [Sheet2$]"
表示
PID T1 T2 T3 T4 T5
11 1 <Null> 1 1 <Null>
14 1 1 1 <Null> 1
21 <Null> <Null> 1 <Null> <Null>
88 1 1 1 <Null> <Null>
99 1 <Null> <Null> <Null> <Null>
100 <Null> <Null> <Null> <Null> <Null>
101 1 1 1 1 1
嵌套IIF(ISNULL(COL),[...] ,ColNum)in
"SELECT PID, IIF(IsNull(T5),IIF(IsNull(T4),IIF(IsNull(T3),IIF(IsNull(T2),IIF(IsNull(T1),0,1),2),3),4),5) As RMCol FROM [Sheet2$]"
wi會導致
PID RMCol
11 4
14 5
21 3
88 3
99 1
100 0
101 5
試圖解釋:
IIF(BoolExpression, TrueValue, FalseValue)
的表達式求TrueValue
如果BoolExpression
爲True,以FalseValue
否則;因此將另一個IIF
置於IsNull(Colx)
的True槽中將連續測試列,直到非空列將觸發FalseValue
(列號)的返回。
是的:SQL是一個處理任意數量的行(固定/精心設計的一組列)的工具;所以如果你設計錯誤的時候把一組邏輯不受限制的信息放入列中 - 而不是(另一張)表 - 那就是你付出的代價。
更新:
我毫不猶豫地提起這事,因爲所有的黑客和快捷方式,從長遠來看會失敗 - 而不是你還是要把你從一個體面的設計,從頭開始,但是:
一個遞歸功能:
Function genIFF(n)
If 1 = n Then
genIFF = "IIF(IsNull(T1),0,1)"
Else
genIFF = "IIF(IsNull(T" & n & ")," & genIFF(n - 1) & "," & n & ")"
End If
End Function
會很樂意創建:
Dim n
For n = 1 To 5
WScript.Echo n, genIFF(n)
Next
1 IIF(IsNull(T1),0,1)
2 IIF(IsNull(T2),IIF(IsNull(T1),0,1),2)
3 IIF(IsNull(T3),IIF(IsNull(T2),IIF(IsNull(T1),0,1),2),3)
4 IIF(IsNull(T4),IIF(IsNull(T3),IIF(IsNull(T2),IIF(IsNull(T1),0,1),2),3),4)
5 IIF(IsNull(T5),IIF(IsNull(T4),IIF(IsNull(T3),IIF(IsNull(T2),IIF(IsNull(T1),0,1),2),3),4),5)
甚至:
50 IIF(IsNull(T50),IIF(IsNull(T49),IIF(IsNull(T48),IIF(IsNull(T47),IIF(IsNull(T46),IIF(IsNull(T45),IIF(IsNull(
T44),IIF(IsNull(T43),IIF(IsNull(T42),IIF(IsNull(T41),IIF(IsNull(T40),IIF(IsNull(T39),IIF(IsNull(T38),IIF(IsNul
l(T37),IIF(IsNull(T36),IIF(IsNull(T35),IIF(IsNull(T34),IIF(IsNull(T33),IIF(IsNull(T32),IIF(IsNull(T31),IIF(IsN
ull(T30),IIF(IsNull(T29),IIF(IsNull(T28),IIF(IsNull(T27),IIF(IsNull(T26),IIF(IsNull(T25),IIF(IsNull(T24),IIF(I
sNull(T23),IIF(IsNull(T22),IIF(IsNull(T21),IIF(IsNull(T20),IIF(IsNull(T19),IIF(IsNull(T18),IIF(IsNull(T17),IIF
(IsNull(T16),IIF(IsNull(T15),IIF(IsNull(T14),IIF(IsNull(T13),IIF(IsNull(T12),IIF(IsNull(T11),IIF(IsNull(T10),I
IF(IsNull(T9),IIF(IsNull(T8),IIF(IsNull(T7),IIF(IsNull(T6),IIF(IsNull(T5),IIF(IsNull(T4),IIF(IsNull(T3),IIF(Is
Null(T2),IIF(IsNull(T1),0,1),2),3),4),5),6),7),8),9),10),11),12),13),14),15),16),17),18),19),20),21),22),23),2
4),25),26),27),28),29),30),31),32),33),34),35),36),37),38),39),40),41),42),43),44),45),46),47),48),49),50)
視覺校對,並從什麼ñExcel將窒息的nesteds綜合投資框架的測試留作練習受虐狂。
@SiddharthRout請參閱我的描述,但它不工作! – CodeLover
當然:)現在看你的代碼... –
我有一個vba以及公式解決方案...讓我完全測試它。在此期間,你可能想看到Ekkehard.Horner解決方案:) –