新浪博客

Excel 两行多列变多行多列(一维变二维,及反过来)

2015-10-11 13:56阅读:
一维变二维
原数据格式
部门 姓名
111 张1
112 张2
112 张3
112 张4
112 张5
112 张6
112 张7
113 张8
113 张9
115 张10
115 张11
115 张12
115 张13
115 张14
117 张15
117 张16
117 张17
117 张18
117 张19
120 张20
120 张21
120 张22
120 张23
120 张24
120 张25
121 张26
121 张27
121 张28
121 张29
121 张30
目标格式
部门 姓名
111 张1
112 张2 张3 张4 张5 张6 张7
113 张8 张9
115 张10 张11 张12 张13 张14
117 张15 张16 张17 张18 张19
120 张20 张21 张22 张23 张24 张25
121 张26 张27 张28 张29 张30
数组公式
E2单元格的公式:
=IFERROR(INDEX($A$1:$B$50,SMALL(IF($A$2:$A$31=$E2,ROW($A$2:$A$31),4^8),COLUMN(A:A)),2),'')
VBA方法
Sub cc()
Dim arr, d, i, j, k, t, brr(),
hd
Set d = CreateObject('scripting.dictionary')
Set hd = [a1:b1]
arr = [a1].CurrentRegion
For i = 2 To UBound(arr)
If Not d.exists(arr(i, 1)) Then
Set d(arr(i, 1)) = Range('b' & i)
Else
Set d(arr(i, 1)) = Union(d(arr(i, 1)), Range('b' & i))
End If
Next
k = d.keys
t = d.items
ReDim brr(1 To d.Count, 1 To 2)
For i = 0 To UBound(k)
brr(i + 1, 1) = k(i)
If IsArray(t(i)) Then
brr(i + 1, 2) = Join(Application.Transpose(t(i)), ', ')
Else: brr(i + 1, 2) = t(i)
End If
Next
hd.Copy [f1]
[f2].Resize(d.Count, 2) = brr
[f2].CurrentRegion.Columns.AutoFit
Set hd = Nothing
Set d = Nothing
End Sub


还可以把这些放到一个单元格里。
1. 添加辅助列
=B2&IF(COUNTIF(A3:A$100,A2),'、'&VLOOKUP(A2,A3:C$100,3,0),'')
填充
2. 把部门列出来,放到F列,G列填充公式
=IFERROR(VLOOKUP(F2,A:C,3,0),'')
之后可以变成
部门 姓名
111 张1
112 张2、张3、张4、张5、张6、张7
113 张8、张9
115 张10、张11、张12、张13、张14
二维变一维
常用方法:
在excel中有时汇总数据过于繁杂,无法进行筛选等步骤,就是汇总表是二维数据,而且不但有标题行还有标题列,行列交汇处是二者的汇总数据类型的。我们来个图给大家解释下,比如下面这张图

现在我想进行分析,即每月的销量数据,这便是将二维变一维的目的。

第一步,选择数据透视表功能,选择数据源类型为'多重合并计算数据区域',如图所示

第二步,点击'下一步'功能,使用默认的页字段数目选项'创建单页字段'。

第三步,选择选定区域,就是点击下一步后,选中我们的源数据区域,A1:H6如图所示

第四步,选择完成按钮,得到一张数据透视表。

第五步,双击数据透视表中末端值,得到的数据便是我们想要得到的一维数据表格。如图所示







只用鼠标:
http://excelpro.blog.sohu.com/306735137.html




城轨1401 龚天宇(10次) 姚顺宗(5次) 吴治宏(1次)
城轨1402 杨腾浪(1次) 刘伟(1次)
城轨1403 李承芮(7次) 罗砚(6次) 徐阳(4次) 杨斯淋(3次) 曾维松(3次) 蹇金(3次) 贺海峰(3次)
城轨1404 李勇(1次)
城轨1405 陈鹏宇(6次) 蔡正锐(1次) 蒋逸(1次) 温游超(1次)
城轨1406 邹文泰(1次)
城轨1407 廖寒冬(5次) 冉雨隆(3次) 赵孝飞(2次) 龙瑶(2次) 徐文博(1次) 田结铭(1次) 胡豪(1次)
港航1401
航海1401 张悦(1次) 舒建(1次)
航海1402 谯松林(1次)
计算机1401 冉昭(5次) 钱红(2次) 丁财森(1次) 刘芳僮(1次) 吴海龙(1次) 赵文銘(1次)
交控1401
轮机1401 谢强(3次)



=$A1 =C1 向右填充至为0
全部向下填充至全为0
你会发现第一列和第二列就是你要的东西了。再筛选一下就好。
这种方法横竖都能用,都能填充。










公式法:
=INDEX($A$1:$H$14,INT((ROW(A1)-1)/7)+1,1)
=INDEX($A$1:$H$14,INT((ROW(A1)-1)/7)+1,MOD((ROW(A1)-1),7)+2)
office2016:
Excel2016中让二维表快速转换为一维表的方法
之前大家都是先创建一个多重合并计算区域的数据透视表,然后双击透视表的汇总项来实现的。
有了Excel2016,这个方法估计就要成为历史了。
单击数据区域任意单元格,【数据】【从表格】。
Excel2016中让二维表快速转换为一维表的方法
这样Excel就会自动将区域转换为【表】,并且弹出【表1 查询编辑器】
Excel2016中让二维表快速转换为一维表的方法
单击首列任意单元格,【转换】【逆透视其他列】
Excel2016中让二维表快速转换为一维表的方法
点击【开始】【关闭并上载】。
Excel2016中让二维表快速转换为一维表的方法
这样自动生成了一个查询工作表,看看数据,已经转换为一维的列表了。
Excel2016中让二维表快速转换为一维表的方法
就这么简单。

新功能“Office应用程序”

在Office 2013中,“插入”选项卡下出现了一个新的组件,即“Office应用程序”,用户可以在此搜寻到一些可以帮助快速实现某些功能的小插件,而我们今天的英雄就是这些小插件中的一员,而且还是免费的哦!
首先,来到“插入”选项卡,打开“Office应用程序”。
Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
然后,进入到“Office应用程序”界面,进行插件的搜索。我们将要使用到的插件叫做“XL Tools.net Unpivot Table For Excel”。点击安装即可。
Excel <wbr>两行多列变多行多列(一维变二维,及反过来) Excel <wbr>两行多列变多行多列(一维变二维,及反过来)

Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
最后,稍等片刻,它将会出现在你的Excel窗口的最右端。
Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
现在,你可以使用了!

巧用“XL Tools.net Unpivot Table For Excel”

操作方法非常简单,分三步走:
1. 选择要进行转换的二维表格
Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
2. 在空白区域选取一个单元格作为将要放置转换好的一维表格的起始位置。
Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
3. Let’s “Unpivot Table”
Excel <wbr>两行多列变多行多列(一维变二维,及反过来)
最后的最后,你只需要按照个人喜好给你的表格设置个样式就好了,然而这并不是必要的,曾经花费我们大量时间的表格的二维转一维工作就这样轻松实现了,是不是觉得非常简单呢?Office应用程序里还有很多好用的插件,快去寻找吧!

我的更多文章

下载客户端阅读体验更佳

APP专享