在EXCEL中将同列不同相同人的数据转换到一行中,首先考虑的就是INDEX引用。
在姓名张三旁边输入公式并向右向下填充公式,如下:
=IFERROR(INDEX($D$3:$D$13,LARGE(($C$3:$C$13=$G3)*ROW($1:$11),IF(COLUMN(A1)<=COUNTIF($C$3:$C$13,$G3),COLUMN(A1),""))),"")
注意:不能直接按回车键,这是数组公式需要按<Ctrl+Shift+Enter>三键组合来结束公式编辑,结束后Excel会自动生成一对大括号在公式的两端。
整体思路:
利用LARGE求某个区域中第几大值的这个特性提取INDEX函数第二个参数应该取多少。
最后可以通过公式计算一步一步计算观察结果的变化。
由于源数据中同一时间同一人有相同记录,故先用if( )函数决断错位,然后用vlookup( )函数来达到寻值,如下:
1、加入一列“时间+姓名”,值为 A2=B2&C2, 下拉,以此列进行排序;
2、扩展电话,向右横拉,得到电话1+电话2+电话3....(目前重复值多少);
3、E2=IF($A3=$A2,D3,0), F2=IF($A3=$A2,E3,0), G2=IF($A3=$A2,F3,0), 横向定义公式,直到有 0 出现而止, 三个单元格公式定义完成后,向下竖拉,如上图;
4、复制源数据表A B C三列,在另一地方粘贴,再数据---删除重复项,得到前三列唯一记录,如下图:
5、电话0、电话1.....定义公式,向右直到 0 出现(最大重复记录), 然后向下竖拉公式,
M2=VLOOKUP($J2,$A$2:$G$19,4,0), N2=VLOOKUP($J2,$A$2:$G$19,5,0), O2==VLOOKUP($J2,$A$2:$G$19,6,0), P2==VLOOKUP($J2,$A$2:$G$19,7,0)
复制数字,选择粘贴为数值,删除不用的列,美化表格,
OK了,可以再交流。