技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 22799
|
8#
發(fā)表于 2016-5-5 04:58:49
|
只看該作者
這個(gè)套路有點(diǎn)深,小妖姐姐不理解不出奇。不妨按我的理解先過一遍吧:
錯(cuò)位引用,應(yīng)該是引用當(dāng)前列的上一行以及其它列的同一行,計(jì)算后得到一個(gè)結(jié)果。
——也許倫家引用的是當(dāng)前列的和其他列的任意一行呢?
——這種情況只有2種可能性:要么是兩列的表頭不一致,合并單元格之類導(dǎo)致的;要么就是同一列用了不同的公式。這兩種可能在Access里都變成了不可能。如果考慮到這一層,Access輸了。
說完定義,現(xiàn)在來看套路。以累計(jì)為例:
- Excel版本:將當(dāng)前行數(shù)據(jù)(D6)與上一行結(jié)果(E5)進(jìn)行合計(jì)。
- Access版本:Dsum可以視為:Dsum("數(shù)量","測試數(shù)據(jù)","ID="&[ID])+Dsum("數(shù)量","測試數(shù)據(jù)","ID<"&[ID])
前者相當(dāng)于D6,后者相當(dāng)于E5。
我們先來看Excel。E5怎么來的?SUM(D5,E4)→E4=SUM(D4,E3)→……E2=SUM(D2,E1),我們知道,E1是文本,表頭,不參與計(jì)算,如此遞推下去,E5=SUM(D1:D4)。
這不是就我們Dsum("數(shù)量","測試數(shù)據(jù)","ID<"&[ID])所表達(dá)的嗎?Dsum("數(shù)量","測試數(shù)據(jù)","ID="&[ID])相當(dāng)于D6應(yīng)該不必贅述了吧?
Access版本里那個(gè)遞推根本沒見到嘛。事實(shí)上,在Access里這并不算什么。定義2個(gè)變量(例如i和j),預(yù)先將第一行的“數(shù)量”賦值給i,然后讀取第一行的“數(shù)量”,如果等于i,k就不變,i不變;否則就增加1,i變?yōu)樾碌摹皵?shù)量”。如此一步步下去即可達(dá)到遞推的目的。
但是這個(gè)寫法較為復(fù)雜,所以Roy就取巧地使用記錄的位置來處理。
|
|