加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Excel中将横向数据转换为纵向数据的几种方法(先横后竖)

(2016-08-05 12:56:27)
分类: Excel

源数据:

http://s11/mw690/006jaOKVzy73OeNfxyOca&690

一、数据透视表法

1、在Excel中按下快捷键Alt+D+P出现下图对话框,点击“创建单页字段”,添加A1:G15数据区域,创建数据透视表。

http://s10/mw690/006jaOKVzy73OeJm1ND69&690

2、创建的数据透视表如下图,双击行总计与列总计的交叉位置(如图45的单元格)或者右击--显示详细信息,筛选C列中的非空数据并复制到其他地方即可。

http://s14/mw690/006jaOKVzy73OfhTXmlcd&690

http://s11/mw690/006jaOKVzy73OfiO8ZQca&690
http://s9/mw690/006jaOKVzy73Og3CZHG88&690

先竖后横排列数据只需将数据先在Excel里面转置或者在数据透视表里将行列字段对调即可。

------------------------------------------------------------------------------------------------
二、公式法

I1单元格中输入公式:

=OFFSET(A$1,SMALL(IF($B$2:$G$15<>"",ROW($B$2:$G$15)-1,4^8),ROW(A1)),)&""

J1单元格中输入公式:

=OFFSET(A$1,,SMALL(IF(OFFSET(B$1,MATCH($I1,$A$2:$A$15,),,,6)<>"",COLUMN($B$2:$G$15)-1),COUNTIF(I$1:I1,I1)))&""

K1单元格中输入公式:

=OFFSET(A$1,MATCH($I1,$A$2:$A$15,),SMALL(IF(OFFSET(B$1,MATCH($I1,$A$2:$A$15,),,,6)<>"",COLUMN($B:$G)-1),COUNTIF(I$1:I1,I1)))&""

或者使用INDEX(引用区域,MATCH(),MATCH())即可

公式输入完成后按Ctrl+Shift+Enter结束,结果如下图。
http://s8/mw690/006jaOKVzy73P6iNnvN27&690

先竖后横排列数据只需将行ROW列COLUMN互换

=OFFSET(A$1,,SMALL(IF($B$2:$G$15<>"",COLUMN($B$2:$G$15)-1,2^8),ROW(A1)),)&""

=OFFSET(A$1,SMALL(IF(OFFSET(A$2,,MATCH($I1,$B$1:$G$1,),14,)<>"",ROW($B$2:$G$15)-1),COUNTIF(I$1:I1,I1)),)&""

=OFFSET(A$1,SMALL(IF(OFFSET(A$2,,MATCH($I1,$B$1:$G$1,),14,)<>"",ROW($B$2:$G$15)-1),COUNTIF(I$1:I1,I1)),MATCH($I1,$B$1:$G$1,))&""

------------------------------------------------------------------------------------------------
三、转置法

复制B2:G15粘贴为文本到Word中,然后替换(查找内容:^t,替换为:^p,如下图),将结果复制到Excel中,定位空值并删除即可得到结果。

http://s11/mw690/006jaOKVzy73PEDxCEafa&690

先竖后横排列数据只需将数据先在Excel里面转置再在Word里替换即可

------------------------------------------------------------------------------------------------

四、微软插件PowerQuery逆透视法(插件集成到Excel2016版)

点击"PQ-从文件-从Excel--编辑"进入"查询编辑器"视窗。点击"转换-->将第一行作为标题和逆透视咧",整理数据,得到结果并加载至Excel中即可。

http://s13/mw690/006jaOKVzy73PFr4Op68c&690

http://s7/mw690/006jaOKVzy73PGIFWlw96&690

http://s11/mw690/006jaOKVzy73PGz6mYaea&690
先竖后横排列数据只需将数据先在Excel里面转置再使用PQ或者在PQ里转置即可

------------------------------------------------------------------------------------------------

五、VBA法

Sub transfer()
Dim arr1, arr2, Row_ As Integer, Col_ As Integer, Total As Integer
Dim i As Integer, j As Integer, k As Integer
Application.ScreenUpdating = False
Row_ = Range("A" & Rows.Count).End(xlUp).Row
Col_ = Cells(1, Columns.Count).End(xlToLeft).Column
Total = Row_ * Col_
Range("J2:L" & Total).ClearContents
arr1 = ActiveSheet.UsedRange.Value
ReDim arr2(1 To Total, 1 To 3)
For i = 2 To Row_
For j = 2 To Col_
If arr1(i, j) <> "" Then
k = k + 1
arr2(k, 1) = arr1(i, 1)
arr2(k, 2) = arr1(1, j)
arr2(k, 3) = arr1(i, j)
End If
Next
Next
Range("J2").Resize(k, UBound(arr2, 2)) = arr2
Application.ScreenUpdating = True
End Sub

先竖后横排列数据只需将For i = 2 To Row_和For j = 2 To Col_对调,arr1(i, 1)和arr1(1, j)对调即可

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有