Excel宏教程

一、   选中单个单元格

Range(“<单元格地址>“).Select

例:Range("C9").Select   ‘选中“C9”单元格

二、   选中多个单元格

Range(“<单元格地址>:<单元格地址>[,<单元格地址>……]”).Select

例:Range(“A1:B2”).Select   ‘选中“A1”“A2”“B1”“B2”四个连续的单元格

Range(“12:12”).Select   ‘选中第12

Range(“B:B”).Select   ‘选中第B

Range(“A1:A2,B7,2:2”).Select   ‘选中“A1”“A2”“B7”五个不连续的单元格和第二行

Cells.Select   ‘选中当前SHEET中的所有单元格

Rows("<行地址>:<行地址>").Select   ‘选中整行

Columns("<列地址>:<列地址>").Select   ‘选中整列

例:Rows(“2:2”). Select   ‘选中第2

Rows(“2:5”). Select   ‘选中25

Columns("A:A").Select   ‘选中A

Columns("E:B").Select   ‘选中EB

三、   设置活动单元格

Range("<单元格地址>").Activate

注:设置活动单元格 选中单元格类似,不同之处就是
后者在选中指定的单元格之前会将在此前已被选中的单元格取消掉。
前者在设置之前不会取消已选中的单元格,

如果此时操作的单元格不是被选中的单元格,这时他实现的功能与选一个单元格相同。

四、   给活动的单元格赋值

ActiveCell.FormulaR1C1 = <>

例:Range("A1").Select

ActiveCell.FormulaR1C1 = "Name"

Range("B1").Select

ActiveCell.FormulaR1C1 = "Age"

Range("A2:B3").Select

Range("A2").Activate

ActiveCell.FormulaR1C1 = " BUG"

Range("B2").Activate

ActiveCell.FormulaR1C1 = "12"

Range("A3").Activate

ActiveCell.FormulaR1C1 = "Archer"

Range("B3").Activate

ActiveCell.FormulaR1C1 = "37"

五、   得到指定单元格中的值

Range("<单元格地址>").Text

六、   插入单元格

Selection.Insert Shift:=<XlDirection>

Selection.EntireRow.Insert

Selection.EntireColumn.Insert

例:Selection.Insert Shift:=xlToRight   ‘在当前选中单元格的位置插入单元格并将当前选中的单元格向右移动

Selection.Insert Shift:=xlDown   ‘在当前选中单元格的位置插入单元格并将当前选中的单元格向下移动

Selection.EntireRow.Insert   ‘在当前选中单元格的上面插入一行

Selection.EntireColumn.Insert   ‘在当前选中单元格的左侧插入一列

七、   设置字体属性

1.       设置字体名称和大小

Selection.Font.Name = <字体名称>

Selection.Font.Size = <字号>

例:Selection.Font.Name = "隶书"

Selection.Font.Size = 15

2.     设置字体样式

Selection.Font.Bold = <True / False>   ‘加粗

Selection.Font.Italic = <True / False>   ‘斜体

Selection.Font.Underline = < XlUnderlineStyle(下划线样式)>   ‘下划线

XlUnderlineStyle(下划线样式):

xlUnderlineStyleDouble   ‘双下划线

xlUnderlineStyleDoubleAccounting   ‘会计用双下划线(如果当前单元格中的数据是数字时则下划线的宽度是当前单元格的宽度)

xlUnderlineStyleNone   没有下划线

xlUnderlineStyleSingle   ‘单下划线

xlUnderlineStyleSingleAccounting   ‘会计用单下划线(如果当前单元格中的数据是数字时则下划线的宽度是当前单元格的宽度)

3.     设置字体的颜色

Selection.Font.ColorIndex = <056之间的数字>

Selection.Font.Color = <RGB>

4.     设置字体的特殊效果

Selection.Font.Strikethrough = <True / False>   ‘删除线

Selection.Font.Superscript = <True / False>   ‘上标

Selection.Font.Subscript = <True / False>   ‘下标

八、   清空选中单元格里的内容

Selection.ClearContents

例:Range(“A1:A2,B7,2:2”).Select   ‘选中“A1”“A2”“B7”五个不连续的单元格和第二行

Selection.ClearContents   ‘清空“A1”“A2”“B7”五个不连续单元格中的所有内容

九、   设置选中单元格的边线属性

XlBordersIndex(边线):

xlEdgeLeft   '单元格左边线

xlEdgeTop   ‘单元格上边线

xlEdgeRight   ‘单元格右边线

xlEdgeBottom   ‘单元格下边线

xlDiagonalDown   ‘单元格左上右下斜线

xlDiagonalUp   ‘单元格左上右下斜线

xlInsideVertical   ‘多个单元格内垂直线

xlInsideHorizontal   ‘多个单元格内水平线

1.       设置边线的类型

Selection.Borders(<边线>).LineStyle = < XlLineStyle(边线类型)>

XlLineStyle(边线类型):

xlLineStyleNone   ‘无样式

xlContinuous   ‘单线

xlDash   ‘破折号线(间隔线)

xlDashDot   ‘破折号 点线

xlDashDotDot   ‘破折号 点线

xlDot   ‘点线

xlDouble   ‘双横线

xlSlantDashDot   ‘斜点线

2.     设置边线的宽度

Selection.Borders(<边线>).Weight = <XlBorderWeight(边线的宽度值)>

XlBorderWeight(宽度值):

xlHairline   ‘极细

xlThin   ‘

xlMedium   ‘中等

xlThick   ‘

3.     设置边线的颜色

Selection.Borders(xlEdgeLeft).ColorIndex = <056之间的数字>

Selection.Borders(xlEdgeLeft).Color = <RGB>

十、   删除选中的单元格

Selection.Delete <XlDirection>

Selection.EntireRow.Delete

Selection.EntireColumn.Delete

例:Selection.Delete Shift:=xlToLeft   ‘删除选中的单元格,并将已删除单元格所在位置右面的单元格向左移动

Selection.Delete Shift:=xlUp   ‘删除选中的单元格,并将已删除单元格所在位置下面的单元格向上移动

Selection.EntireRow.Delete   ‘删除选中单元格所在的行

Selection.EntireColumn.Delete   ‘删除选中单元格所在的列

十一、设置单元格背景色及图案

1.       背景色

Selection.Interior.ColorIndex = <056之间的数字>

Selection.Interior.Color = <RGB>

2.     图案样式

Selection.Interior.Pattern = <Constants(图案样式)>

Constants(图案样式):

xlSolid   '实心      

xlGray75   '75% 灰色      

xlGray50   '50% 灰色      

xlGray25   '25% 灰色      

xlGray16   '12.5% 灰色      

xlGray8   '6.25% 灰色      

xlHorizontal   '水平 条纹      

xlVertical   '垂直 条纹      

xlDown   '逆对角线 条纹      

xlUp   '对角线 条纹      

xlChecker   '对角线 剖面线      

xlSemiGray75   ' 对角线 剖面线      

xlLightHorizontal   ' 水平 条纹      

xlLightVertical   ' 垂直 条纹      

xlLightDown   ' 逆对角线 条纹      

xlLightUp   ' 对角线 条纹      

xlGrid   ' 水平 剖面线      

xlCrissCross   ' 对角线 剖面线      

3.     图案颜色

Selection.Interior.PatternColorIndex = <056之间的数字>

Selection.Interior.PatternColor = <RGB>

十二、返回工作表中的行数

Sheet1.UsedRange.Rows.Count   ‘返回从最小已输入内容的行号到最大已输入内容的行号之间的行数

Sheet1.UsedRange.Rows(Sheet1.UsedRange.Rows.Count).Row   ‘最大已输入内容的行号

十三、得到当前EXCEL的文件名

ThisWorkbook.Path   ‘文件路径

ThisWorkbook.Name   ‘文件名

ThisWorkbook.FullName   ‘全路径

十四、批注的操作

1.       添加批注

AddComment([Content])

例:Range("A1").AddComment ("Writes the content in here!")

2.     修改批注内容

Comment.Text

例:Range("B1").Comment.Text Text:= "Writes the content in here!"

3.     显示/隐藏批注

Comment.Visible = <True/False>

4.     删除批注

ClearComments

例:Selection.Range("B1").ClearComments

5.     选中批注

Comment.Shape.Select True

例:Range("D8").Comment.Shape.Select True

6.     改变批注大小和位置

Selection.ShapeRange.ScaleWidth <宽度比例>, msoFalse, <MsoScaleFrom>

Selection.ShapeRange.ScaleHeight <高度比例>, msoFalse, <MsoScaleFrom>

例:Selection.ShapeRange.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft   ‘每次增加5%的宽度

Selection.ShapeRange.ScaleHeight 0.6, msoFalse, msoScaleFromTopLeft   ‘每次减少6%的宽度

Selection.ShapeRange.Left = <左边距>

Selection.ShapeRange.Top = <上边距>

Selection.ShapeRange.Width = <宽度值>

Selection.ShapeRange.Height = <高度值>

十五、剪切、复制、粘贴

Selection.Cut   ‘剪切

Selection.Copy   ‘复制

ActiveSheet.Paste   ‘粘贴

例:

​​​​​​​Range("A1").Select
Selection.Cut
Range("A2").Select
ActiveSheet.Paste
Selection.Copy
Range("A3").Select
ActiveSheet.Paste

十六、选择性粘贴

Selection.PasteSpecial <option>

十七、改变列宽

Selection.ColumnWidth = <宽度值>   ‘指定列宽

例:Columns("A:A").Select

Selection.ColumnWidth = 30   ‘改变已选列的宽度

EntireColumn.AutoFit   ‘自动改变列宽

例:Columns("C:C").EntireColumn.AutoFit   ‘根据C列的内容自动改变列的宽度

Excel 97中,""是一个难以理解的概念,但对于一个具体的""而言,却是容易理解的,如果说"将一块文字变为注释:黑体注释:,字号为注释:三号注释:"就可以看作一个""的话,那么""就不难理解了,其实Excel 97中的许多操作都可以是一个""
  "记录宏"其实就是将工作的一系列操作结果录制下来,并命名存储(相当于VB中一个子程序)。在Excel 97中,"记录宏"仅记录操作结果,而不记录操作过程。例如,改变文字字体时,需要打开"字体"栏中的下拉列表,再选择一种字体,这时文字即变为所选择的字体,这是一个过程,结果是将所选择的文字改变为所选择的字体。而"记录宏"则只记录"将所选择的文字改变为所选择的字体"这一结果。

  Excel 97中工作表是由行和列组成的二维表格,我们可以通过系统提供的语句activesheet.cells(I,j),将当前工作表中的第I行第j列所在的单元格中的数据取出(也可将它数据填入到指定的单元格中),然后反把它放入所定义的数组中,这时就可以对其进行各种操作,如求平均分、总分、分数段人数等等。

  本人就利用Excel 97中所提供的宏功能来做学生成绩的分析处理程序。本程序是Excel中的一个文件,其中包含以下几个宏:分班、总分、平均分、分数段、删除等。

  说明:本程序是以本校高三理科班学生成绩进行分析。

     有关程序中用到的几具宏的功能说明:

  分班:针对于难以确定班级的情况下,以班为单位进行分班,本宏可以作为高一新生入学时进行分班的功能。

  总分:对原始的成绩自动求总分。

  平均分:对原始的成绩以班为单位进行各学科平均成绩的计算及全校各学科成绩的计算。

  分数段:给定一个最高分数及最低分数,然后统计出各班各个分数段的人数,各分数段人数进行累计。

  删除:用于删除不用的工作表。

  现将各个宏的代码列举如下:

  分班   

Sub 分班()

   Const studentno = 191 '注释:学生人数
   Const zdno = 12 '注释:字段数
   Dim zd$(zdno) ' 注释:定义为12个字段的数组
   Dim a(studentno, zdno), stu(60, zdno)
   Dim nam$(studentno), bjname$(60) '注释:定义一个存放全校学生名字及各班学生名字的数组
   Dim bj(studentno) '注释:定义存放班级的一个数组 注释:    理科班工作表
   Sheets("高三理").Select
   For i = 2 To studentno
     bj(i) = ActiveSheet.Cells(i, 1)
     nam$(i) = ActiveSheet.Cells(i, 2)
     For j = 3 To zdno
       a(i, j) = ActiveSheet.Cells(i, j)
     Next j
   Next i
'注释:    存放字段到数组中?
   For i = 1 To zdno
     zd$(i) = ActiveSheet.Cells(1, i)
   Next i
'注释:    先建立各个班级的工作表
   Sheets("高三理").Select
   Sheets("高三理").Copy After:=Sheets("高三理")
   Sheets("高三理 (2)").Select
   Sheets("高三理 (2)").Name = "33"
   For i = 2 To studentno
     For j = 1 To zdno
       ActiveSheet.Cells(i, j) = Space$(1)
     Next j
   Next i
   Range("a1").Select
   For i = 1 To zdno
     ActiveSheet.Cells(1, i) = zd$(i)
   Next i
   '注释:34到36班工作表的建立
   For i = 34 To 36
     x$ = Mid$(Str(33), 2)
     Sheets(x$).Select
     Sheets(x$).Copy After:=Sheets("高三理")
     Sheets(x$ & " (2)").Select
     Sheets(x$ & " (2)").Name = Mid$(Str(i), 2)
   Next i
'注释:    具体分班?
   For k = 33 To 36
     bjrs = 0
     x$ = Mid$(Str(k), 2)
     no = k Mod 10
     Sheets(x$).Select
     For i = 2 To studentno
       If bj(i) = no Then
         bjrs = bjrs + 1
         bjname$(bjrs) = nam$(i)
         For j = 3 To zdno
           stu(bjrs, j) = a(i, j)
         Next j
       End If
     Next i
     For i = 2 To bjrs
       ActiveSheet.Cells(i, 1) = no
       ActiveSheet.Cells(i, 2) = bjname$(i)
       For j = 3 To zdno
         ActiveSheet.Cells(i, j) = stu(i, j)
       Next j
     Next i
   Next k
End Sub

  ⑵总分

 Sub 总分()

Const studentno = 191
   Const xknum = 6
   Const zdnum = 12
   Sheets("高三理").Select
   For i = 2 To studentno
     Sum = 0
     For j = 1 To xknum
       Sum = Sum + ActiveSheet.Cells(i, j + 2)
     Next j
     ActiveSheet.Cells(i, zdnum - 3) = Sum
   Next i
End Sub


  ⑶平均分

Sub 平均分()
  Const studentno = 190
  Const xknum = 6
  Dim fs(studentno, xknum), pjf3(4, 6), bjrs(4), qxpjf(6)
  Dim bj(studentno)
  Sheets("高三理").Select
  注释:以下程序段用于求全校平均分
  For i = 1 To studentno
   bj(i) = ActiveSheet.Cells(i 1, 1)
   For j = 1 To xknum
    fs(i, j) = ActiveSheet.Cells(i 1, j 3)
   Next j
  Next i
  For i = 1 To xknum
   Sum = 0
   For j = 1 To studentno
    Sum = Sum fs(j, i)
   Next j
   qxpjf(i) = Sum / (j - 1)
  Next i
  注释:以下程序段用于求各班平均分
  For j = 1 To 4
   For i = 1 To studentno
    If bj(i) = j 2 Then
     bjrs(j) = bjrs(j) 1
     For k = 1 To xknum
      pjf3(j, k) = pjf3(j, k) fs(i, k)
     Next k
    End If
   Next i
  Next j
  For j = 1 To 4
   For i = 1 To 6
    pjf3(j, i) = pjf3(j, i) / bjrs(j)
   Next i
  Next j
  注释:写入各班各科平均分
  Sheets("平均分").Select
  For i = 1 To 4
   For j = 1 To 6
    ActiveSheet.Cells(i 2, j 1) = pjf3(i, j)
   Next j
  Next i
  注释:写入全校各科平均分
  i = 7
  For j = 1 To 6
   ActiveSheet.Cells(i, j 1) = qxpjf(j)
  Next j
End Sub

⑷分数段

Sub 分数段()
  Const max = 600
  Const min = 390
  Const studentno = 190
  Const bjnum = 4
  Const fsdnum = 22
  Dim bjfsd(bjnum, fsdnum), zf(studentno, 2)
  Sheets("高三理").Select
  For i = 1 To studentno
   zf(i, 1) = ActiveSheet.Cells(i 1, 1) 注释:存放班级
   zf(i, 2) = ActiveSheet.Cells(i 1, 11) 注释:存放总分
  Next i

 For i = 1 To studentno
   For j = 1 To 4 注释:3---6班共4个班级
    If zf(i, 1) = j 2 Then
     For k = max To min Step -10
      low = Int((max 10 - k) / 10)
      If zf(i, 2) > k Then bjfsd(j, low) = bjfsd(j, low) 1
     Next k
    End If
   Next j
  Next i
  Sheets("sheet3").Select
  For i = 3 To 6
   For k = 1 To fsdnum
    ActiveSheet.Cells(i, k 1) = bjfsd(i - 2, k)
   Next k
  Next i
  Range("M3:W6").Select
  Selection.Cut
  ActiveWindow.LargeScroll ToRight:=-1
  Range("B8").Select
  ActiveSheet.Paste
End Sub

  ⑸ 删除

Sub 删除()
   Sheets("33").Select
   ActiveWindow.SelectedSheets.Delete
   Sheets("34").Select
   ActiveWindow.SelectedSheets.Delete
   Sheets("35").Select
   ActiveWindow.SelectedSheets.Delete
   Sheets("36").Select
   ActiveWindow.SelectedSheets.Delete
End Sub

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐