Excel精英培训网

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

[已解决]请修改程序

[复制链接]
发表于 2015-1-11 14:06 | 显示全部楼层 |阅读模式
请修改程序
把工作簿GFC3工作表2中12个数字进行组合,组合结果放到工作簿GFC301工作表5内
Set sh1 = Workbooks("GFC3.xlsm").Sheets(EE1) 出现下标越界
ReDim brr(1 To d.Count, 1 To 12) 也出错
数据组合程序是正确的
最佳答案
2015-1-11 14:18
  1. Private Sub CommandButton1_Click()
  2. Call 组合数据_Click
  3. End Sub
  4. Private Sub 组合数据_Click()

  5. Workbooks.Open ThisWorkbook.Path & "\GFC301.xlsm"
  6. Workbooks("GFC301.xlsm").Sheets("5").Select
  7. Workbooks("GFC301.xlsm").Sheets("5").Cells.Clear
  8.   
  9. EE1 = "2": EE2 = "5": EE3 = 301     'EE1、EE2、EE3 是变量


  10. 组合7 EE1, EE2, EE3

  11. ' Sheets("3").Cells.Clear  这行貌似多于。。。
  12. End Sub


  13. Sub 组合7(EE1, EE2, EE3)
  14. Dim sh1, sh2 As Worksheet
  15. Set sh1 = Workbooks("GFC3.xlsm").Sheets(EE1)        'EE1是变量

  16. Set sh2 = Workbooks("GFC" & EE3 & ".xlsm").Sheets(EE2)   'EE2、EE3 是变量


  17. Dim arr, i&, R%, s(), j&, i1&, i2&, i3&, i4&, i5&, x$, y%
  18. Dim d, k, brr
  19. Set d = CreateObject("Scripting.Dictionary")

  20. arr = sh1.Range(sh1.Cells(1, 1), sh1.Cells(1, 12))
  21. Debug.Print sh1.Range(sh1.Cells(1, 1), sh1.Cells(1, 12)).Address(False, False)

  22. For i = 1 To UBound(arr)
  23.     For j = 1 To UBound(arr, 2)
  24.       If arr(i, j) <> "" Then
  25.         R = R + 1
  26.         ReDim Preserve s(1 To R)
  27.         s(R) = arr(i, j)
  28.       End If
  29.     Next
  30. If R >= 7 Then
  31. For i1 = 1 To R - 6
  32. For i2 = i1 + 1 To R - 5
  33. For i3 = i2 + 1 To R - 4
  34. For i4 = i3 + 1 To R - 3
  35. For i5 = i4 + 1 To R - 2
  36. For i6 = i5 + 1 To R - 1
  37. For i7 = i6 + 1 To R
  38.    x = s(i1) & "," & s(i2) & "," & s(i3) & "," & s(i4) & "," & s(i5) & "," & s(i6) & "," & s(i7)
  39. d(x) = ""
  40. Next
  41. Next
  42. Next
  43. Next
  44. Next
  45. Next
  46. Next
  47. End If
  48. R = 0
  49. Next
  50.    k = d.keys
  51.    ReDim brr(1 To d.Count, 1 To 12)
  52.    For i = 0 To UBound(k)
  53.      aa = Split(k(i), ",")
  54.      For j = 0 To UBound(aa)
  55.        brr(i + 1, aa(j)) = aa(j)
  56.      Next
  57.    Next
  58. sh2.Cells(1, 1).Resize(UBound(brr), 12) = brr
  59. d.RemoveAll
  60. End Sub
复制代码
改动的地方挺多的,你自己参照这看看吧。

请修改代码.rar

26.54 KB, 下载次数: 5

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-1-11 14:18 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton1_Click()
  2. Call 组合数据_Click
  3. End Sub
  4. Private Sub 组合数据_Click()

  5. Workbooks.Open ThisWorkbook.Path & "\GFC301.xlsm"
  6. Workbooks("GFC301.xlsm").Sheets("5").Select
  7. Workbooks("GFC301.xlsm").Sheets("5").Cells.Clear
  8.   
  9. EE1 = "2": EE2 = "5": EE3 = 301     'EE1、EE2、EE3 是变量


  10. 组合7 EE1, EE2, EE3

  11. ' Sheets("3").Cells.Clear  这行貌似多于。。。
  12. End Sub


  13. Sub 组合7(EE1, EE2, EE3)
  14. Dim sh1, sh2 As Worksheet
  15. Set sh1 = Workbooks("GFC3.xlsm").Sheets(EE1)        'EE1是变量

  16. Set sh2 = Workbooks("GFC" & EE3 & ".xlsm").Sheets(EE2)   'EE2、EE3 是变量


  17. Dim arr, i&, R%, s(), j&, i1&, i2&, i3&, i4&, i5&, x$, y%
  18. Dim d, k, brr
  19. Set d = CreateObject("Scripting.Dictionary")

  20. arr = sh1.Range(sh1.Cells(1, 1), sh1.Cells(1, 12))
  21. Debug.Print sh1.Range(sh1.Cells(1, 1), sh1.Cells(1, 12)).Address(False, False)

  22. For i = 1 To UBound(arr)
  23.     For j = 1 To UBound(arr, 2)
  24.       If arr(i, j) <> "" Then
  25.         R = R + 1
  26.         ReDim Preserve s(1 To R)
  27.         s(R) = arr(i, j)
  28.       End If
  29.     Next
  30. If R >= 7 Then
  31. For i1 = 1 To R - 6
  32. For i2 = i1 + 1 To R - 5
  33. For i3 = i2 + 1 To R - 4
  34. For i4 = i3 + 1 To R - 3
  35. For i5 = i4 + 1 To R - 2
  36. For i6 = i5 + 1 To R - 1
  37. For i7 = i6 + 1 To R
  38.    x = s(i1) & "," & s(i2) & "," & s(i3) & "," & s(i4) & "," & s(i5) & "," & s(i6) & "," & s(i7)
  39. d(x) = ""
  40. Next
  41. Next
  42. Next
  43. Next
  44. Next
  45. Next
  46. Next
  47. End If
  48. R = 0
  49. Next
  50.    k = d.keys
  51.    ReDim brr(1 To d.Count, 1 To 12)
  52.    For i = 0 To UBound(k)
  53.      aa = Split(k(i), ",")
  54.      For j = 0 To UBound(aa)
  55.        brr(i + 1, aa(j)) = aa(j)
  56.      Next
  57.    Next
  58. sh2.Cells(1, 1).Resize(UBound(brr), 12) = brr
  59. d.RemoveAll
  60. End Sub
复制代码
改动的地方挺多的,你自己参照这看看吧。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 21:00 , Processed in 0.251083 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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