找回密码
 立即注册
搜索

excel部分表格横变竖

7
回复
1109
查看
[复制链接]

1

主题

11

帖子

-1

幻币

初入江湖

Rank: 1

积分
9
2021-12-12 21:53:00 显示全部楼层 |阅读模式
需求已经附件中说明。求助大神帮忙。
ec7bb5630f0629dc29173cde8efad1f2.jpg
加班明细导出表.rar (7.37 KB, 下载次数: 205)
PPT学习论坛
回复

使用道具 举报

0

主题

4

帖子

0

幻币

初入江湖

Rank: 1

积分
4
2022-1-8 20:31:02 显示全部楼层
先把E列之后转置
再用INDEX+MATCH
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

4

帖子

-4

幻币

东方不败

积分
-4
2022-1-22 20:47:24 显示全部楼层
谢谢回复,但我需要的是可能一键生成的方法。 你这个方法应该是先要插入空白行,然后先转置,再用公式吧。步骤有点太复杂了。
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

幻币

初入江湖

Rank: 1

积分
7
2022-1-29 19:12:59 显示全部楼层
用pq 解决 轻松搞定 vba也简单 都是小事
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

幻币

初入江湖

Rank: 1

积分
0
2022-1-31 11:19:11 显示全部楼层
我也可以给你一个通用些二维转一维的代码 运行后只需按提示操作就行了 秒定
PPT学习论坛
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

幻币

初入江湖

Rank: 1

积分
10
2022-2-2 08:18:24 显示全部楼层
Sub 逆透视列()
  Dim arr, brr(), n%
  Set yssjq = Application.InputBox("请点选:原始数据区域中的任意单元格(包含行标题和列标题)", Type:=8)
  arr = yssjq.CurrentRegion
  qsl = Val(InputBox("请输入:从第几列开始将列字段转向行方向(以区域为参照物):", "要开始列传行的起始数字列号", "2"))
  bths = Val(InputBox("请输入:列字段表头共有多少行:", "复合表头行数", "1"))
  bb = MsgBox("选择: 是 为忽略空值否 为允许空值存在", vbYesNo)
  Set jgdyg = Application.InputBox("请点选:存放结果的 起始单元格", Type:=8)
  jgdyg.CurrentRegion.Clear
  For i = qsl To UBound(arr, 2)
  For j = bths + 1 To UBound(arr)
    If bb = 6 Then
      If arr(j, i) <> "" Then
      n = n + 1
      ReDim Preserve brr(1 To qsl + bths, 1 To n + 1)
      For k = 1 To qsl - 1
        If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
        If Len(arr(j, k)) = 0 Then arr(j, k) = brr(k, n)
        brr(k, n + 1) = arr(j, k)
      Next k
      For k = 1 To bths
        If Len(arr(k, i)) = 0 Then arr(k, i) = brr(qsl + k - 1, n)
        If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
        brr(qsl + k - 1, n + 1) = arr(k, i) '循环要转到行的列字段表头
      Next k
      If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
      brr(qsl + bths, n + 1) = arr(j, i)
      End If
    Else
      n = n + 1
      ReDim Preserve brr(1 To qsl + bths, 1 To n + 1)
      For k = 1 To qsl - 1
      If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
      If Len(arr(j, k)) = 0 Then arr(j, k) = brr(k, n)
      brr(k, n + 1) = arr(j, k)
      Next k
      For k = 1 To bths
      If Len(arr(k, i)) = 0 Then arr(k, i) = brr(qsl + k - 1, n)
      If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
      brr(qsl + k - 1, n + 1) = arr(k, i) '循环要转到行的列字段表头
      Next k
      If Len(arr(k, i)) >= 12 Then arr(j, k) = "'" & arr(j, k)
      brr(qsl + bths, n + 1) = arr(j, i)
    End If
  Next
  Next
  For k = 1 To qsl - 1
  brr(k, 1) = arr(1, k) '写入转置字段列之前的标题内容
  Next k
  jgdyg.Resize(UBound(brr, 2), UBound(brr, 1)) = Application.Transpose(brr)
End Sub
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

6

帖子

2

幻币

初入江湖

Rank: 1

积分
10
2022-2-6 13:16:50 显示全部楼层
用pq 只需点3\4下鼠标就瞬间搞定
PPT学习论坛
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

幻币

初入江湖

Rank: 1

积分
3
2022-2-11 04:44:55 显示全部楼层
谢谢大神,按你的方法已经搞定。
c8643ce02ececb940c70748780b51fa3.jpg
PPT学习论坛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册