好久没更新了,先水一篇。。本文介绍excel中使用offset函数实现四列合并为一行的效果。
原来的表格是这样的
要变成这样的效果
先分析一下单元格的移动。
目标表格的第1 行对应了原表格的第 1 – 4 行
目标表格的第2 行对应了原表格的第 5 – 8 行
目标表格的第3 行对应了原表格的第 9 – 12 行
目标表格的每一行有8列,分别对应原表格 四行的两列。
给目标单元格每个单元格编号,由于每行8列,自然地应该把行号乘以8 再加上列号
按照从1开始数的习惯,可以把行号-1 再乘8
这样目标单元格的编号为 (行号-1)* 8 + 列号 编号如下
现在的对应关系变成了
1,2 对应 原表格的第 1 行
3,4 对应 原表格的第 2 行
5,6 对应 原表格的第 3 行
归纳一下 一个编号对应的原表格的行号是 编号/2 +1 如果按照原表格的左上角A1为基准,需要往下移动 编号/2 行
再看一下原表格的列,奇数编号对应的是第1列,距离A1 为 0
偶数编号的对应原表格的第二列, 距离A1为1
所以按照原表格A1为标准,需要往右移动 (编号 除以2 的余数) 列
OFFSET(reference, rows, cols, [height], [width])
offset函数的三个必选参数是基准位置,行偏移量,列偏移量
根据上面的分析,目标表格和原表格的对应关系
按照A1为基准,
行偏移量为 编号/2
列偏移量为 编号 mod 2 (mod是取余数)
公式要用到excel中的这几个函数
row() 单元格所在的行号
column()单元格所在的列号
mod(5,3) 5除以3的余数
所以可以写出offset函数啦
offset($A$1, ( (row()-1)*8 + column()-4 ) / 2 , mod( (row()-1)*8 + column()-4 ) , 2) )
由于需要在同一个表格中使用公式,目标表格就不能使用1列和2列了。只需要把列号偏移一下即可,如果目标表格从D1开始,就需要吧列号-4
最终公式如下
1 |
=OFFSET($A$1,((ROW()-1)*8 + COLUMN()-4) / 2,MOD((ROW()-1)*8+COLUMN()-4,2)) |
使用方法如下:
当然,这样生成后单元格的格式是公式,可以按照数值粘贴就可以变为数值了。