ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有關行列轉置問題

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-9-21 19:23 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jacky007x 于 2017-9-21 19:48 编辑

老師好,有關行列轉置問題要請教老師們,效果如附件

例如
1.B列裡有重複的表面處理、熱處理等項目,在P列裡只需要唯一值,如:
表面处理
熱處理
外加工
机加工
热处理


2.然後將P列裡的值作為條件,並查找E列的值後,於Q列橫向列出相關的唯一值,如
表面处理
电镀
煲黑
电泳
鋁氧化
烤漆



目前是不曉得該怎麼做才能運行第2點,請老師們多多指導!!

TEST.rar

21.87 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2017-9-21 19:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没看懂,是要每一列都去重吗??

TA的精华主题

TA的得分主题

发表于 2017-9-21 19:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 19:39 | 显示全部楼层
paciguard 发表于 2017-9-21 19:32
没看懂,是要每一列都去重吗??

老師您好,就是首先要將B列的資料取不重複值到P列
再依照P列的條件從E列取出取出不重複值,並依序排列在Q、R、S、T、U列裡(可能會到AA列)
再勞煩老師指導一下了,感謝!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 19:39 | 显示全部楼层
jiangxiaoyun 发表于 2017-9-21 19:32
看不明白,路过拿分

老師您好,就是首先要將B列的資料取不重複值到P列
再依照P列的條件從E列取出取出不重複值,並依序排列在Q、R、S、T、U列裡(可能會到AA列)
再勞煩老師指導一下了,感謝!!








TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 19:45 | 显示全部楼层
本帖最后由 jacky007x 于 2017-9-21 19:46 编辑
paciguard 发表于 2017-9-21 19:32
没看懂,是要每一列都去重吗??

例如
B列裡有重複的表面處理、熱處理等項目,在P列裡只需要唯一值,如:
表面处理
熱處理
外加工
机加工
热处理


然後將P列裡的值作為條件,並查找E列的值後,於Q列橫向列出相關的唯一值,如
表面处理
电镀
煲黑
电泳
鋁氧化
烤漆

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 20:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大神們,老師們再麻煩幫忙一下了,感激不盡

TA的精华主题

TA的得分主题

发表于 2017-9-21 20:17 | 显示全部楼层
  1. Sub d()
  2. Dim Dic As Object, Eic As Object, arr(), brr(), w As WorksheetFunction
  3. Set w = WorksheetFunction
  4. Set Dic = CreateObject("Scripting.Dictionary")
  5. Set Eic = CreateObject("Scripting.Dictionary")
  6. k = Range("a1048576").End(3).Row - 1
  7. h = Range("a1").End(2).Column
  8. arr = Range("a2").Resize(k, h)
  9. For i = 1 To UBound(arr)
  10.     Dic(arr(i, 2)) = Dic(arr(i, 2)) & "*" & arr(i, 5)
  11. Next
  12. For Each i In Dic.Items
  13. b = b + 1
  14.     x = UBound(Split(i, "*"))
  15.     a = 0
  16.     ReDim Preserve brr(1 To 1, 1 To x)
  17.     Eic.RemoveAll
  18.     For j = 1 To UBound(brr, 2)
  19.         a = a + 1
  20.         brr(1, a) = Split(i, "*")(a)
  21.         If brr(1, a) <> "" Then
  22.             Eic(brr(1, a)) = ""
  23.         End If
  24.     Next
  25.     Range("q" & b).Resize(1, Eic.Count) = Eic.Keys
  26. Next
  27. Range("p1").Resize(Dic.Count, 1) = w.Transpose(Dic.Keys)
  28. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-9-21 20:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub Test()
  2.     Dim d As Object, d1, ar, br, k, i&, m%, n%
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     Set d1 = CreateObject("Scripting.Dictionary")
  5.     ar = Sheets("sheet1").UsedRange
  6.     For i = 2 To UBound(ar)
  7.         If Not d.Exists(ar(i, 2)) Then
  8.             d(ar(i, 2)) = ""
  9.         End If
  10.     Next
  11.     ReDim br(1 To d.Count, 1 To UBound(ar))
  12.     For Each aa In d.keys
  13.         k = k + 1
  14.         n = 1
  15.         For i = 2 To UBound(ar)
  16.             If ar(i, 2) = aa Then
  17.                 If Not d1.Exists(ar(i, 5)) Then
  18.                     d1(ar(i, 5)) = ""
  19.                     n = n + 1
  20.                     br(k, 1) = ar(i, 2)
  21.                     br(k, n) = ar(i, 5)
  22.                 End If
  23.             End If
  24.         Next
  25.     Next
  26.     Sheets("sheet1").Range("p1").Resize(d.Count, UBound(br, 2)) = br
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-9-21 20:22 | 显示全部楼层
  1. Sub vv()
  2.     Dim arr
  3.     arr = Range("b2", [e1024768].End(3))
  4.     Set d = CreateObject("scripting.dictionary")
  5.     For i = 1 To UBound(arr)
  6.         If Not d.exists(arr(i, 1)) Then
  7.             d(arr(i, 1)) = arr(i, 4)
  8.         Else
  9.             If InStr(d(arr(i, 1)), arr(i, 4)) = 0 Then
  10.                 d(arr(i, 1)) = d(arr(i, 1)) & "," & arr(i, 4)
  11.             End If
  12.         End If
  13.     Next
  14.     [p1].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))
  15.     Range("q1").Resize(d.Count, 1).TextToColumns comma:=True
  16. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 17:51 , Processed in 0.046397 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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