Excel精英培训网

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

【送分结束】循环在VBA中的运用:练习答案及示例代码注释!!

[复制链接]
发表于 2012-3-16 22:43 | 显示全部楼层 |阅读模式
本帖最后由 FF7 于 2012-3-20 12:53 编辑

练习一:将A7:A15的行号输入到A7:A15单元格。   '1分

练习二:在每一个工作表的M2单元格,输出“EP”字样。 '1分

练习三:已知有一列数1,1,2,3,5,8,13,21,…;请问,在这列数中,最接近10000,且小于10000的数是几? '5分,优秀另加
【练习三补充说明】1,1,2,3,5,8,13,21,…;这个数列是数学中的“裴波那契数列(Fibonacci leonardo)”,这个数列的特点是第三个数等于前两个数的和。所以这个数列中每一个数是确定的,所以最接近10000且小于10000的数是固定值。不是随机数!

练习四:在“循环可以做什么”工作表中,以AW16单元格为中心,以8个单元格为半径,通过变换单元格的背景色画一个近似圆。
'5分,优秀另加

循环在VBA中的运用.zip

75.21 KB, 下载次数: 48

循环在VBA中的运用(练习答案及代码注释).zip

65.7 KB, 下载次数: 12

评分

参与人数 1 +10 金币 +10 收起 理由
liuguansky + 10 + 10 赞一个!

查看全部评分

发表于 2012-3-17 12:01 | 显示全部楼层
本帖最后由 hrpotter 于 2012-3-17 13:54 编辑
  1. Sub t1()
  2.     Dim rg As Range
  3.     For Each rg In Range("a7:a15")
  4.         rg = rg.Row
  5.     Next rg
  6. End Sub
  7. Sub t2()
  8.     Dim SH As Worksheet
  9.     For Each SH In Worksheets
  10.         SH.Range("m2") = "EP"
  11.     Next
  12. End Sub
  13. Sub t3()
  14.     Dim i As Integer, j As Integer, k As Integer
  15.     i = 1
  16.     j = 1
  17.     k = 2
  18.     Do While k < 10000
  19.         i = j
  20.         j = k
  21.         k = i + j
  22.     Loop
  23.     MsgBox "在这列数中,最接近10000,且小于10000的数是:" & j
  24. End Sub
  25. Sub t4()
  26.     Dim vb As Byte
  27.     Dim i As Integer, j As Integer
  28.     Application.ScreenUpdating = False
  29.     With Sheets("循环可以做什么").Range("aw16")
  30.         Do
  31.             vb = Int(Rnd * 55 + 1)
  32.         Loop Until vb <> .Interior.ColorIndex
  33.         For i = -8 To 8
  34.             For j = -8 To 8
  35.                 If i ^ 2 + j ^ 2 <= 64 Then
  36.                     .Offset(i, j).Interior.ColorIndex = vb
  37.                 End If
  38.             Next
  39.         Next
  40.         .Interior.ColorIndex = vb
  41.     End With
  42.     Application.ScreenUpdating = True
  43. End Sub
复制代码
循环在VBA中的运用.rar (70.25 KB, 下载次数: 4)

点评

FF7
1,2,4完全正确;但练习三误解了我的意思,已经在主帖作了说明。请重新做一下吧,如果结果正确,因为是沙发,给予双倍奖励吧。另外如果代码被评为最优秀,另外再给你申请加分!下面的同学加油!!  发表于 2012-3-17 12:40

评分

参与人数 1 +14 金币 +14 收起 理由
FF7 + 14 + 14 1,2,4正确!

查看全部评分

回复

使用道具 举报

发表于 2012-3-17 13:01 | 显示全部楼层
  1. Sub t3()
  2.     Dim i As Integer, j As Integer, k As Integer
  3.     i = 1
  4.     j = 1
  5.     k = 2
  6.     Do While k < 10000
  7.         i = j
  8.         j = k
  9.         k = i + j
  10.     Loop
  11.     MsgBox "在这列数中,最接近10000,且小于10000的数是:" & j
  12. End Sub
复制代码
那个数是6765?

评分

参与人数 1 +10 金币 +10 收起 理由
FF7 + 10 + 10 第3题补充完全正确!!

查看全部评分

回复

使用道具 举报

发表于 2012-3-17 15:31 | 显示全部楼层
本帖最后由 sunjing-zxl 于 2012-3-17 21:28 编辑

  1. Sub 练习1()
  2.     Dim i As Long
  3.     With Sheets("练习")
  4.         For i = 7 To 15
  5.             .Cells(i, 1) = .Cells(i, 1).Row
  6.         Next i
  7.     End With
  8. End Sub
  9. Sub 练习2()
  10.     Dim i As Long
  11.     For i = 1 To Sheets.Count
  12.         Sheets(i).Range("M2") = "EP"
  13.     Next i
  14. End Sub
  15. Sub 练习3()
  16.     Dim x As Long, y As Long, z As Long
  17.     '方法1
  18.     x = 1: y = 1: z = 0
  19.     Do While z < 10000
  20.         z = x + y
  21.         x = y: y = z
  22.     Loop
  23.     MsgBox "小于1万,且最接近1万的数是:" & x, , "方法1"
  24.     '方法2
  25.     x = 1: y = 1: z = 0
  26.     Do
  27.         z = x + y
  28.         x = y: y = z
  29.     Loop While x + y < 10000
  30.     MsgBox "小于1万,且最接近1万的数是:" & z, , "方法2"
  31. End Sub
  32. Sub 练习4()
  33.     Dim rng As Range, rng1 As Range, T As Double
  34.     Dim i As Byte, Ysa As Byte, Ysb As Byte
  35.     Sheets("循环可以做什么").Select
  36.     With Sheets("循环可以做什么")
  37.         Do
  38.             Ysa = Int(Rnd * 55 + 1)
  39.         Loop Until Ysa <> [AW16].Interior.ColorIndex
  40.         Do
  41.             Ysb = Int(Rnd * 55 + 1)
  42.         Loop Until Ysb <> [AW17].Interior.ColorIndex And Ysb <> Ysa
  43.         Set rng = .Range("AV9:AX23")
  44.         For i = 1 To 6
  45.             Set rng = Union(rng, .Range(.Cells(15 - i, 41 + i), .Cells(17 + i, 41 + i)), .Range(.Cells(15 - i, 57 - i), .Cells(17 + i, 57 - i)))
  46.         Next i
  47.         For Each rng1 In rng
  48.             T = Timer
  49.             Do While Timer < T + 0.005
  50.                 DoEvents
  51.             Loop
  52.             If rng1.Address = "$AW$16" Then
  53.                 rng1.Interior.ColorIndex = Ysa
  54.             Else
  55.                 rng1.Interior.ColorIndex = Ysb
  56.             End If
  57.         Next
  58.     End With
  59. End Sub
  60. Sub 返回()
  61.     Sheets("练习").Select
  62. End Sub
复制代码
附件: 循环在VBA中的运用练习题-sunjing-zxl.rar (83.53 KB, 下载次数: 3)

点评

FF7
呵呵,修改后的第4题很漂亮,但结果不正确,可能我们在理解题意上各有不同,代码效果很漂亮,给个另加分吧,总计17分。  发表于 2012-3-17 21:45
FF7
1,2,3全对,第3题两种方法均正确,累计得分1+1+5+5=12分,但第4题答案错误了!希望能修改一下。到时一并给分!!  发表于 2012-3-17 19:32

评分

参与人数 1 +17 金币 +17 收起 理由
FF7 + 17 + 17 练习4代码效果很漂亮,很用心的作品。加5分.

查看全部评分

回复

使用道具 举报

发表于 2012-3-17 18:53 | 显示全部楼层
Sub 添加行号()
Dim X As Integer
For X = 7 To 15
    Cells(X, 1) = Cells(X, 1).Row
Next
End Sub

Sub m2()
Dim X As Integer
For X = 1 To Worksheets.Count
    Worksheets(X).Range("M2") = "EP"
Next
End Sub

Sub 找10000()
Dim i%, j%, X%
i = 1
j = 1
Do Until X >= 10000
    X = i + j
    i = j
    j = X
Loop
MsgBox "最接近10000且小于10000的数是:  " & i
End Sub

Sub 画圆()
Dim Target As Range, RRange As Range
For Each RRange In Range("ao8:be24")
    If ((RRange.Row - 16) ^ 2 + (RRange.Column - 49) ^ 2) ^ 0.5 <= 8 Then
        If Target Is Nothing Then
            Set Target = RRange
        Else
            Set Target = Union(Target, RRange)
        End If
    End If
Next
Target.Interior.ColorIndex = 4
Target.ColumnWidth = 1.88
Target.RowHeight = 15
End Sub

点评

FF7
Super!!!1,2,3题跟前三楼相同,累计正确得分7分。第4题思维严谨增加2分。累计14分,第二个全对增加5分奖励,共计19分!  发表于 2012-3-17 19:36

评分

参与人数 1 +19 金币 +19 收起 理由
FF7 + 19 + 19 谢谢支持!!

查看全部评分

回复

使用道具 举报

发表于 2012-3-17 21:45 | 显示全部楼层
  1. Sub 练习三()
  2.     Dim a%, b%, c%, d%
  3.     a = 1: b = 1: c = 2
  4.     Do
  5.         a = b
  6.         b = c
  7.         c = a + b
  8.     Loop While c < 10000
  9.     d = b
  10. End Sub
  11. Sub 练习四()
  12.     Dim co As Byte, y%, x%, i%
  13.     Sheets(1).Select
  14.     Do
  15.         co = Int(56 * Rnd()) + 1
  16.     Loop Until co <> [aw16].Interior.ColorIndex
  17.     For i = 9 To 23
  18.         T = Timer
  19.         Do While Timer - T < 0.1
  20.            DoEvents
  21.         Loop
  22.         y = Abs(i - 16) + 1
  23.         x = Int((64 - y ^ 2) ^ 0.5 + 0.5)
  24.         If i = 9 Or i = 23 Then
  25.             Range(Cells(i, 48), Cells(i, 50)).Interior.ColorIndex = co
  26.         Else
  27.             Range(.Cells(i, 50 - x), Cells(i, 48 + x)).Interior.ColorIndex = co
  28.         End If
  29.     Next i
  30. End Sub
  31. Sub 练习一()
  32. For i = 7 To 15
  33. Cells(i, 1) = i
  34. Next i
  35. End Sub
  36. Sub 练习二()
  37. Dim sh As Worksheet
  38. For Each sh In Sheets
  39. sh.[m2] = "EP"
  40. Next sh
  41. End Sub
复制代码

循环在VBA中的运用.zip

68.38 KB, 下载次数: 8

点评

FF7
呵呵,我并不认为只有我自己画的圆是标准近似圆!呵呵,非常好的代码!全对了,当然,对于你们而言,应该算是简单题目了!!!!  发表于 2012-3-17 21:52

评分

参与人数 1 +12 金币 +12 收起 理由
FF7 + 12 + 12

查看全部评分

回复

使用道具 举报

发表于 2012-3-17 22:15 | 显示全部楼层
Sub 练习一()
Dim i As Byte
For i = 7 To 15
Cells(i, 1) = i
Next
End Sub
--------------------------------------------------------
Sub 练习二()
Dim sh As Worksheet
For Each sh In Sheets
sh.Range("m2") = "EP"
Next
End Sub
--------------------------------------------------
Sub 练习三()
Dim i As Long, j As Long, c As Long
i = 1
j = 1
Do While c < 10000
c = i + j
i = j
j = c
Loop
MsgBox i
End Sub
-----------------------------------------------------------
Sub 练习四()
Dim r As Range, vb As Byte, T As Double
   Do
     vb = Int(Rnd * 55 + 1)
   Loop Until vb <> [t19].Interior.ColorIndex
     
   For Each r In [An6:be26]
       T = Timer
       Do While Timer < T + 0.005
         DoEvents
       Loop
       If r.Interior.ColorIndex > 0 Then r.Interior.ColorIndex = vb
   Next
End Sub

循环在VBA中的运用.rar

71.49 KB, 下载次数: 4

点评

FF7
呵呵,虽然第4题不是我预想中的那种方法,但你的这种方法也很巧妙,完全符合题意了,肯定全对了!!  发表于 2012-3-17 22:28

评分

参与人数 1 +12 金币 +12 收起 理由
FF7 + 12 + 12 殊途同归!!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-3-20 12:51 | 显示全部楼层
课件及各个示例的代码注释。
4个练习题的参考答案!!!
详见附件!!

循环在VBA中的运用(练习答案及代码注释).zip

65.7 KB, 下载次数: 26

回复

使用道具 举报

发表于 2012-3-20 15:57 | 显示全部楼层
原来还可以这样用,学习啦!  真强大
回复

使用道具 举报

发表于 2012-3-21 15:47 | 显示全部楼层
晕,忘记教了,都开帖了。
既然做了,老师给评价下吧!
  1. Sub 输入列号()
  2.   Dim i As Integer
  3.       For i = 7 To 15
  4.    
  5.         Cells(i, 1) = Cells(i, 1).Row
  6.    
  7.       Next i
  8.   
  9. End Sub

  10. Sub 输入EP()
  11.   Dim i As Integer
  12.   
  13.      For i = 1 To Sheets.Count
  14.   
  15.         Sheets(i).Range("m2") = "EP"
  16.      
  17.      Next i
  18.   End Sub

  19. Sub 小于10000()
  20. Dim i!, a(0 To 10000) As Integer
  21.   i = 1
  22.   a(1) = 1
  23.       Do While a(i) <= 10000
  24.          i = i + 1
  25.             a(i) = (((1 + Sqr(5)) / 2) ^ i - ((1 - Sqr(5)) / 2) ^ i) / Sqr(5) '数列通项式
  26.                  'Cells(i - 1, "a") = a(i - 1)
  27.       Loop

  28. MsgBox "最接近10000的数,且不大于10000的数是:" & a(i - 1)

  29. End Sub

  30. Sub huyuan()

  31.    Dim r As Range, vb As Byte, T As Double
  32.    Do
  33.      vb = Int(Rnd * 55 + 1)
  34.    Loop Until vb <> [t19].Interior.ColorIndex
  35.      
  36.    For Each r In Range("AO8:BE24")
  37.        T = Timer
  38.        Do While Timer < T + 0.001
  39.          DoEvents
  40.        Loop
  41.        If (r.Row - 16) ^ 2 + (r.Column - 49) ^ 2 <= 70 Then r.Interior.ColorIndex = vb
  42.    Next

  43. End Sub
复制代码

点评

FF7
代码书写时应该保持良好的缩进习惯,这样代码看起来比较整齐明快。斐波拉契数列的通项公式不失为一个很好的方法。但对于数学不好的人来说,要推断这个公式可是一个非常难的问题。不过学好数学非常重要,值得奖励!  发表于 2012-3-21 22:41

评分

参与人数 1 +14 金币 +14 收起 理由
FF7 + 14 + 14 第三题加5分,其他题分数减半。

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 03:10 , Processed in 0.425258 second(s), 24 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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