Excel精英培训网

 找回密码
 注册
12
返回列表 发新帖
楼主: sliang28

[习题] 【VBA字典数组201301班】课前热身习题一

[复制链接]
发表于 2013-10-16 16:14 | 显示全部楼层
刚才发错了,重发:
  1. Sub sellby()

  2.     Dim arr, brr, crr(1 To 6000, 1 To 7)

  3.     Dim i%, j%, x%, y%, t

  4.     Dim sh As Worksheet

  5. t = Timer

  6.     Set sh = ThisWorkbook.Sheets("数据源")

  7.     arr = sh.Range("g1").CurrentRegion

  8.     x = 0: y = 0

  9.     For i = 7 To UBound(arr, 2)

  10.         x = x + 1

  11.         crr(x, 1) = arr(3, i)

  12.         crr(x, 2) = arr(4, i)

  13.         crr(x, 3) = arr(5, i)

  14.         crr(x, 4) = arr(6, i)

  15.         For j = x + 9 To UBound(arr)

  16.             If arr(j, i) > 0 Then

  17.                 crr(x + y, 5) = arr(j, 2)

  18.                 crr(x + y, 6) = arr(j, 5)

  19.                 crr(x + y, 7) = arr(j, i)

  20.                  y = y + 1

  21.             ElseIf arr(j, i) = 0 And j > x Then

  22.                 Exit For

  23.            End If

  24.        Next j

  25.        x = x + y - 1: y = 0

  26.     Next i

  27.    

  28.     With Sheets("练习结果")

  29.         .Cells.ClearContents

  30.         .Range("a2").Resize(x, 7) = crr

  31.     End With

  32. MsgBox Timer - t

  33. End Sub
复制代码

点评

0.18s  发表于 2013-10-16 16:19

评分

参与人数 2 +10 金币 +10 收起 理由
培训部招生办 + 5 + 5 很给力!
sliang28 + 5 + 5 很给力! 第二次少给你点^_^

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2013-10-16 21:08 | 显示全部楼层
本帖最后由 缔造者 于 2013-10-16 21:11 编辑
  1. Sub 格式转换()
  2. Dim arr, arr1, arr2
  3. Dim i&, j&, t
  4. t = Timer
  5. Application.ScreenUpdating = False
  6. arr = Range("a9:jd3978")
  7. arr1 = Range("g3:jd6")
  8. j = 7
  9. ReDim arr2(1 To UBound(arr), 1 To 7)
  10. For i = 2 To UBound(arr) - 1
  11. If arr(i - 1, j) = "" Then
  12. arr2(i - 1, 1) = arr1(1, j - 6)
  13. arr2(i - 1, 2) = arr1(2, j - 6)
  14. arr2(i - 1, 3) = arr1(3, j - 6)
  15. arr2(i - 1, 4) = arr1(4, j - 6)
  16. End If
  17. arr2(i - 1, 5) = arr(i, 2)
  18. arr2(i - 1, 6) = arr(i, 5)
  19. arr2(i - 1, 7) = arr(i, j)
  20. If arr(i + 1, j) = "" Then
  21. j = j + 1
  22. End If
  23. Next i
  24. With Sheets("结果")
  25. .Range("h2").Resize(UBound(arr2), 7).ClearContents
  26. .Range("h2").Resize(UBound(arr2), 7) = arr2
  27. End With
  28. Application.ScreenUpdating = True
  29. MsgBox Timer - t
  30. End Sub
复制代码
哈哈,看到群里的讨论,抄袭的。
热身题之格式转换.rar (539.88 KB, 下载次数: 6)

点评

厉害啊!0.2秒,抄的比人家的都快^_^ ReDim arr2(1 To UBound(arr), 1 To 7) 改成:ReDim arr2(1 To UBound(arr), 1 To 7) As String 就0.14秒了  发表于 2013-10-17 08:36

评分

参与人数 2 +15 金币 +20 收起 理由
培训部招生办 + 5 + 5 赞一个!
sliang28 + 10 + 15 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-10-16 22:41 | 显示全部楼层
  1. Sub bomtranspose()
  2. Dim pm(), gg(), zhq(), arr(), r As Integer, i As Integer, j As Integer, jg(), m As Long, t As Single, k As Byte
  3. t = Timer
  4. With Sheet1
  5. r = .Cells(Rows.Count, 2).End(3).Row
  6. pm = .Range("B10:B" & r)
  7. gg = .Range("E10:E" & r)
  8. arr = .Range("G10:JD" & r)
  9. zhq = .Range("G3:JD6")
  10. ReDim jg(1 To Application.WorksheetFunction.CountA(.Range("G10:JD" & r)), 1 To 7)
  11. End With
  12. For j = 1 To 258
  13.   For k = 1 To 4
  14.      jg(m + 1, k) = zhq(k, j)
  15.   Next
  16.   For i = 1 To UBound(arr)
  17.      If arr(i, j) <> "" Then
  18.          m = m + 1
  19.          jg(m, 5) = pm(i, 1)
  20.          jg(m, 6) = gg(i, 1)
  21.          jg(m, 7) = arr(i, j)
  22.      End If
  23.   Next
  24. Next
  25. Sheet2.Range("A2:G" & UBound(jg)) = jg
  26. MsgBox "共使用:" & Format(Round(Timer - t, 3), "0.000") & "秒"
  27. End Sub
复制代码
估计很慢不过总算达到效果了。。。

点评

0.29秒 继续加油  发表于 2013-10-17 08:40

评分

参与人数 2 +15 金币 +15 收起 理由
培训部招生办 + 5 + 5 赞一个!
sliang28 + 10 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-10-17 10:16 | 显示全部楼层
呵呵

123小木头人.zip

541.65 KB, 下载次数: 17

点评

木头1 木头2 0.12s 木头3 0.09s  发表于 2013-10-17 11:02

评分

参与人数 5 +57 金币 +50 收起 理由
luoyuanty + 3 很给力!
E界白菜 + 1 这就是传说中的小木头人么?厉害呀。可惜只.
培训部招生办 + 30 + 30 赞一个!
CheryBTL + 18 很给力!
sliang28 + 5 很给力! 经验就剩下5了

查看全部评分

回复

使用道具 举报

发表于 2013-10-17 19:24 | 显示全部楼层
Sub 格式转换()
    Dim arr, arrj, brr, i As Integer, j As Integer, x As Integer, n As Integer
    t = Timer
    arr = Sheets("数据源").Range("A10:JD3977")
    brr = Sheets("数据源").Range("G3:JD6")
    ReDim arrj(1 To UBound(arr), 1 To 7) As String
    j = 7
    For i = 1 To UBound(arr)
        If arr(i, j) = 1 Then
            n = n + 1
            If n = 1 Then
                For x = 1 To 4
                    arrj(i, x) = brr(x, j - 6)
                Next x
                arrj(i, 5) = arr(i, 2): arrj(i, 6) = arr(i, 5): arrj(i, 7) = arr(i, j)
            Else
                arrj(i, 5) = arr(i, 2): arrj(i, 6) = arr(i, 5): arrj(i, 7) = arr(i, j)
            End If
        End If
        If arr(i, j) = "" Then j = j + 1: i = i - 1: n = 0
    Next i

    With Sheets("结果")
        .Range("A1:G3977").ClearContents
        .Range("A2").Resize(i - 1, 7) = arrj
    End With
    MsgBox Timer - t
End Sub

点评

0.12s  发表于 2013-10-17 19:36

评分

参与人数 1 +10 金币 +10 收起 理由
sliang28 + 10 + 10 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-10-18 17:20 | 显示全部楼层

怎么都开贴了,我刚做完,给看看吧!

Sub zh()
Dim i, j, m, n, a, b, r, l
Dim arr, arrjg
r = 2
n = 10
arr = Worksheets("数据源").Range("a1:jd4000")
a = UBound(arr, 2)
b = UBound(arr, 1)
Debug.Print a, b
For i = 7 To UBound(arr, 2)
    l = 9
    For j = 3 To 6
    Worksheets("结果").Cells(r, l) = Worksheets("数据源").Cells(j, i)
        l = l + 1
    Next j
   
    For m = n To UBound(arr, 1)
        If Worksheets("数据源").Cells(m, i) = "" Then
            n = m
            Exit For
        Else
            Worksheets("结果").Cells(r, 13) = Worksheets("数据源").Cells(m, 2)
            Worksheets("结果").Cells(r, 14) = Worksheets("数据源").Cells(m, 5)
            Worksheets("结果").Cells(r, 15) = Worksheets("数据源").Cells(m, i)
            r = r + 1
        End If
    Next m
Next i
End Sub
回复

使用道具 举报

发表于 2015-5-12 18:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 20:32 , Processed in 0.288461 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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