白话Excel函数公式 Office易学宝微视频教程合集(Excel+Word+PPT)
笨办法学VBA(从入门到精通) 高效办公必会的Office实战技巧
财务总监的Excel私房课 网易云课堂-Excel数据透视表应用大全
Excel图表神技
123
返回列表 发新帖
楼主: wudixin96

课前练习II--九九乘法表

[复制链接]
发表于 2011-10-7 09:36:56 | 显示全部楼层
结贴............
回复 支持 反对

使用道具 举报

发表于 2011-10-7 19:47:37 | 显示全部楼层
  1. Sub 99()
  2. Dim i As Integer, m As Integer, num As Integer
  3. Dim Target As Range
  4. For i = 1 To 9
  5.    For m = 1 To 9
  6.        num = i * m
  7.       If i <= m Then
  8.          With Worksheets("Sheet1")
  9.               .Cells(m, i).Value = i & "×" & m & " = " & num
  10.               .Columns("a:i").EntireColumn.AutoFit
  11.          End With
  12.       End If
  13.    Next
  14. Next
  15. End Sub
复制代码

评分

参与人数 1登攀 +5 收起 理由
wudixin96 + 5 时间截止了

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-27 09:37:37 | 显示全部楼层
本帖最后由 wudixin96 于 2011-10-8 10:21 编辑

从图上可以看出九九乘法表,就是一个9x9的矩阵,九行九列,并且每列的行数在逐一递减。
同时可以看出每列有内容的行的行数都大于等于列数。所以就可以用FOR…NEXT循环语句达到9x9的矩阵这样的效果。先行后列,刚好可以用两个FOR循环嵌套。即:
'代码1
  1. FOR I=1 TO 9     '列
  2.     FOR J=1 TO 9   '行
  3.        I*J
  4.    NEXT
  5. NEXT
复制代码


这样的语句,外循环产生列,内循环产生行,外循环一次,内循环就运行9次。

又由于行数都大于等于列数这样的一个要求,就需要判断一下,判断就需要用到IF语句了。
'代码2
  1. FOR I=1 TO 9     '列
  2.     FOR J=1 TO 9   '行
  3.        IF J>=I THEN
  4.               I*J
  5.        END IF
  6.     NEXT
  7. NEXT
复制代码

下面就可以把结果赋值到相应的单元格。
'代码3
  1. FOR I=1 TO 9     '列
  2.     FOR J=1 TO 9   '行
  3.        IF J>=I THEN
  4.              Cells(J,I)=I & "*" & J & "=" & I*J
  5.        END IF
  6.     NEXT
  7. NEXT
复制代码


从上面的代码可以看出,其实IF判断可以省略掉,因为只有J>=I时,才能赋值,也就是说J<I的部分是没有用处的,正好可以把I这个列变量代入 J=1 TO 9中,把1替换为I,结果就是J=I TO 9,代码就变为
'代码4
  1. FOR I=1 TO 9     '列
  2.    FOR J=I TO 9   '行
  3.       CELLS(J,I)=I & "*" & J & "=" & I*J
  4.    NEXT
  5. NEXT
复制代码

也可以从代码的运行效率上看(当然循环次数都很小,几乎没差别,循环多就有明显差别了),代码3循环次数为9*9=81次,而代码4 循环次数则为 9+8+7..+2+1=45,少了36,近一半。所以在以后的循环用法中尽量要提高代码的效率,减少循环的次数。

评分

参与人数 1登攀 +20 收起 理由
apirl2008 + 20 练习讲解

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2011-10-8 20:49:02 | 显示全部楼层
杏花雨V翟 发表于 2011-10-5 11:16

FormulaR1C1是公式输入方法
有中括号是相对于选定单元格的相对偏移量,"-"为向左或向上偏移,正数为右或下偏移。
无中括号为相对于选定单元格的绝对偏移量,没有负数
"R"和"C"待变“行”和“列”
如:选定单元格为C8
R[-1]C[-1]为B7单元格,行列都-1,R[1]C[2]为E9单元格,行+1,列+2
R1C1代表A1单元格,R5C6代表F5单元格

例:C1单元格为"=A1+B1"
Range("C1").FormulaR1C1 = "=RC[-2]+RC[-1]"

例:C1单元格为"=A2+E3"
Range("C1").FormulaR1C1 = "=R[1]C[-2]+R[2]C[2]"

补充绝对引用
例:C1单元格为"=$A$2+$E$3"
Range("C1").FormulaR1C1 = "=R2C1+R3C5"

点评

谢谢,越看越糊涂  发表于 2011-10-9 08:25
回复 支持 反对

使用道具 举报

发表于 2011-10-9 08:30:48 | 显示全部楼层
cateran 发表于 2011-10-8 20:49
FormulaR1C1是公式输入方法
有中括号是相对于选定单元格的相对偏移量,"-"为向左或向上偏移,正数为右或 ...

你这个是直接在单元格里面输入公式的方法,为什么不省略FORmulaR1C1呢?
  1. Public Sub 小九九()

  2.     Range("A1:I9") = "=IF(ROW()<COLUMN(),"""",COLUMN()&""*""&ROW()&""=""&(ROW()*COLUMN()))"

  3. End Sub
复制代码

点评

FORmulaR1C1可以不加  发表于 2011-10-9 16:37
回复 支持 反对

使用道具 举报

发表于 2011-10-11 16:03:11 | 显示全部楼层
看了大家的答案,现在才会了如何录制

点评

建议自己试着写一下,多操作易于记忆  发表于 2011-10-11 17:08
回复 支持 反对

使用道具 举报

发表于 2011-10-12 20:27:45 | 显示全部楼层
lingyi123456 发表于 2011-10-11 16:03
看了大家的答案,现在才会了如何录制

谢谢,我会认真学习的。录制差不多会了,但自己写代码还没入门,听课程,再慢慢学习吧。
回复 支持 反对

使用道具 举报

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

本版积分规则

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