首页 > Office专区 > Excel教程 >

Excel数据批量转置(二列转多列)

来源:互联网 2023-02-20 18:23:34 227

修法布施得聪明智慧,多分享让生活更美好。上次分享《Excel数据批量转置(多列转三列)》,现分享逆过程二列转多列。M3y办公区 - 实用经验教程分享!

4Excel数据批量转置(多列转三列)M3y办公区 - 实用经验教程分享!

工具/原料

  • Microsoft Office Excel 2007
  • Excel VBA

实例问题

  • 1

    "Sheet1"表是“名称”、“组件”2列数据表,其中第一列“名称”不同类有很多重复,第二列“组件”数量。把"Sheet1"表数据转成多列(不重复“名称”第一列,从第二列开始各列的相应”组件”数量列表)数据"Sheet2"表。M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 1本页面未经许可获取自百度经验
  • 处理方法步骤

  • 1

    首先打开上例文件,如下图。M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 2

    然后按下快捷键ALT F11打开VBA(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 3

    然后插入了一个模块1,在代码框中复制如下代码:M3y办公区 - 实用经验教程分享!

    Option Base 1M3y办公区 - 实用经验教程分享!

    Sub 表格转换()M3y办公区 - 实用经验教程分享!

    '2019-12-11 22:19:31M3y办公区 - 实用经验教程分享!

    Dim myrange As Range, myrange1 As Range, m1, zhtj(), zhtj1(), i As Long, i1 As Long, j As Long, r As Long, n As Long, k As LongM3y办公区 - 实用经验教程分享!

    r = Range("a65536").End(xlUp).RowM3y办公区 - 实用经验教程分享!

    Set myrange1 = Range("a2:a" & r)M3y办公区 - 实用经验教程分享!

    m1 = Range("a2:b" & r)M3y办公区 - 实用经验教程分享!

    ReDim zhtj(myrange1.Count, 2)M3y办公区 - 实用经验教程分享!

    i = 0M3y办公区 - 实用经验教程分享!

    For Each myrange In myrange1M3y办公区 - 实用经验教程分享!

    If myrange.Value > "" ThenM3y办公区 - 实用经验教程分享!

    i = i 1M3y办公区 - 实用经验教程分享!

    If i = 1 ThenM3y办公区 - 实用经验教程分享!

    zhtj(i, 1) = myrange.ValueM3y办公区 - 实用经验教程分享!

    ElseM3y办公区 - 实用经验教程分享!

    i1 = iM3y办公区 - 实用经验教程分享!

    For j = 1 To i - 1M3y办公区 - 实用经验教程分享!

    If zhtj(j, 1) = myrange.Value Then i = i - 1: Exit ForM3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    If i1 = i ThenM3y办公区 - 实用经验教程分享!

    zhtj(i, 1) = myrange.ValueM3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    Next myrangeM3y办公区 - 实用经验教程分享!

    For j = 1 To iM3y办公区 - 实用经验教程分享!

    zhtj(j, 2) = Application.WorksheetFunction.CountIf(myrange1, zhtj(j, 1))M3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    n = Application.WorksheetFunction.Max(Application.Index(zhtj, 0, 2))M3y办公区 - 实用经验教程分享!

    ReDim zhtj1(i, n 1)M3y办公区 - 实用经验教程分享!

    k = 1M3y办公区 - 实用经验教程分享!

    For j = 1 To iM3y办公区 - 实用经验教程分享!

    For i1 = 1 To r - 1M3y办公区 - 实用经验教程分享!

    zhtj1(j, 1) = zhtj(j, 1)M3y办公区 - 实用经验教程分享!

    If zhtj(j, 1) = m1(i1, 1) ThenM3y办公区 - 实用经验教程分享!

    k = k 1M3y办公区 - 实用经验教程分享!

    zhtj1(j, k) = m1(i1, 2)M3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    Next i1M3y办公区 - 实用经验教程分享!

    k = 1M3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    Sheets("Sheet2").Range(Sheets("Sheet2").Range("a2"), Sheets("Sheet2").Range("a2").Offset(i - 1, n)) = zhtj1M3y办公区 - 实用经验教程分享!

    End SubM3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 4

    回到工作表窗口,然后菜单栏中点【视图】中下列表中【宏】列表【查看宏(V)】打开宏对方框,选宏名“表转换 ”点【执行】,在Sheet2表生成结果。M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 5

    操作过程和运行结果动态操作如下图:M3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 万能式转换(二列转多列)

  • 1

    下面修改下代码,做成万能式转换数据,选原数据(不含标题),然后运行宏【二列转多列】,提示选第一个单元格数据输出,然后在该单元格开始输出多列数据,代码如下:M3y办公区 - 实用经验教程分享!

    Sub 二列转多列()M3y办公区 - 实用经验教程分享!

    '2019-12-26 22:15:32M3y办公区 - 实用经验教程分享!

    Dim n As Long, k As Long, m1, zhtj(), zhtj1(), i As Long, i1 As Long, j As Long, n1 As Long, myr As RangeM3y办公区 - 实用经验教程分享!

    m1 = SelectionM3y办公区 - 实用经验教程分享!

    n = UBound(m1, 1)M3y办公区 - 实用经验教程分享!

    ReDim zhtj(n, 2)M3y办公区 - 实用经验教程分享!

    i = 0M3y办公区 - 实用经验教程分享!

    For k = 1 To nM3y办公区 - 实用经验教程分享!

    If m1(k, 1) > "" ThenM3y办公区 - 实用经验教程分享!

    i = i 1M3y办公区 - 实用经验教程分享!

    If i = 1 ThenM3y办公区 - 实用经验教程分享!

    zhtj(i, 1) = m1(k, 1)M3y办公区 - 实用经验教程分享!

    ElseM3y办公区 - 实用经验教程分享!

    i1 = iM3y办公区 - 实用经验教程分享!

    For j = 1 To i - 1M3y办公区 - 实用经验教程分享!

    If zhtj(j, 1) = m1(k, 1) Then i = i - 1: Exit ForM3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    If i1 = i ThenM3y办公区 - 实用经验教程分享!

    zhtj(i, 1) = m1(k, 1)M3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    Next kM3y办公区 - 实用经验教程分享!

    i1 = 0M3y办公区 - 实用经验教程分享!

    For j = 1 To iM3y办公区 - 实用经验教程分享!

    For k = 1 To nM3y办公区 - 实用经验教程分享!

    If m1(k, 1) = zhtj(j, 1) Then i1 = i1 1M3y办公区 - 实用经验教程分享!

    Next kM3y办公区 - 实用经验教程分享!

    zhtj(j, 2) = i1M3y办公区 - 实用经验教程分享!

    i1 = 0M3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    n1 = Application.WorksheetFunction.Max(Application.Index(zhtj, 0, 2))M3y办公区 - 实用经验教程分享!

    ReDim zhtj1(i, n1 1)M3y办公区 - 实用经验教程分享!

    k = 1M3y办公区 - 实用经验教程分享!

    For j = 1 To iM3y办公区 - 实用经验教程分享!

    For i1 = 1 To nM3y办公区 - 实用经验教程分享!

    zhtj1(j, 1) = zhtj(j, 1)M3y办公区 - 实用经验教程分享!

    If zhtj(j, 1) = m1(i1, 1) ThenM3y办公区 - 实用经验教程分享!

    k = k 1M3y办公区 - 实用经验教程分享!

    zhtj1(j, k) = m1(i1, 2)M3y办公区 - 实用经验教程分享!

    End IfM3y办公区 - 实用经验教程分享!

    Next i1M3y办公区 - 实用经验教程分享!

    k = 1M3y办公区 - 实用经验教程分享!

    Next jM3y办公区 - 实用经验教程分享!

    Set myr = Application.InputBox(Prompt:="使用鼠标选择输出转换数据的一个单元格", Type:=8)M3y办公区 - 实用经验教程分享!

    Range(myr, myr.Offset(i - 1, n1)) = zhtj1M3y办公区 - 实用经验教程分享!

    End SubM3y办公区 - 实用经验教程分享!

    Excel数据批量转置(二列转多列)M3y办公区 - 实用经验教程分享!

  • 2

    如果觉得这篇经验帮到了您,请点击下方的 “投票点赞" 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!M3y办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!M3y办公区 - 实用经验教程分享!


    标签: VBAexcel数据

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码