11月13/14日 零基础学Excel VBA 300集Office 2010微视频教程
10月18/19日 7天Excel脱白 高效办公必会的Office实战技巧
10月23/24日 财务会计玩转Excel 网易云课堂-Excel数据透视表应用大全
Excel数据处理与分析实战技巧第1季
查看: 516|回复: 63

零基础学ExcelVBA 第十一期 第七课时作业贴

[复制链接]
发表于 2017-7-24 20:39:11 | 显示全部楼层 |阅读模式
本帖最后由 开心妙妙 于 2017-8-9 18:38 编辑

交作业的要求:

1、不需要附件,只需贴代码,说明你做的是哪道题
2、贴上的代码都需要缩进,并且关键语句要有注释
3、请在添加代码文字,那里添加代码,这样代码在楼层中显得赏心悦目。不知道怎样操作的小伙伴,可以参照看动画。
113058c5vzhlg55gq16qpg.gif
回复

使用道具 举报

发表于 2017-7-25 00:33:09 | 显示全部楼层
本帖最后由 CNNNOO 于 2017-7-28 19:58 编辑
  1. Sub CNN第七课时作业题1猜数游戏MOD()              '循环100次。
  2.     Dim num As Long, guessNum As Long, i As Long
  3.     '第一判断如果你输入的数比电脑生成的数小:就输出小了小了
  4.     '如果相等 就输出猜对了
  5.     '如果比电脑的数大,就输出大了,大了
  6.     guessNum = 1                                '避免第一次判断出错,先对猜数赋值1
  7.     num = 0                                     '避免第一次判断出错,先对猜数赋值0
  8.     num = WorksheetFunction.RandBetween(1, 100) '生成了一个随机的1-100之间的数。
  9.     Do While guessNum <> num                    '循环判断,只要没猜对,就继续。
  10.       guessNum = Val(InputBox("请输入1-100之间的一个整数来猜", "猜数", 50, 5120, 1800))
  11.         If guessNum > 100 Or guessNum < 1 Then    '超过猜数范围的,跳出if判断,重新输入!
  12.             MsgBox "不带耍赖!只能猜1-100!请重新输入!", 48, "友情提醒"
  13.         Else
  14.             If guessNum < num Then               '条件分支一,没有直接用elseif,因为猜数计数时需要把超范围的排除在外。
  15.                 If MsgBox("小了小了!。再猜一次吧,加油!下次就猜对了!" & Chr(13) & "话说,悄悄问下,需要提示吗?", 292, "猜数") = vbYes Then
  16.                    MsgBox "比" & num + 1 & "小1,哈哈!猜吧!", 64, "提示"
  17.                 End If
  18.             ElseIf guessNum > num Then           '条件分支二,没有直接用ELSE,是因为如果相等的话会有问题。
  19.                 If MsgBox("大了大了!。再猜一次吧,加油!下次就猜对了!" & vbCr & "话说,悄悄问下,需要提示吗?", 292, "猜数") = vbYes Then
  20.                    MsgBox "比" & num - 1 & "大1,哈哈!猜吧!", 64, "提示"
  21.                 End If
  22.             End If
  23.             i = i + 1                            '统计猜数次数
  24.         End If
  25.     Loop
  26.         If i < 8 Then
  27.             MsgBox "猜对了,宝真滴是:" & num & "。您一共猜了:" & i & "次。你具有天才的头脑啊!"   '循环结果:如果小于8次,输出结果。
  28.         ElseIf i <= 15 Then
  29.             MsgBox "猜对了,宝真滴是:" & num & "。您一共猜了:" & i & "次。你还凑合,中人之资吧!"   '循环结果:如果小于等于15次,输出结果。
  30.         Else
  31.             MsgBox "猜对了,宝真滴是:" & num & "。您一共猜了:" & i & "次。愚不可及,你的榆木脑袋该狠狠的敲打敲打了!" '循环结果:如果大于15次,输出结果。
  32.         End If
  33. End Sub
复制代码
  1. Sub CNN第七课时作业题2九九乘法表()
  2.     Dim i As Long
  3.     Dim j As Long
  4.     For i = 1 To 9
  5.         For j = 1 To 9
  6.         If i >= j Then
  7.         Cells(i, j) = j & "×" & i & "=" & i * j
  8.         End If
  9.         Next
  10.     Next
  11. End Sub
复制代码
  1. Sub CNN第七课时作业题3出货表()
  2.     Dim 总金额 As Long
  3.     Dim 总数量 As Long
  4.     Dim i As Integer
  5.     Dim j As Integer
  6.     Dim k As Integer
  7.     i = 2
  8.     Do Until Cells(i, 10) = ""
  9.         j = 2
  10.         总金额 = 0
  11.         总数量 = 0
  12.         k = 0
  13.         Do Until Cells(j, 1) = ""
  14.             If Cells(j, 1) = Cells(i, 10) Then
  15.             总金额 = 总金额 + Cells(j, 5)
  16.             总数量 = 总数量 + Cells(j, 3)
  17.             k = k + 1
  18.             End If
  19.             j = j + 1
  20.         Loop
  21.         Cells(i, 11) = 总金额
  22.         Cells(i, 12) = 总金额 / k
  23.         Cells(i, 13) = 总金额 / 总数量
  24.         i = i + 1
  25.      Loop
  26. End Sub
复制代码
  1. Sub CNN第七课时作业题4蛇形填数()
  2.     Dim i&, k&, m&, a&, b&, c&, d&
  3.     i = 1
  4.     k = InputBox("请输入蛇形填数的层数:", "蛇形填数", 10)
  5.     m = 1
  6.     Do Until i > k
  7.         For a = i To k
  8.             If a > k Then
  9.                 Exit For
  10.             Else
  11.             Cells(i, a) = m
  12.             m = m + 1
  13.             End If
  14.         Next
  15.         For b = i + 1 To k
  16.             If b > k Then
  17.                 Exit For
  18.             Else
  19.             Cells(b, k) = m
  20.             m = m + 1
  21.             End If
  22.         Next
  23.         For c = k - 1 To i Step -1
  24.             If c < i Then
  25.                 Exit For
  26.             Else
  27.             Cells(k, c) = m
  28.             m = m + 1
  29.             End If
  30.         Next
  31.         For d = k - 1 To i + 1 Step -1
  32.             If d < i Then
  33.                 Exit For
  34.             Else
  35.             Cells(d, i) = m
  36.             m = m + 1
  37.             End If
  38.         Next
  39.     i = i + 1
  40.     k = k - 1
  41.     Loop
  42. End Sub
复制代码

点评

蛇形填数,思路赞!  发表于 2017-8-9 09:35
整体完成得好棒,赞!  发表于 2017-8-8 17:11
作业2:可以优化成这样:For i = 1 To 9 For j = i To 9 Cells(j, i) = i & "×" & j & "=" & i * j Next Next,可以减少循环的次数并减去判断   发表于 2017-8-8 14:53
作业题1:可以考虑While guessNum <> num 这条件放在尾部,就可以不用考虑第一次判断出错的问题  发表于 2017-8-8 14:47
回复 支持 反对

使用道具 举报

发表于 2017-7-25 12:59:36 | 显示全部楼层

RE: 零基础学ExcelVBA 第十一期 第七课时作业贴

本帖最后由 cynthiashi 于 2017-8-9 14:26 编辑

Sub answer724_1()

     Dim num As Long, guessnum As Long, i&
     num = WorksheetFunction.RandBetween(1, 100)
     Do Until guessnum = num
         guessnum = Val(InputBox("请输入1-100之间的一个整数来猜"))
         If guessnum < num Then
             MsgBox "小了小了"
         ElseIf guessnum > num Then
             MsgBox "大了大了"
         End If
         i = i + 1
     Loop
     Select Case i
     Case Is <= 8
         MsgBox "你具有天才的头脑啊"
     Case Is <= 15
         MsgBox "你还凑合,中人之资吧"
     Case Else
         MsgBox "愚不可及,你的榆木脑袋该狠狠地敲打敲打了。"
     End Select
      
End Sub



Sub answer724_2()

    Dim i As Long, j As Long, rng As Range
    For i = 1 To 9
        For j = 1 To i
           Cells(i, j) = i & " * " & j & "=" & i * j
        Next
    Next
   
End Sub



Sub answer724_3()

    Dim i As Long, j As Long
    Dim value As Double, quantity As Double, count As Long
    For i = 2 To 6
        value = 0
        quantity = 0
        count = 0
        For j = 2 To 37
        If Range("a" & j) = Range("j" & i) Then
            value = value + Range("e" & j)
            quantity = quantity + Range("c" & j)
            count = count + 1
            Range("k" & i) = value
            Range("l" & i) = value / count
            Range("m" & i) = value / quantity
        End If
        Next
    Next
   
End Sub

Sub answer724_蛇形填充()
     
     Dim i As Long, j As Long, num As Long, k As Long
     Range(Range("a1"), Range("h8")).Clear
     For i = 1 To 4
         For j = i To 9 - i
             num = num + 1
             Cells(i, j) = num
             Cells(i, j).Interior.Color = vbYellow
         Next
         For j = i + 1 To 9 - i - 1
             num = num + 1
             Cells(j, 9 - i) = num
             Cells(j, 9 - i).Interior.Color = vbGreen
         Next
         For j = 9 - i To i Step -1
             num = num + 1
             Cells(9 - i, j) = num
             Cells(9 - i, j).Interior.Color = vbBlue
         Next
          For j = 9 - i - 1 To i + 1 Step -1
             num = num + 1
             Cells(j, i) = num
             Cells(j, i).Interior.Color = vbRed
         Next
     Next
     
End Sub





点评

作业2:思路很棒  发表于 2017-8-8 17:14
作业3:结果正确,循环累加到变量里面的值,可以在里层循环结束后,一次性赋值到单元格,尽量减少访问单元格,这样可以提升效率,可参看二楼作业3答案  发表于 2017-8-8 17:13
作业4:结果正确,如果能解成蛇形数不是定值更佳,可以参看2楼的答案  发表于 2017-8-8 16:57
作业1:解错题意: 1 To 100这不正确,题目是:-如果猜不对,就得再猜,直到猜对为止,终止的条件猜对了才可终止,不是到100就终止循环  发表于 2017-8-8 15:07
回复 支持 反对

使用道具 举报

发表于 2017-7-25 18:27:56 | 显示全部楼层
  1. Sub 作业1()
  2.     Dim num As Long, guessNum As Long, i As Long
  3.     guessNum = Val(InputBox("请输入1-100之间的一个整数来猜"))
  4.     num = WorksheetFunction.RandBetween(1, 100)
  5.     Debug.Print num
  6.     For i = 1 To 100
  7.         If guessNum > num Then
  8.             MsgBox "大了,大了"
  9.             guessNum = InputBox("请输入1-100之间的一个整数来猜")
  10.         ElseIf guessNum = num Then Exit For
  11.         Else
  12.             MsgBox "小了,小了"
  13.             guessNum = InputBox("请输入1-100之间的一个整数来猜")
  14.         End If
  15.     Next
  16.     If i < 8 Then
  17.         MsgBox "你是在" & i & "次猜对的,你具有天才的头脑啊。"
  18.     ElseIf i > 8 And i <= 15 Then
  19.         MsgBox "你是在" & i & "次猜对的,你还凑合,中人之资吧。"
  20.     Else
  21.         MsgBox "你是在" & i & "次猜对的,愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
  22.     End If
  23. End Sub

  24. Sub 作业2()
  25.     Dim 结果 As String, 值 As String, 行 As Long, 列 As Long

  26.     For 列 = 1 To 9
  27.         For 行 = 1 To 9
  28.             值 = 行 & "×" & 列 & "=" & 行 * 列
  29.             结果 = 值
  30.             If 列 <= 行 Then Cells(行, 列) = 结果
  31.         Next
  32.       
  33.     Next

  34. End Sub

  35. Sub 作业3()
  36.     Dim 货单名称 As String, 单价 As Long, 数量 As Range, 总数量 As Long, 货品总额 As Range, 货品总金额 As Double, 每笔平均价 As Long, 平均单价 As Long, 行 As Long, 查找行 As Long, 总笔数 As Long
  37.     For 查找行 = 2 To 6
  38.         货品总金额 = 0
  39.         总数量 = 0
  40.         总笔数 = 0
  41.         For 行 = 2 To 37
  42.             货单名称 = Range("a" & 行)
  43.             If 货单名称 = Range("j" & 查找行) Then
  44.                 Set 货品总额 = Range("e" & 行)
  45.                     货品总金额 = 货品总金额 + 货品总额
  46.                     总笔数 = 总笔数 + 1
  47.                 Set 数量 = Range("c" & 行)
  48.                     总数量 = 总数量 + 数量
  49.             End If
  50.         Next
  51.         Range("k" & 查找行) = 货品总金额
  52.         Range("l" & 查找行) = 货品总金额 / 总笔数
  53.         Range("M" & 查找行) = 货品总金额 / 总数量
  54.     Next
  55.    
  56. End Sub

  57. Sub 作业4()
  58.     Dim 行 As Long, 列 As Long, 值 As Long, n1 As Long, n2 As Long, n3 As Long, n4 As Long, n5 As Long, n6 As Long, n7 As Long, n8 As Long, n9 As Long, n10 As Long, n11 As Long, n12 As Long, n13 As Long
  59.    
  60.     行 = 1
  61.         For 列 = 1 To 8
  62.             值 = 列
  63.             Cells(行, 列) = 值
  64.         If 列 = 8 Then
  65.             For n1 = 2 To 8
  66.                 值 = 值 + 1
  67.                 Cells(n1, 列) = 值
  68.             Next
  69.                 If n1 = 9 Then
  70.                     For n2 = 7 To 1 Step -1
  71.                         值 = 值 + 1
  72.                         Cells(n1 - 1, n2) = 值
  73.                     Next
  74.                 End If
  75.                     If n2 = 0 Then
  76.                         For n3 = 7 To 2 Step -1
  77.                             值 = 值 + 1
  78.                             Cells(n3, n2 + 1) = 值
  79.                         Next
  80.                     End If
  81.                         If n3 = 1 Then
  82.                             For n4 = 2 To 7
  83.                                 值 = 值 + 1
  84.                                 Cells(n3 + 1, n4) = 值
  85.                             Next
  86.                         End If
  87.                             If n4 = 8 Then
  88.                                 For n5 = 3 To 7
  89.                                     值 = 值 + 1
  90.                                     Cells(n5, n4 - 1) = 值
  91.                                 Next
  92.                             End If
  93.                                 If n5 = 8 Then
  94.                                     For n6 = 6 To 2 Step -1
  95.                                         值 = 值 + 1
  96.                                         Cells(n5 - 1, n6) = 值
  97.                                     Next
  98.                                 End If
  99.                                     If n6 = 1 Then
  100.                                         For n7 = 6 To 3 Step -1
  101.                                             值 = 值 + 1
  102.                                             Cells(n7, n6 + 1) = 值
  103.                                         Next
  104.                                     End If
  105.                                         If n7 = 2 Then
  106.                                             For n8 = 3 To 6
  107.                                                 值 = 值 + 1
  108.                                                 Cells(n7 + 1, n8) = 值
  109.                                             Next
  110.                                          End If
  111.                                             If n8 = 7 Then
  112.                                                 For n9 = 4 To 6
  113.                                                     值 = 值 + 1
  114.                                                     Cells(n9, n8 - 1) = 值
  115.                                                 Next
  116.                                             End If
  117.                                                 If n9 = 7 Then
  118.                                                     For n10 = 5 To 3 Step -1
  119.                                                         值 = 值 + 1
  120.                                                         Cells(n9 - 1, n10) = 值
  121.                                                     Next
  122.                                                 End If
  123.                                                     If n10 = 2 Then
  124.                                                         For n11 = 5 To 4 Step -1
  125.                                                             值 = 值 + 1
  126.                                                             Cells(n11, n10 + 1) = 值
  127.                                                         Next
  128.                                                     End If
  129.                                                         If n11 = 3 Then
  130.                                                             For n12 = 4 To 5
  131.                                                                 值 = 值 + 1
  132.                                                                 Cells(n11 + 1, n12) = 值
  133.                                                             Next
  134.                                                         End If
  135.                                                             If n12 = 6 Then
  136.                                                                 值 = 值 + 1
  137.                                                                 Cells(n11 + 2, n12 - 1) = 值
  138.                                                             End If
  139.                                                                 If n12 = 6 Then
  140.                                                                     值 = 值 + 1
  141.                                                                     Cells(n11 + 2, n12 - 2) = 值
  142.                                                                 End If
  143.                                                 
  144.         End If
  145.         Next

  146. End Sub
复制代码

点评

作业3:正确,思路赞  发表于 2017-8-8 17:21
作业4:结果正确,如果能解成蛇形数不是定值更佳,可以参看2楼的答案  发表于 2017-8-8 16:59
作业2结果正确,可以优化,可以参看3楼的思路  发表于 2017-8-8 16:40
作业1:解错题意: 1 To 100这不正确,题目是:-如果猜不对,就得再猜,直到猜对为止,终止的条件猜对了才可终止,不是到100就终止循环  发表于 2017-8-8 16:35
回复 支持 反对

使用道具 举报

发表于 2017-7-25 18:28:27 | 显示全部楼层
  1. Sub 作业1()
  2.     Dim num As Long, guessNum As Long, i As Long
  3.     guessNum = Val(InputBox("请输入1-100之间的一个整数来猜"))
  4.     num = WorksheetFunction.RandBetween(1, 100)
  5.     Debug.Print num
  6.     For i = 1 To 100
  7.         If guessNum > num Then
  8.             MsgBox "大了,大了"
  9.             guessNum = InputBox("请输入1-100之间的一个整数来猜")
  10.         ElseIf guessNum = num Then Exit For
  11.         Else
  12.             MsgBox "小了,小了"
  13.             guessNum = InputBox("请输入1-100之间的一个整数来猜")
  14.         End If
  15.     Next
  16.     If i < 8 Then
  17.         MsgBox "你是在" & i & "次猜对的,你具有天才的头脑啊。"
  18.     ElseIf i > 8 And i <= 15 Then
  19.         MsgBox "你是在" & i & "次猜对的,你还凑合,中人之资吧。"
  20.     Else
  21.         MsgBox "你是在" & i & "次猜对的,愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
  22.     End If
  23. End Sub

  24. Sub 作业2()
  25.     Dim 结果 As String, 值 As String, 行 As Long, 列 As Long

  26.     For 列 = 1 To 9
  27.         For 行 = 1 To 9
  28.             值 = 行 & "×" & 列 & "=" & 行 * 列
  29.             结果 = 值
  30.             If 列 <= 行 Then Cells(行, 列) = 结果
  31.         Next
  32.       
  33.     Next

  34. End Sub

  35. Sub 作业3()
  36.     Dim 货单名称 As String, 单价 As Long, 数量 As Range, 总数量 As Long, 货品总额 As Range, 货品总金额 As Double, 每笔平均价 As Long, 平均单价 As Long, 行 As Long, 查找行 As Long, 总笔数 As Long
  37.     For 查找行 = 2 To 6
  38.         货品总金额 = 0
  39.         总数量 = 0
  40.         总笔数 = 0
  41.         For 行 = 2 To 37
  42.             货单名称 = Range("a" & 行)
  43.             If 货单名称 = Range("j" & 查找行) Then
  44.                 Set 货品总额 = Range("e" & 行)
  45.                     货品总金额 = 货品总金额 + 货品总额
  46.                     总笔数 = 总笔数 + 1
  47.                 Set 数量 = Range("c" & 行)
  48.                     总数量 = 总数量 + 数量
  49.             End If
  50.         Next
  51.         Range("k" & 查找行) = 货品总金额
  52.         Range("l" & 查找行) = 货品总金额 / 总笔数
  53.         Range("M" & 查找行) = 货品总金额 / 总数量
  54.     Next
  55.    
  56. End Sub

  57. Sub 作业4()
  58.     Dim 行 As Long, 列 As Long, 值 As Long, n1 As Long, n2 As Long, n3 As Long, n4 As Long, n5 As Long, n6 As Long, n7 As Long, n8 As Long, n9 As Long, n10 As Long, n11 As Long, n12 As Long, n13 As Long
  59.    
  60.     行 = 1
  61.         For 列 = 1 To 8
  62.             值 = 列
  63.             Cells(行, 列) = 值
  64.         If 列 = 8 Then
  65.             For n1 = 2 To 8
  66.                 值 = 值 + 1
  67.                 Cells(n1, 列) = 值
  68.             Next
  69.                 If n1 = 9 Then
  70.                     For n2 = 7 To 1 Step -1
  71.                         值 = 值 + 1
  72.                         Cells(n1 - 1, n2) = 值
  73.                     Next
  74.                 End If
  75.                     If n2 = 0 Then
  76.                         For n3 = 7 To 2 Step -1
  77.                             值 = 值 + 1
  78.                             Cells(n3, n2 + 1) = 值
  79.                         Next
  80.                     End If
  81.                         If n3 = 1 Then
  82.                             For n4 = 2 To 7
  83.                                 值 = 值 + 1
  84.                                 Cells(n3 + 1, n4) = 值
  85.                             Next
  86.                         End If
  87.                             If n4 = 8 Then
  88.                                 For n5 = 3 To 7
  89.                                     值 = 值 + 1
  90.                                     Cells(n5, n4 - 1) = 值
  91.                                 Next
  92.                             End If
  93.                                 If n5 = 8 Then
  94.                                     For n6 = 6 To 2 Step -1
  95.                                         值 = 值 + 1
  96.                                         Cells(n5 - 1, n6) = 值
  97.                                     Next
  98.                                 End If
  99.                                     If n6 = 1 Then
  100.                                         For n7 = 6 To 3 Step -1
  101.                                             值 = 值 + 1
  102.                                             Cells(n7, n6 + 1) = 值
  103.                                         Next
  104.                                     End If
  105.                                         If n7 = 2 Then
  106.                                             For n8 = 3 To 6
  107.                                                 值 = 值 + 1
  108.                                                 Cells(n7 + 1, n8) = 值
  109.                                             Next
  110.                                          End If
  111.                                             If n8 = 7 Then
  112.                                                 For n9 = 4 To 6
  113.                                                     值 = 值 + 1
  114.                                                     Cells(n9, n8 - 1) = 值
  115.                                                 Next
  116.                                             End If
  117.                                                 If n9 = 7 Then
  118.                                                     For n10 = 5 To 3 Step -1
  119.                                                         值 = 值 + 1
  120.                                                         Cells(n9 - 1, n10) = 值
  121.                                                     Next
  122.                                                 End If
  123.                                                     If n10 = 2 Then
  124.                                                         For n11 = 5 To 4 Step -1
  125.                                                             值 = 值 + 1
  126.                                                             Cells(n11, n10 + 1) = 值
  127.                                                         Next
  128.                                                     End If
  129.                                                         If n11 = 3 Then
  130.                                                             For n12 = 4 To 5
  131.                                                                 值 = 值 + 1
  132.                                                                 Cells(n11 + 1, n12) = 值
  133.                                                             Next
  134.                                                         End If
  135.                                                             If n12 = 6 Then
  136.                                                                 值 = 值 + 1
  137.                                                                 Cells(n11 + 2, n12 - 1) = 值
  138.                                                             End If
  139.                                                                 If n12 = 6 Then
  140.                                                                     值 = 值 + 1
  141.                                                                     Cells(n11 + 2, n12 - 2) = 值
  142.                                                                 End If
  143.                                                 
  144.         End If
  145.         Next

  146. End Sub
复制代码
回复 支持 反对

使用道具 举报

发表于 2017-7-25 21:22:51 | 显示全部楼层
  1. Sub 作业1()
  2.     Dim num As Long, guessNum As Long, 次数 As Long
  3.         num = WorksheetFunction.RandBetween(1, 100)
  4.         Do Until guessNum = num
  5.             guessNum = Val(InputBox("请输入1-100之间的一个整数来猜"))
  6.                     If guessNum < num Then
  7.                          MsgBox "小了小了"
  8.                     ElseIf guessNum > num Then
  9.                          MsgBox "大了,大了"
  10.                     End If
  11.                     次数 = 次数 + 1
  12.         Loop
  13.         Select Case 次数
  14.         Case Is <= 8
  15.             MsgBox "你具有天才的头脑啊。"
  16.         Case Is <= 15
  17.             MsgBox "你还凑合,中人之资吧。"
  18.         Case Else
  19.             MsgBox "愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
  20.         End Select
  21.      End Sub
  22. Sub 乘法表()
  23. Dim 行 As Long, 列 As Long
  24.     For 行 = 1 To 9
  25.         For 列 = 1 To 9
  26.             If 行 >= 列 Then
  27.                 Cells(行, 列) = 行 & "X" & 列 & "=" & 行 * 列
  28.             Else
  29.                 Cells(行, 列) = ""
  30.             End If
  31.         Next
  32.     Next
  33. End Sub

  34. Sub 作业3()
  35. Dim 行 As Long, 列 As Long, 总笔数 As Long, 总数量 As Long
  36.     For 列 = 2 To 6
  37.     总笔数 = 0
  38.     总数量 = 0
  39.             For 行 = 2 To 37
  40.                     Select Case Cells(列, 10)
  41.                     Case Is = Cells(行, 1)
  42.                     总笔数 = 总笔数 + 1
  43.                     总数量 = 总数量 + Cells(行, 3)
  44.                     Cells(列, 11) = Cells(列, 11) + Cells(行, 5)
  45.                     End Select
  46.             Next
  47.                 Cells(列, 12) = Cells(列, 11) / 总笔数
  48.                 Cells(列, 13) = Cells(列, 11) / 总数量
  49.     Next
  50. End Sub
复制代码

点评

作业3:思路不错,货品总金额同样可定义一个变量存储累加的数量,循环结束后一次性赋值给单元格,这样减少访问单元格,可以提高运行效率  发表于 2017-8-8 17:27
全部作业正确,赞,作业2:还可以优化,参看3楼代码  发表于 2017-8-8 16:47
回复 支持 反对

使用道具 举报

发表于 2017-7-25 21:37:45 | 显示全部楼层
Sub 蛇形填数()
    Dim a As Integer, b As Integer, e As Integer, f As Integer
    Dim i As Integer, j As Integer
    i = 1
    j = 8
    For e = 1 To 4
        a = a + 1
        For b = i To j

            f = f + 1
            Cells(a, b) = f
        Next
        b = b - 1
        For a = i + 1 To j
            f = f + 1
            Cells(a, b) = f
        Next
        a = a - 1
        For b = j - 1 To i Step -1
            f = f + 1
            Cells(a, b) = f
        Next
        b = b + 1
        For a = j - 1 To i + 1 Step -1
             f = f + 1
            Cells(a, b) = f
        Next
        i = i + 1
        j = j - 1
    Next
End Sub

Sub 出货表计算()
    Dim i, j, k, sumv, 数量
    For j = 2 To 6
        sumv = 0
        k = 0
        数量 = 0
        For i = 2 To 37
            If Range("j" & j) = Range("a" & i) Then
            sumv = sumv + Range("e" & i)
            k = k + 1
            数量 = 数量 + Range("c" & i)
            End If
        Next
        Range("k" & j) = sumv
        Range("l" & j) = sumv / k
        Range("m" & j) = sumv / 数量
    Next
End Sub
Sub 猜数游戏雏形()


    Dim num As Long, guessNum As Long, i
    num = WorksheetFunction.RandBetween(1, 100) '生成了一个随机的1-10 之间的数
    For i = 7 To 16
        guessNum = Val(InputBox("请输入1-100之间的一个整数来猜"))
        If num = guessNum And i < 8 Then
            MsgBox "你具有天才的头脑啊。"
            Exit For
        ElseIf num = guessNum And i < 16 Then
            MsgBox "你还凑合,中人之资吧。"
            Exit For
        Else: If i = 16 Then MsgBox "否则输出,愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
        End If
    Next
End Sub


Sub 乘法表()
    Dim i, j, k, a
    For i = 1 To 9
        For j = 1 To i
            a = i * j
            Cells(i, j) = i & " x " & j & "=" & a
        Next
    Next
End Sub


点评

九九乘法表思路结构赞,注意养成变量定义类型的习惯  发表于 2017-8-9 10:59
猜数游戏不符合题意,要求是:如果猜不对,就得再猜,直到猜对为止。也就是只有猜对,才能退出循环。 For i = 7 To 16,而且初值是7,也就是才猜了二次,就会显示大于8了,猜9次就会退出循环了。  发表于 2017-8-9 10:57
出货表代码思路结构很棒  发表于 2017-8-9 09:54
蛇形填数:结果正确,如果能解成蛇形数不是定值更佳,可以参看2楼的答案  发表于 2017-8-8 17:00
回复 支持 反对

使用道具 举报

发表于 2017-7-25 22:25:53 | 显示全部楼层
  1. Sub 作业1猜数游戏()

  2.     Dim i&, j&, chi&
  3.    
  4.     Do
  5.    
  6.         i = InputBox("请输入你所猜的数字(限1-100之间)。") '输入猜的数字
  7.         j = WorksheetFunction.RandBetween(1, 100) '生成1-100随机整数
  8.         chi = chi + 1 '记录猜的次数
  9.         
  10.     Loop Until j = i '当猜中数字,将退出循环
  11.    
  12.     If chi <= 8 Then
  13.         MsgBox "你具有天才的头脑啊。"
  14.         
  15.     ElseIf chi <= 15 Then
  16.         MsgBox "你还凑合,中人之资吧."
  17.         
  18.     Else
  19.         MsgBox "愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
  20.    
  21.     End If
  22.    
  23. End Sub
复制代码
  1. Sub 作业2九九乘法表()

  2.     Dim i&, j& 'i代表行号,j代表列号
  3.    
  4.     For j = 1 To 9
  5.    
  6.         For i = 1 To 9
  7.         
  8.             If j <= i Then '如果行号小于列号,则不做处理,否则将计算。
  9.             
  10.                 Cells(i, j) = i & "*" & j & "=" & i * j
  11.                
  12.             End If
  13.             
  14.         Next i
  15.         
  16.     Next j

  17. End Sub
复制代码

  1. Sub 作业3出货表统计()

  2.     Dim i1&, i2&, i3&, chi&, shu& 'i1代表数据源中的行号,i2代表统计表中的行号。i3代表统计表的列号
  3.    
  4.     i3 = 10
  5.    
  6.     For i2 = 2 To 6
  7.    
  8.     i1 = 2
  9.    
  10.         Do
  11.          
  12.             If Cells(i2, i3) = Cells(i1, "A") Then '如果符合条件,则统计数据 ,否则不作处理
  13.             
  14.                 Cells(i2, i3 + 1) = Cells(i2, i3 + 1) + Cells(i1, "E")
  15.                 chi = chi + 1
  16.                 shu = shu + Cells(i1, "C")
  17.                
  18.             Else
  19.             End If
  20.             
  21.             i1 = i1 + 1 '行号增加1
  22.             
  23.         Loop Until Cells(i1, "A") = "" '当循环到出现 空格时,退出循环。
  24.    
  25.         Cells(i2, i3 + 2) = Cells(i2, i3 + 1) / chi
  26.         Cells(i2, i3 + 3) = Cells(i2, i3 + 1) / shu
  27.         
  28.         chi = 0 '统计完一种数据后,累加器须重置。
  29.         shu = 0
  30.    
  31.     Next
  32.       
  33. End Sub
复制代码



点评

作业3:思路赞,结果正确。建议货品总金额和chug一样定义一个变量累加,循环结束一次性赋值给单元格,这样减少访问单元格,提高运行效率。  发表于 2017-8-9 11:16
作业2:结果正确,有优化空间,参看3楼方法  发表于 2017-8-9 11:10
作业1: j = WorksheetFunction.RandBetween(1, 100) '生成1-100随机整数,应放在循环体外面,每猜一次又重新生成一次,猜到天荒地老也猜不中。泪奔。。。  发表于 2017-8-9 11:08
回复 支持 反对

使用道具 举报

发表于 2017-7-25 23:24:14 | 显示全部楼层
本帖最后由 师小五 于 2017-7-31 07:22 编辑
  1. Option Explicit

  2. '作业1:循环作业的最后一题。
  3. '修改我们以前写的猜数游戏
  4. '修改猜数游戏 1-100
  5. '如果猜不对,就得再猜,直到猜对为止。
  6. '猜对之后会有点评
  7. '如果你在8次之内就猜到了数,会输出:你具有天才的头脑啊。
  8. '如果你猜了>8 and 次数<=15 输出:你还凑合,中人之资吧
  9. '否则输出,愚不可及,你的榆木脑袋该狠狠的敲打敲打了。
  10. Sub 猜数游戏()
  11.     Dim num1&, num2&, i&
  12.     num1 = Application.WorksheetFunction.RandBetween(1, 100)
  13.     i = 1
  14.     Do Until i > 100
  15. 10        num2 = Val(InputBox("请猜一猜这个1-100之间的数字是多少"))
  16.         If num2 > 100 Or num2 < 1 Then
  17.             MsgBox "你本次输入的数字不在1-100里,输入无效!"
  18.             GoTo 10
  19.         ElseIf num2 > num1 Then
  20.             MsgBox "大了,大了"
  21.         ElseIf num2 = num1 Then
  22.             MsgBox "恭喜你,猜对了!"
  23.             Exit Do
  24.         Else
  25.             MsgBox "小了,小了。"
  26.         End If
  27.         
  28.         i = i + 1
  29.         
  30.     Loop
  31.    
  32.     If i <= 8 Then
  33.         MsgBox "你具有天才的头脑啊。"
  34.     ElseIf i <= 15 Then
  35.         MsgBox "你还凑合,中人之资吧。"
  36.     Else
  37.         MsgBox "愚不可及,你的榆木脑袋该狠狠的敲打敲打了。"
  38.     End If
  39.    
  40. End Sub


  41. '作业2:生成一个99 乘法表
  42. Sub 乘法表()
  43.     Dim i%, j%
  44.    
  45.     Range("a1:k9").ClearContents
  46.    
  47.     For i = 1 To 9
  48.         For j = 1 To i
  49.                   
  50.             Cells(i, j) = j& "×" & i & "=" & i * j
  51.         
  52.         Next
  53.     Next

  54. End Sub


  55. '每笔平均价格 = 总金额 / 总笔数
  56. '平均单价 = 总金额 / 总数量

  57. Sub 出货统计初步()
  58.     Dim i&, j&, 金额#, 笔数&, 数量&
  59.     For i = 2 To 6
  60.         金额 = 0: 笔数 = 0: 数量 = 0
  61.         For j = 2 To WorksheetFunction.CountA(Range("a:a"))
  62.             If Cells(j, 1) = Cells(i, "j") Then
  63.                 金额 = 金额 + Cells(j, 5)
  64.                 笔数 = 笔数 + 1
  65.                 数量 = 数量 + Cells(j, 3)
  66.             End If
  67.          Next
  68.          Cells(i, "k") = 金额
  69.          Cells(i, "l") = Round(金额 / 笔数, 2)
  70.          Cells(i, "m") = Round(金额 / 数量, 2)
  71.          
  72.     Next
  73. End Sub


  74. Sub 蛇形填数()
  75.     Dim i&, j&, m&, n&, o&, p&, k&
  76.    
  77.     For i = 1 To 4          '数字蛇形偏转转向发生的循环轮数:1到 数字(8\2)
  78.         o = 8 - i           '每次转向前递增序列的最大序数位置:8-i
  79.         k = 9 - 2 * i       '每次转向发生时递增序数的个数:8-(2*i-1)
  80.         For j = i To 12      '递增序列“可能”循环的次数:i - (8+4)
  81.         
  82.             For m = i To o  '每轮循环序列都发生在 i - o 列,i - o 行
  83.                        
  84.                n = n + 1    '递增序数,循环转向计数
  85.                
  86.                If n <= k + p Then                   '每轮循环第一次序列发生在n<=k+p
  87.                     Cells(i, m) = n                 '将递增数字赋值给对应单元格
  88.                     
  89.                 ElseIf n <= 2 * k + p Then          '每轮循环第二次序列发生在n<=2*k+p
  90.                     Cells(m, k + i) = n
  91.                     
  92.                 ElseIf n <= 3 * k + p Then          '每轮循环第三次序列发生在n<=3*k+p
  93.                     Cells(k + i, k + 2 * i - m) = n
  94.                     
  95.                 ElseIf n <= 4 * k + p Then          '每轮循环第四次序列发生在n<=4*k+p
  96.                     Cells(k + 2 * i - m, i) = n
  97.                     
  98.                 End If
  99.                
  100.                 If n = 4 * k + p Then GoTo 100      '判断n=4*k+p时,跳转到外层循环100处
  101.         
  102.             Next
  103.         Next
  104.         
  105. 100     p = p + 4 * k     '将每轮循环n值增量(4*k)进行累加,为下一次循环准备基础数据。
  106.         
  107.     Next


  108. End Sub

复制代码


点评

作业4:结果正确,但代码不够通用,要改层次数的话,  发表于 2017-8-9 11:43
作业2-3:思路代码结构赞!!!!!  发表于 2017-8-9 11:36
作业1:代码结构不错,就是偏离了题意。题意是需要猜对才可以退出,你的是错到100次就不猜了  发表于 2017-8-9 11:27
回复 支持 反对

使用道具 举报

发表于 2017-7-25 23:32:16 | 显示全部楼层
Sub 作业1()
    Dim num As Long, guessNum As Long, i As Long
    num = WorksheetFunction.RandBetween(1, 100) '生成了一个随机的1-10 之间的数
    Do Until guessNum = num
       guessNum = Val(InputBox("请输入1-100之间的一个整数来猜"))
       Debug.Print num '在立即窗口输出猜的数字,便于矫正后面的语句
         If guessNum < 1 Or guessNum > 100 Then Exit Sub '如果输入的数字不在1-100,则退出sub
         i = i + 1
    Loop
    Select Case i '循环语句
    Case Is <= 8
        MsgBox "你具有天才的头脑啊"
    Case Is < 15
        MsgBox "你还凑合,中人之资吧"
    Case Else
        MsgBox "愚不可及,你的榆木脑袋该狠狠的敲打敲打了"
    End Select '退出循环
End Sub

点评

语句结构正确,不错。建议当猜错的时候,最好有个提示大了大了,小了小了。不在范围的时候,也有个友情提示,直接退出好像不太友好的感觉  发表于 2017-8-9 11:56
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入学

本版积分规则

关闭

站长推荐上一条 /2 下一条

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