ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1439|回复: 7

[求助] excel部分内容横排变竖排(二维转一维)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-23 23:03 | 显示全部楼层 |阅读模式

数据源如表1,一个营销员可以有多个片区编号(也可以没有片区编号),片区编号7后面可能还有片区编号9……等编号,现需要把片区编号变成竖着放在编号这一列中,营销员有多少个片区编号,就出现多少列(当营销员没有片区编号时,出现1列,编号留空),效果如表2。excel表格文件详见附件。

数据源:表1:
营销员工号营销员姓名营销中心区域营销中心编号入职时间所属主任工号所属主任姓名片区编号1片区编号2片区编号3片区编号4片区编号5片区编号6片区编号7
YX0001张三广州白云区
11
2017/1/20
ZR102李南
1
5
107
23
YX1020李四广州天河区
11
2018/1/9
ZR2008李师
45
33
YX20012旺达广州海珠区
11
2014/2/1
ZR1102韩丽
78
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
5
21
30
17
41
8003
SH0301玫瑰上海静安区
35
2018/9/2
DJ3089杜鹃


效果:表2:
营销员工号营销员姓名营销中心区域营销中心编号入职时间所属主任工号所属主任姓名片区编号
YX0001张三广州白云区
11
2017/1/20
ZR102李南
1
YX0001张三广州白云区
11
2017/1/20
ZR102李南
5
YX0001张三广州白云区
11
2017/1/20
ZR102李南
107
YX0001张三广州白云区
11
2017/1/20
ZR102李南
23
YX1020李四广州天河区
11
2018/1/9
ZR2008李师
45
YX1020李四广州天河区
11
2018/1/9
ZR2008李师
33
YX20012旺达广州海珠区
11
2014/2/1
ZR1102韩丽
78
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
5
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
21
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
30
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
17
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
41
SH0281清风上海浦东区
35
2017/6/21
DJ2001牡丹
8003
SH0301玫瑰上海静安区
35
2018/9/2
DJ3089杜鹃





















转换.zip

7.66 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2018-9-24 08:27 | 显示全部楼层
  1. Sub 按钮1_Click()
  2.     Application.ScreenUpdating = False
  3.     ActiveSheet.UsedRange.Offset(1).ClearContents
  4.     arr = Sheets(1).UsedRange
  5.     a = 2
  6.     For j = 2 To UBound(arr)
  7.         For x = 1 To 8
  8.             Cells(a, x) = arr(j, x)
  9.         Next x
  10.         For i = 9 To UBound(arr, 2)
  11.             If Len(arr(j, i)) > 0 Then
  12.                 For x = 1 To 8
  13.                     Cells(a, x) = arr(j, x)
  14.                 Next x
  15.                 Cells(a, 9) = arr(j, i)
  16.                 a = a + 1
  17.             End If
  18.         Next i
  19.     Next j
  20.     Application.ScreenUpdating = True
  21. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-24 08:27 | 显示全部楼层
附件内容供参考。。。。。。

转换.zip

16.93 KB, 下载次数: 23

TA的精华主题

TA的得分主题

发表于 2018-9-24 10:05 | 显示全部楼层
我是用的通用型的装置 人机对话形 按操作操作 动动鼠标 输入该输入的数字就行 非常灵活
  1. Sub 二维转一维()
  2. Dim i%, arr, crr
  3. arr = Application.InputBox("选择区域", Type:=8)
  4. Set tishi = Application.InputBox("选择存放起始单元格", Type:=8)
  5. t1 = UBound(arr)
  6. t2 = UBound(arr, 2)
  7. qsl = Val(InputBox("请输入装置的起始列(以区域为参照物):", "拆分表格", "1"))
  8. bb = MsgBox("选择: 是 为忽略空值  否 为允许空值存在", vbYesNo)
  9. Application.ScreenUpdating = False
  10. Application.DisplayAlerts = False
  11. ReDim brr(1 To t1 * t2, 1 To 3 + qsl - 1)
  12. If bb = 6 Then
  13. For i = 2 To t1
  14.     m = 1 + qsl
  15.     For k = i To i + t2 - 2
  16.     If arr(i, m) <> "" And arr(i, 1) <> "" Then
  17.         n = n + 1
  18.         brr(n, 1) = arr(i, qsl)
  19.         brr(n, 2) = arr(1, m)
  20.         brr(n, 3) = arr(i, m)
  21.     If qsl > 1 Then
  22.       For ls = 1 To qsl - 1
  23.         If ls <= qsl - 1 Then
  24.          tishi.Offset(n, ls - 1) = arr(i, ls)
  25.         End If
  26.       Next
  27.       ls = 0
  28.      End If
  29.     End If
  30.         m = m + 1
  31.         If m > t2 Then GoTo 1
  32.     Next k
  33. 1:
  34. Next i
  35. Else
  36. For i = 2 To t1
  37.     m = 1 + qsl
  38.     For k = i To i + t2 - 2
  39.     If arr(i, 1) <> "" Then
  40.         n = n + 1
  41.        brr(n, 1) = arr(i, qsl)
  42.         brr(n, 2) = arr(1, m)
  43.         brr(n, 3) = arr(i, m)
  44.     If qsl > 1 Then
  45.       For ls = 1 To qsl - 1
  46.         If ls <= qsl - 1 Then
  47.          tishi.Offset(n, ls - 1) = arr(i, ls)
  48.         End If
  49.       Next
  50.       ls = 0
  51.      End If
  52.     End If
  53.       m = m + 1
  54.     If m > t2 Then GoTo 2
  55.     Next k
  56. 2:
  57. Next i
  58. End If
  59. For l = 1 To qsl
  60. tishi.Offset(, l - 1) = arr(1, l)
  61. Next
  62.   tishi.Offset(1, qsl - 1).Resize(UBound(brr), 3 + qsl - 1) = brr
  63.   Application.DisplayAlerts = True
  64. Application.ScreenUpdating = True
  65.     MsgBox "转置完毕!"
  66. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 16:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 18:02 | 显示全部楼层
cjc209 发表于 2018-9-24 10:05
我是用的通用型的装置 人机对话形 按操作操作 动动鼠标 输入该输入的数字就行 非常灵活


这几个要选择的区域怎么选?有什么讲究?
arr = Application.InputBox("选择区域", Type:=8)
Set tishi = Application.InputBox("选择存放起始单元格", Type:=8)
t1 = UBound(arr)
t2 = UBound(arr, 2)
qsl = Val(InputBox("请输入装置的起始列(以区域为参照物):", "拆分表格", "1"))
bb = MsgBox("选择: 是 为忽略空值  否 为允许空值存在", vbYesNo)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 21:44 | 显示全部楼层

如果要把转换后的内容在转换为转换前的,即表2转换成表1,要怎么写代码?

TA的精华主题

TA的得分主题

发表于 2018-9-25 07:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
陆地鱼仙人掌 发表于 2018-9-24 21:44
如果要把转换后的内容在转换为转换前的,即表2转换成表1,要怎么写代码?

论坛上有很多案例,楼主可以自行搜索看看吧
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 00:51 , Processed in 0.028894 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表