Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 968|回复: 6

[已解决]求助高手老师指导,谢谢!~

[复制链接]
发表于 2022-5-24 19:25 | 显示全部楼层 |阅读模式
本帖最后由 fywb2000 于 2022-5-31 14:37 编辑

求助高手老师指导,谢谢!~
最佳答案
2022-5-25 21:24
fywb2000 发表于 2022-5-25 15:06
真心感谢老师指导费心
  1. Sub 数据生成()
  2. Dim arra(), arrb(), last1 As Integer, last2 As Integer, last3 As Integer
  3. Dim sa As Integer, sb As Integer, K, X, Y, Z, L
  4. last1 = [b2].End(xlDown).Row
  5. last2 = [f2].End(xlDown).Row
  6. last3 = [j2].End(xlDown).Row
  7. ReDim arra(1 To (last1 - 1) * (last2 - 1), 1 To 4)
  8. For sa = 2 To last1
  9.    For sb = 2 To last2
  10.     K = K + 1
  11.    arra(K, 1) = Range("b" & sa)
  12.    arra(K, 2) = Range("c" & sa)
  13.    arra(K, 3) = Range("f" & sb)
  14.    arra(K, 4) = Range("g" & sb)
  15.    Next
  16. Next
  17. Range("n2").Resize(K, 4) = arra
  18. ReDim arrb(1 To K * (last3 - 1), 1 To 6)
  19. For X = 1 To K
  20.    For Y = 2 To last3
  21.     Z = Z + 1
  22.     For L = 1 To 4
  23.     arrb(Z, L) = arra(X, L)
  24.     arrb(Z, 5) = Range("j" & Y)
  25.     arrb(Z, 6) = Range("k" & Y)
  26.     Next
  27.    Next
  28. Next
  29. Range("t2").Resize(Z, 6) = arrb
  30. End Sub
复制代码
现在要短一点了。

零件配对.zip

15.3 KB, 下载次数: 6

发表于 2022-5-24 21:44 | 显示全部楼层
  1. Sub 数据生成()
  2. Dim arra(), arrb(), arrc, arrd(), arre(), last1 As Integer, last2 As Integer, last3 As Integer
  3. Dim sa As Integer, sb As Integer, sc As Integer, ja As Integer, jb As Integer, jc As Integer, jd As Long, je As Long
  4. Dim sd1, sd2, sd3, sd4, jg1(), jg2(), K, X, Y, Z
  5. last1 = [b2].End(xlDown).Row
  6. last2 = [f2].End(xlDown).Row
  7. last3 = [j2].End(xlDown).Row
  8. ReDim arra(1 To 10)
  9. ReDim arrb(1 To 10)
  10. ReDim arrc(1 To 10)
  11. ReDim arrd(1 To 10)
  12. ReDim arre(1 To 10)
  13. For sa = 2 To last1  'a组合
  14.    ja = ja + 1
  15.    ReDim Preserve arra(1 To ja)
  16.    arra(ja) = Range("b" & sa) & "|" & Range("c" & sa)
  17. Next
  18. For sb = 2 To last2   'B组合
  19.    jb = jb + 1
  20.    ReDim Preserve arrb(1 To jb)
  21.    arrb(jb) = Range("f" & sb) & "|" & Range("g" & sb)
  22. Next
  23. For sd1 = 1 To last1 - 1   'AB组合
  24.    For sd2 = 1 To last2 - 1
  25.    jd = jd + 1
  26.    ReDim Preserve arrd(1 To jd)
  27.    arrd(jd) = arra(sd1) & "|" & arrb(sd2)
  28.    Next
  29. Next
  30. For sc = 2 To last3    'C组合
  31.    jc = jc + 1
  32.    ReDim Preserve arrc(1 To jc)
  33.    arrc(jc) = Range("j" & sc) & "|" & Range("k" & sc)
  34. Next
  35. For sd3 = 1 To jd     'ABC组合
  36.    For sd4 = 1 To last3 - 1
  37.    je = je + 1
  38.    ReDim Preserve arre(1 To je)
  39.    arre(je) = arrd(sd3) & "|" & arrc(sd4)
  40.    Next
  41. Next

  42. ReDim jg1(1 To jd, 1 To 4)  '拆分AB,生成第一个要的结果
  43.    For K = 1 To jd
  44.       For X = 1 To 4
  45.       jg1(K, X) = VBA.Split(arrd(K), "|")(X - 1)
  46.       Next
  47.    Next
  48. Range("n2").Resize(K - 1, 4) = jg1

  49. ReDim jg2(1 To je, 1 To 6)    '拆分ABC,生成第二个要的结果
  50.    For Y = 1 To je
  51.       For Z = 1 To 6
  52.       jg2(Y, Z) = VBA.Split(arre(Y), "|")(Z - 1)
  53.       Next
  54.    Next
  55. Range("T2").Resize(Y - 1, 6) = jg2
  56. End Sub
复制代码


越走越远。。结果 就走了这么远

零件配对.rar

22.01 KB, 下载次数: 7

回复

使用道具 举报

发表于 2022-5-24 21:46 | 显示全部楼层
这么长的代码,,这么多的无规则命名的变量,,要是熊猫他们看到了。。不晓得要怼。以后我也要改改这毛病了。
回复

使用道具 举报

发表于 2022-5-24 21:54 | 显示全部楼层
先拿着用,运算速度也还可以。明天晚上我再重写。
回复

使用道具 举报

发表于 2022-5-25 12:37 | 显示全部楼层
N2:O2 下 拉=OFFSET(B$1,INT((ROW(A1)-1)/COUNTIF($G$2:$G$13,">0"))+1,)&""

P2:Q2 下 拉=IF(N2="","",OFFSET(F$1,MOD(ROW(A1)-1,COUNTIF($G$2:$G$13,">0"))+1,))
回复

使用道具 举报

 楼主| 发表于 2022-5-25 15:06 | 显示全部楼层
心正意诚身修 发表于 2022-5-24 21:44
越走越远。。结果 就走了这么远

真心感谢老师指导费心
回复

使用道具 举报

发表于 2022-5-25 21:24 | 显示全部楼层    本楼为最佳答案   
fywb2000 发表于 2022-5-25 15:06
真心感谢老师指导费心
  1. Sub 数据生成()
  2. Dim arra(), arrb(), last1 As Integer, last2 As Integer, last3 As Integer
  3. Dim sa As Integer, sb As Integer, K, X, Y, Z, L
  4. last1 = [b2].End(xlDown).Row
  5. last2 = [f2].End(xlDown).Row
  6. last3 = [j2].End(xlDown).Row
  7. ReDim arra(1 To (last1 - 1) * (last2 - 1), 1 To 4)
  8. For sa = 2 To last1
  9.    For sb = 2 To last2
  10.     K = K + 1
  11.    arra(K, 1) = Range("b" & sa)
  12.    arra(K, 2) = Range("c" & sa)
  13.    arra(K, 3) = Range("f" & sb)
  14.    arra(K, 4) = Range("g" & sb)
  15.    Next
  16. Next
  17. Range("n2").Resize(K, 4) = arra
  18. ReDim arrb(1 To K * (last3 - 1), 1 To 6)
  19. For X = 1 To K
  20.    For Y = 2 To last3
  21.     Z = Z + 1
  22.     For L = 1 To 4
  23.     arrb(Z, L) = arra(X, L)
  24.     arrb(Z, 5) = Range("j" & Y)
  25.     arrb(Z, 6) = Range("k" & Y)
  26.     Next
  27.    Next
  28. Next
  29. Range("t2").Resize(Z, 6) = arrb
  30. End Sub
复制代码
现在要短一点了。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 17:07 , Processed in 0.403194 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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