EXCEL中使用VBA转置数据(竖排转横排)

竖排数据包含部门和员工名称,要转成横排显示
竖排转横排

Sub 重排数据()
    Dim ws As Worksheet
    Dim lastRow As Long, destCol As Long
    Dim deptDict As Object
    Dim deptName As Variant
    Dim empList As Collection
    Dim empName As Variant
    Dim rowCounter As Long
    
    '创建字典对象用于存储每个部门对应的员工姓名列表
    Set deptDict = CreateObject("Scripting.Dictionary")
    
    '设置要操作的工作表
    Set ws = ThisWorkbook.Sheets("Sheet1") '将"Sheet1"替换为你的工作表名称
    
    '获取最后一行的行号
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    '遍历数据,将员工姓名按部门名称分组存储在字典中
    For i = 2 To lastRow
        deptName = ws.Cells(i, "A").Value
        empName = ws.Cells(i, "B").Value
        
        If Not deptDict.exists(deptName) Then
            deptDict.Add deptName, New Collection
        End If
        
        deptDict(deptName).Add empName
    Next i
    
    '将结果输出到新的区域,将4替换为你要显示的列号,比如E列开始显示就写5
    destCol = 4
    For Each deptName In deptDict.keys
        '将部门名称写入目标位置
        ws.Cells(1, destCol).Value = deptName
        
        '将该部门下的员工姓名逐列写入目标位置
        Set empList = deptDict(deptName)
        rowCounter = 2
        For Each empName In empList
            ws.Cells(rowCounter, destCol).Value = empName
            rowCounter = rowCounter + 1
        Next empName
        
        '更新目标列号
        destCol = destCol + 1
    Next deptName
    
End Sub
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值