广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

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

    来源:网络收集  点击:  时间:2024-03-01
    【导读】:
    修法布施得聪明智慧,多分享让生活更美好。上次分享《Excel数据批量转置(多列转三列)》,现分享逆过程二列转多列。工具/原料moreMicrosoft Office Excel 2007Excel VBA实例问题1/1分步阅读

    Sheet1表是“名称”、“组件”2列数据表,其中第一列“名称”不同类有很多重复,第二列“组件”数量。把Sheet1表数据转成多列(不重复“名称”第一列,从第二列开始各列的相应”组件”数量列表)数据Sheet2表。

    处理方法步骤1/5

    首先打开上例文件,如下图。

    2/5

    然后按下快捷键ALT+F11打开VBA(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。

    3/5

    然后插入了一个模块1,在代码框中复制如下代码:

    Option Base 1

    Sub 表格转换()

    2019-12-11 22:19:31

    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 Long

    r = Range(a65536).End(xlUp).Row

    Set myrange1 = Range(a2:a r)

    m1 = Range(a2:b r)

    ReDim zhtj(myrange1.Count, 2)

    i = 0

    For Each myrange In myrange1

    If myrange.Value Then

    i = i + 1

    If i = 1 Then

    zhtj(i, 1) = myrange.Value

    Else

    i1 = i

    For j = 1 To i - 1

    If zhtj(j, 1) = myrange.Value Then i = i - 1: Exit For

    Next j

    If i1 = i Then

    zhtj(i, 1) = myrange.Value

    End If

    End If

    End If

    Next myrange

    For j = 1 To i

    zhtj(j, 2) = Application.WorksheetFunction.CountIf(myrange1, zhtj(j, 1))

    Next j

    n = Application.WorksheetFunction.Max(Application.Index(zhtj, 0, 2))

    ReDim zhtj1(i, n + 1)

    k = 1

    For j = 1 To i

    For i1 = 1 To r - 1

    zhtj1(j, 1) = zhtj(j, 1)

    If zhtj(j, 1) = m1(i1, 1) Then

    k = k + 1

    zhtj1(j, k) = m1(i1, 2)

    End If

    Next i1

    k = 1

    Next j

    Sheets(Sheet2).Range(Sheets(Sheet2).Range(a2), Sheets(Sheet2).Range(a2).Offset(i - 1, n)) = zhtj1

    End Sub

    4/5

    回到工作表窗口,然后菜单栏中点【视图】中下列表中【宏】列表【查看宏(V)】打开宏对方框,选宏名“表转换 ”点【执行】,在Sheet2表生成结果。

    5/5

    操作过程和运行结果动态操作如下图:

    万能式转换(二列转多列)1/2

    下面修改下代码,做成万能式转换数据,选原数据(不含标题),然后运行宏【二列转多列】,提示选第一个单元格数据输出,然后在该单元格开始输出多列数据,代码如下:

    Sub 二列转多列()

    2019-12-26 22:15:32

    Dim n As Long, k As Long, m1, zhtj(), zhtj1(), i As Long, i1 As Long, j As Long, n1 As Long, myr As Range

    m1 = Selection

    n = UBound(m1, 1)

    ReDim zhtj(n, 2)

    i = 0

    For k = 1 To n

    If m1(k, 1) Then

    i = i + 1

    If i = 1 Then

    zhtj(i, 1) = m1(k, 1)

    Else

    i1 = i

    For j = 1 To i - 1

    If zhtj(j, 1) = m1(k, 1) Then i = i - 1: Exit For

    Next j

    If i1 = i Then

    zhtj(i, 1) = m1(k, 1)

    End If

    End If

    End If

    Next k

    i1 = 0

    For j = 1 To i

    For k = 1 To n

    If m1(k, 1) = zhtj(j, 1) Then i1 = i1 + 1

    Next k

    zhtj(j, 2) = i1

    i1 = 0

    Next j

    n1 = Application.WorksheetFunction.Max(Application.Index(zhtj, 0, 2))

    ReDim zhtj1(i, n1 + 1)

    k = 1

    For j = 1 To i

    For i1 = 1 To n

    zhtj1(j, 1) = zhtj(j, 1)

    If zhtj(j, 1) = m1(i1, 1) Then

    k = k + 1

    zhtj1(j, k) = m1(i1, 2)

    End If

    Next i1

    k = 1

    Next j

    Set myr = Application.InputBox(Prompt:=使用鼠标选择输出转换数据的一个单元格, Type:=8)

    Range(myr, myr.Offset(i - 1, n1)) = zhtj1

    End Sub

    2/2

    如果觉得这篇经验帮到了您,请点击下方的 “投票点赞 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!

    二列转多列数据批量转置VBAEXCEL
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_201665.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 06:05:22  耗时:0.027
    0.0272s