Excel函数——OFFSET函数将多列合并成一列
最近遇到一個問題,如圖所示,每個表的字段分別一列展示,不同表有公共字段,也有獨有的字段,現想統計這些表一共涉及到哪些字段。基本思路就是將這些表的字段合并為一列再去重。因為涉及到70多列,復制粘貼比較耗時,于是想到用Excel中的OFFSET函數解決。
OFFSET函數的功能是以指定的引用為參考系,通過給定偏移量得到新的引用。返回的引用可以是任何一個單元格,也可以是單元格區域,還可以指定返回的行數或列數。其格式為:
OFFSET(reference,rows,cols,height,width)
- 參數reference是一個引用區域,作為偏移量的參照系,它必須是對單元格或相連單元格區域的引用,否則函數將返回錯誤值“#VALUE!”
- 參數rows表示相對于reference參照系偏移的行數,若為正數表示在起始引用的下方,若為負數表示在起始引用的上方;
- 參數cols表示相對于reference參照系偏移的列數,若為正數表示在起始引用的右方,若為負數表示在起始引用的左方;
- 參數height表示高度,即要返回的目標引用區域的行數,它必須是正數;
- 參數width表示寬度,即要返回的目標引用區域的列數,它必須是正數。
注意如果省略了height或width,則認為其高度或寬度與reference相同;此函數實際上并不移動任何單元格或更改選定區域,它只是返回一個引用,它可用于任何需要將引用作為參數的函數。
例1:獲取單元格,如圖在F2單元格輸入公式OFFSET(A1,2,1,1,1),表示以A1單元格為參考向下移動2行、向右移動1列,獲得單個單元格。輸入公式按“Enter”即可得到圖中所示結果。
例2:獲取單元格區域,如圖選中G2:H4單元格區域輸入公式OFFSET(A1,1,1,3,2),表示以A1單元格為參考向下移動1行、向右移動1列,獲得3行2列的單元格區域。因為獲得的是區域,需要輸入完公式后按“Ctrl+Shift+Enter”,即得到圖中所示結果。
例3:將表1的數據轉成表2形式,即數值列為各指標數值的依次追加。為了實現拖動鼠標復制公式且保證得到正確的結果,結合了絕對引用$E$2、ROW()、MOD()、INT()等,其中
- $E$2表示在E列公式中都是以E2為參考系的
- ROW()是獲取當前單元格所在行,MOD()是取余,INT()是取整,三個函數結合實現動態計算偏移量。因為表1中每列數值為9個,因此MOD()、INT()中均除以9。
首先,E3單元格的公式
OFFSET($E$2,MOD(ROW(E3)-3,9)+1,INT((ROW(E3)-3)/9)+3)
=OFFSET($E$2,MOD(3-3,9)+1,INT((3-3)/9)+3)
=OFFSET($E$2,0+1,0+3)
=OFFSET($E$2,1,3)
表示以E2單元格為參考向下移動1行、向右移動3列,獲得單個單元格,得到如圖結果。
E16單元格的公式OFFSET($E$2,MOD(ROW(E16)-3,9)+1,INT((ROW(E16)-3)/9)+3)
=OFFSET($E$2,MOD(16-3,9)+1,INT((16-3)/9)+3)
=OFFSET($E$2,4+1,1+3)
=OFFSET($E$2,5,4)
表示以E2單元格為參考向下移動5行、向右移動4列,獲得單個單元格,得到如圖結果。
通過示例基本掌握了OFFSET()的使用方法,下面利用OFFSET()解決開篇的問題。
- Step1:在單元格D3輸入公式OFFSET($D$3,MOD(ROW(D3)-3,21),INT((ROW(D3)-3)/21)+1,1,1),然后向下拖動鼠標即得到D列數據。
- Step2:因為每一列的長度不同,所以對于沒有數據根據公式自動取零了。復制D列的數據粘貼數值到B列,在此利用查找/替換功能把零去掉,即將零替換為空值。
- Step3:利用數據–刪除重復項功能進行去重,得到最終效果。
ps:初衷是通過撰寫博文記錄自己所學所用,實現知識的梳理與積累;將其分享,希望能夠幫到面臨同樣困惑的小伙伴兒。如發現博文中存在問題,歡迎隨時交流~~
總結
以上是生活随笔為你收集整理的Excel函数——OFFSET函数将多列合并成一列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyNVR无插件流媒体服务器前端技术
- 下一篇: teamviewer 11 linux,