Excel中OFFSET函数(一)——“实现矩阵转置”
1.OFFSET函數
Offset是Excel中的函數,在Excel中,OFFSET函數的功能為以指定的引用為參照系,通過給定偏移量得到新的引用。返回的引用可以為一個單元格或單元格區域。并可以指定返回的行數或列數。Reference 作為偏移量參照系的引用區域。Reference 必須為對單元格或相連單元格區域的引用;否則,函數 OFFSET 返回錯誤值#VALUE!。
函數語法
OFFSET(reference,rows,cols,height,width)
Reference 作為偏移量參照系的引用區域。Reference 必須為對單元格或相連單元格區域的引用;否則,函數 OFFSET 返回錯誤值#VALUE!。
Rows相對于偏移量參照系的左上角單元格,上(下)偏移的行數。行數可為正數(代表在起始引用的下方)或負數(代表在起始引用的上方)。
Cols 相對于偏移量參照系的左上角單元格,左(右)偏移的列數列數可為正數(代表在起始引用的右邊)或負數(代表在起始引用的左邊)。
Height高度,即所要返回的引用區域的行數。Height 可以為負,-x表示當前行向上的x行。
Width寬度,即所要返回的引用區域的列數。Width 可以為負,-x表示當前行向左的x行。
?
以上摘自百度百科,下面才是重點
簡單來說,Offset功能可以理解為:“尋找指定位置”并返回該位置的值。(可以看作在玩飛行棋)
其中的參數reference —— 該次“尋找”的“起點”
????????????????? rows —— 向下尋找的格數(值為負表示向上)
????????????????? cols —— 向右尋找的格數(值為負表示向左)
????????????????? height與width表示尋找的終點的大小(是一塊區域(height行width列) or 是一個單元格)
2.舉例
1. 尋找單元格
目的:讓E8單元格顯示北京市在19年5月的CPI,即B4中的值
函數:E8中使用函數——Offset(A1,3,1);
過程:以A1為起點,先向下走3格到達A4,再向右走1格到達目的地B4。返回B4的值,E8被賦值為101.8.
拓展:在下拉,右拉之后,我們發現——在這種情況下,使用“E8=offset(A1,3,1)”與使用"E8=B4"的效果是一樣的(實現了矩陣的復制),那么我們使用這個函數的必要性在哪呢???
所以,我如果再提出一個問題:讓這個矩陣實現如下圖所示的轉置(此時"E8=B4"就不管用了)
對于這個問題,我們分2步來進行分析求解
-
在進行下拉操作時,如何將起點右邊的數據放在終點的下方?如圖中如何將北京,天津,河北豎著放?
在說明這個操作之前,我們先了解——當我們進行所謂的“下拉”,“右拉”操作時,對于新增單元格來說,它們的函數是怎樣變化的。
從上圖中可以發現——“下拉”時,offset函數中的參數中,對于單個的數值(如3,1)是不變的,而對于坐標(字母與數字的組合,如A1)—— 下拉時,坐標的行標(A1中“1”→“2”)增加,列標不變;右拉時,坐標的列數(A1中"A"→"B")增加,行標不變。
?
??? 2. 在了解了“下拉”的變化后,我們再來看所要達到的目的——A1右方數據放于A1下方位置。對此,我們可以讓下拉時使得“行的變化”轉化成“列的變化”,即使得“E8的‘下’一個新增單元格”?? 對應?? “A1的‘右’一個單元格”。
要完成上述操作:首先我們需要“固定起點”。因此我們使用“$”符號,其表示絕對引用,當進行上下拉或左右拉時,$后的字母或數字保持不變。因此offset的第一個參數(起點坐標)固定為A1————Offset($A$1,...);
那再來看看我們的目的:“行轉豎”
相當于——當下拉使得函數中的行標增加(1→2→...)時,函數中的offset中的單次右移量cols隨之增加。
因此,我們使用ROW()函數來反應列標的變化,并將它放在offset的cols位置來讓cols隨之增加。
即Offset($A$1,0,row(A1)-1)。
【還不懂的看這里:
其次,我們需要:每次E8向下拉一下,E9數值來源(E9中offset的終點)相對于E8數值來源(A1)來說,向下移動0格,向左移動一格。所以需要在E8的函數中便表明,一旦下拉(某一坐標的行標變化)就要同時使得offset中右移的格數加一(cols+1)。因此對于E8的Offset的第二,三個參數(下移,右移格數)————Offset($A$1,0,row(A1)-1); row()是一個函數,其功能為返回括號內左邊的行數,例如row(A4) = 4; row(A2) = 2; row(B5) = 5;使用該函數的作用就是 當我們下拉時A1中的1會遞增,我們借用這個遞增的數,實現cols+1的目的。】
最后,對于Offset后兩個參數,由于我們移動的是單元格,所以不需要給值,其默認為1,1。效果如下:
起點A1右方數據放于E8下方:在E8中寫入函數——Offset($A$1,0,row(A1)-1);
?
-
在進行右拉操作時,如何將起點下方的數據放在終點的右方?如圖中如何將2019年7月,2019年6月,...橫著放?
有了上方“橫轉豎”的基礎,我們再來看“豎轉行”的函數。首先我們嘗試就Offset($A$1,0,row(A1)-1)函數向右拉,看看會出現什么情況。
可以發現,右拉之后的單元格中所有的內容的都與A1相同。這是由于當我們右拉時,只有row(A1)中的A(列數)遞增,然而人家row函數只返回行數“1”,傻眼了吧?!就是說到頭來,里面什么都沒變,當然都與A1一樣.
?
那再來看看我們的目的:“豎轉行”
相當于——當右拉使得函數中的列標增加(A→B→...)時,函數中的offset中的單次下移量rows隨之增加。
因此,我們使用COLUMN()函數來反應列標的變化,并將它放在offset的rows位置來讓rows隨之增加。
即Offset($A$1,COLUMN(A1)-1,row(A1)-1)。
?
實現轉置:Offset($A$1,COLUMN(A1)-1,row(A1)-1)
總結
以上是生活随笔為你收集整理的Excel中OFFSET函数(一)——“实现矩阵转置”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git使用流程图
- 下一篇: 游戏角色制作行业标准?深度技术好文,建模