qq_52091435 2022-06-09 02:01 采纳率: 83.3%
浏览 53
已结题

Excel VBA (宏)行列转置代码报错问题

我需要用Excel的VBA将数据进行 行-列 转置,同学给了我样例和代码:

样例的原始数据是这样的:

img

同学给的代码如下:

Sub zhuanzhi()

Dim i, j, a, m, n

m = 2
For i = 2 To Sheet1.[a1000000].End(3).Row
    a = Sheet1.Cells(i, 4).Value
    n = 5
    If a = 1 Then
        Sheet3.Cells(m, 1) = Sheet1.Cells(i, 1).Value
        Sheet3.Cells(m, 2) = Sheet1.Cells(i, 2).Value
        Sheet3.Cells(m, 3) = Sheet1.Cells(i, 3).Value
        Sheet3.Cells(m, 4) = Sheet1.Cells(i, 4).Value
        Sheet3.Cells(m, 5) = Sheet1.Cells(i, 5).Value
        m = m + 1
    ElseIf a > 1 Then
        For j = 1 To a
            Sheet3.Cells(m, 1) = Sheet1.Cells(i, 1).Value
            Sheet3.Cells(m, 2) = Sheet1.Cells(i, 2).Value
            Sheet3.Cells(m, 3) = Sheet1.Cells(i, 3).Value
            Sheet3.Cells(m, 4) = Sheet1.Cells(i, 4).Value
            Sheet3.Cells(m, 5) = Sheet1.Cells(i, n).Value
            m = m + 1
            n = n + 1
        Next j
    End If
Next i


End Sub

通过这段代码,可以转换成如下形式:

img

可以看到,数据从原来的A-B C D在一行,变成了A-B, A-C, A-D分别在一列,我的数据大概是这样

img

当我直接套用公式,发现报错代码13,或者1004。改来改去怎么都不对。因此想请教大家,这段代码的含义是什么,以及我应该如何修改?谢谢,辛苦了!

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-06-09 11:01
    关注

    样例中的数据有5列,比你要处理的数据多了一列“论文序号”,所以代码不能直接拿过来用
    修改了一下,你再试试:

    Sub zhuanzhi()
     
    Dim i, j, a, m, n
     
    m = 2
    For i = 2 To Sheet1.[a1000000].End(3).Row
        a = Sheet1.Cells(i, 3).Value   '获得作者数
        n = 4
        If a = 1 Then
            Sheet3.Cells(m, 1) = Sheet1.Cells(i, 1).Value
            Sheet3.Cells(m, 2) = Sheet1.Cells(i, 2).Value
            Sheet3.Cells(m, 3) = Sheet1.Cells(i, 3).Value
            Sheet3.Cells(m, 4) = Sheet1.Cells(i, 4).Value
            m = m + 1
        ElseIf a > 1 Then
            For j = 1 To a
                Sheet3.Cells(m, 1) = Sheet1.Cells(i, 1).Value
                Sheet3.Cells(m, 2) = Sheet1.Cells(i, 2).Value
                Sheet3.Cells(m, 3) = Sheet1.Cells(i, 3).Value
                Sheet3.Cells(m, 4) = Sheet1.Cells(i, n).Value  '把所有作者列出来
                m = m + 1
                n = n + 1
            Next j
        End If
    Next i
     
     
    End Sub
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月9日

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码