excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel 矩阵报表数据转置三种方法(VBA、函数公式、数据透视表)

本文于2023年8月2日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

内容提要

  • 矩阵数据转置的三种方法

  • VBA代码法

  • 函数公式法

  • 数据透视表

大家好,我是冷水泡茶,今天在论坛上看到一个求助贴:

他的原表是这样的

他的需求是这样的:

楼主要求用VBA解决,我们想到三种方法,一起来看一下吧(原表的行列字段有微调):

VBA代码法

Sub TransFormData()    Dim arrData(), arrTem()    Dim wsSource As Worksheet, wsTarget As Worksheet    Dim iRow As Integer, iCol As Integer    Dim i As Integer, j As Integer, k As Integer    Set wsSource = Sheets("原表")    arrData = wsSource.Range("A1").CurrentRegion.Value    iRow = UBound(arrData, 1)    iCol = UBound(arrData, 2)    Dim totalRows As Integer    totalRows = (iRow - 1) * (iCol - 1) + 1    ReDim arrTem(1 To totalRows, 1 To 3)    arrTem(1, 1) = "ITEM"    arrTem(1, 2) = "数量"    arrTem(1, 3) = "日期"    k = 1    For i = 2 To iCol        For j = 2 To iRow            k = k + 1            arrTem(k, 1) = arrData(j, 1)            arrTem(k, 2) = arrData(j, i)            arrTem(k, 3) = arrData(1, i)        Next    Next    '检查表"转置"是否存在,存在则清空,不存在则添加    On Error Resume Next    Set wsTarget = Worksheets("转置")    On Error GoTo 0    If wsTarget Is Nothing Then        Set wsTarget = Sheets.Add(After:=Sheets(Sheets.Count))        wsTarget.Name = "转置"    Else        wsTarget.Cells.Clear ' 清除    End If    '输出到 "转置" 表    wsTarget.Range("A1").Resize(totalRows, 3).Value = arrTemEnd Sub

代码解析:

1、把原始数据读入数组arrData()。

2、根据数据行、列的数量,重新定义目标数组arrTem()。

3、循环数组arrData()的行、列,把数据写入数组arrTem()。

4、把结果写入工作表“转置”。

函数公式法

1、在表“公式”中输入表头。

2、在A2单元格输入公式:

=INDEX(原表!$A$2:$A$158,MOD(ROW(A1)-1,ROWS(原表!$A$2:$A$158))+1,1)

3、在B2单元格输入公式:

=INDEX(原表!$B$2:$Y$158,MOD(ROW(A1)-1,ROWS(原表!$A$2:$A$158))+1,INT((ROW(A1)-1)/ROWS(原表!$A$2:$A$158)+1))

4、在C2单元格输入公式:

=INDEX(原表!$B$1:$Y$1,1,INT((ROW(A1)-1)/ROWS(原表!$A$2:$A$158)+1))

5、选中A2:C2,往下拖,直到出现错误值为止。

6、也可以在上述公式前增加IFERROR函数容错。

数据透视表

1、选中所有列,插入数据透视,选择新建工作表。

2、把ITEM字段加到行,日期字段都加到“值”。

3、把右上列框里的∑数值拖到行:

则变成这样:

4、在设计菜单-->报表布局,选择“以表格形式显示”,再右击“ITEM”,字段设置-->布局和打印-->重复项目标签,结果如下:

5、复制整个表,粘贴为数值(如果需要重复使用这个数据透视表的,可以复制粘贴到另一张表)。

6、筛选删除空白、汇总项目,把所有“求和项:”替换为空,搞定。

喜欢就点个赞、点在看、留个言呗!需要示例文件的朋友请关注本人同名V公众号查看文件获取方式。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接