該問題源於這樣一個實踐場景,試想有一個花名冊,如下這樣:
現在需要根據這個花名冊批次將其轉換為考試時貼在桌上的小標籤,如下這樣:
那麼這個需求本質上就是將多行多列資料(考生姓名、考生編號、證件號碼三列)轉為單列資料(上圖需求結果的第二列)。第一列是靜態資料,第三列是遞增數列,相對都比較容易實現。
現在就教大家如何實現。
需要用到的 Excel 函式
OFFSET
實現該需求的最主要的函式,能實現透過計算座標取值。這句話有點繞,大多數時候我們寫函式的時候是將對應單元格的座標寫死的,也就是將一列資料經過計算後輸出到另一列,輸入的單元格和輸出的單元格的座標是彼此對應的。而這個函式能夠幫我們按照自己的需求“計算”出所需座標並取值。
具體用法如下:
OFFSET(reference, rows, cols, [height], [width])
引數解釋:
- reference: 偏移座標。如我們預設的偏移座標是(0,0),即左上第一個點。如果設定了偏移座標,後面的 rows 和 cols 都是相對 reference 來講的。
- rows: 第幾行。相對reference 來講。
- cols: 第幾列。reference 來講的。
剩餘的兩個引數本文當中用不到,在此不作解釋。
實際座標為(reference + rows, reference + cols)。如想獲取座標為(10, 10)的單元格,則OFFSET((5, 5), 5, 5),OFFSET((3, 7), 7, 3)都是獲取到這個單元格的函式。
QUOTIENT
整除,無餘數。
QUOTIENT(10, 5) = 2
QUOTIENT(10, 3) = 3
MOD
取餘。
MOD(10, 5) = 0
MOD(10, 3) = 1
ROW
獲取橫座標。
ROW((3, 5)) = 3
ROW((5, 3)) = 5
其他用到的 Excel 小技巧
相對位置和絕對位置
在函式中要直接獲取一個單元格,可以A1
,也可以$A$1
。前者是相對位置,也即座標值會隨著單元格的拉大而變化。後者是絕對位置,反之,座標值不會隨著單元格的拉大而變化。
具體實現
=OFFSET(Sheet2!$B$2,QUOTIENT(ROW(A3), 3)-1,MOD(ROW(A3), 3))
=OFFSET(Sheet2!$B$2,QUOTIENT(ROW(A3), 3)-1,3)
參考
- OFFSET 函式
- EXCEL函式中常用符號的用法
- EXCEL中一列(行)轉多行多列或多行多列轉一列(行)