Jovan Jiang VBA学习笔记

做减法代码示例:

Sub 做减法()

        x = Cells(8, 4)                                                  //x是变量,替换后可以进行任何计算

        Cells(x, 7) = "-"                                               //cells(x,y)函数,x代表行号,y代表列号

        Cells(x, 11) = Cells(x, 6) - Cells(x, 8)

End Sub


Sub 做加法()

        x = Cells(8, 4)

        Cells(x, 7) = "+"

        Cells(x, 11) = Cells(x, 6) + Cells(x, 8)

End Sub


计算圆面积和球体体积的示例:


Sub 计算指定半径的圆形的面积和体积()

        r = Cells(2, 1)

        S = 3.14 * r * r

        Cells(2, 2) = S

        V = 4 / 3 * 3.14 * r * r * r

        Cells(2, 3) = V

End Sub



添加强制声明和常量

强制声明

Option Explicit  //必须写在一个模块的第一行,在所有Sub.....End Sub的前面

Sub 计算指定半径的圆形的面积和体积()

    Dim r, S, V

    Const Pi = 3.1415926          //Const 是常量声明的关键字,一旦声明永远不可修改!

    r = Cells(2, 1)

    S = Pi * r * r

    Cells(2, 2) = S

    V = 4 / 3 * Pi * r * r * r

    Cells(2, 3) = V

End Sub


循环结构

Sub 计算美元价格()

        Dim rate, i

        For  i = 5  To  21  Step 1

            rate = Cells(2, 3)

            Cells(i, 3) = Cells(i, 2) / rate

        Next i

End Sub

规范代码正确使用Tab键显示从属关系

Sub 计算日元价格()

        Dim rate, i

         For i = 21 To 5 Step -1

              rate = Cells(2, 4)

              Cells(i, 4) = Cells(i, 2) * rate

        Next i

End Sub


If语句的初步使用

Option Explicit

Sub evaluate()

        Dim score

        score = (Cells(3, 3) + Cells(4, 3) + Cells(5, 3)) / 3

        Cells(6, 3) = score

           If score >= 60 Then

                Cells(7, 3) = "及格"

            Else

                Cells(7, 3) = "不及格"

            End If

End Sub

嵌套if


Jovan Jiang VBA学习笔记_第1张图片

Sub evaluate多个分支()

        Dim score

        score = (Cells(3, 3) + Cells(4, 3) + Cells(5, 3)) / 3

        Cells(6, 3) = score

        If score > 75 Then

            If score > 85 Then

                Cells(7, 3) = "A"

               Else

               Cells(7, 3) = "B"

                 End If

        Else

        If score > 60 Then

            Cells(7, 3) = "C"

        Else

            Cells(7, 3) = "D"

        End If

  End If

End Sub


Elseif多个条件分支判断(else和if之间没有空格,记得写End if)

Sub evaluate_elseif()

        Dim score

        score = (Cells(3, 3) + Cells(4, 3) + Cells(5, 3)) / 3

        Cells(6, 3) = score

        If score >= 85 Then

            Cells(7, 3) = "A"

        ElseIf score >= 75 Then

             Cells(7, 3) = "B"

        ElseIf score >= 60 Then

            Cells(7, 3) = "C"

        ElseIf score < 60 Then

            Cells(7, 3) = "D"

        End If

End Sub

注意:

1、elseif是个整体不能有空格

2、注意条件的逻辑关系,顺序很重要

3、不等于在VBA中是 <>

 

代码调试


Jovan Jiang VBA学习笔记_第2张图片


字符串要注意的问题

]一、[endif]必须用双引号括起来,有双引号可以避免字段被误认为是变量

二、[endif]字符串中可以包括常见的特殊字符,如:空格符、换行符等。

三、[endif]空串(“”):没有字符,空格有一个空格字符

四、[endif]字符串中大小写是不同的

五、[endif]字符串连接用&,两边必须要留空格

录制宏

计算机可以根据我们的操作,录制相应的宏,自动生成相应的代码

Option Explicit

Sub 整理会员卡()

        Dim i

        For i = 27 To 2 Step -1

         //在执行删除操作时,顺序操作会导致数据整行前移导致个别行数据未经处理就前移,倒序操作可以有效的应对这个问题

                If Cells(i, 3) = "注销" Then

                    Rows(i & ":" & i).Select

                    Selection.Delete Shift:=xlUp

               ElseIf Cells(i, 4) < 0 Then

                    Cells(i, 4).Select

                    With Selection.Font

                    .Color = -16776961

            .        TintAndShade = 0

                      End With

                End If

            Next i

End Sub


DO While……LOOP

Option Explicit

Sub Aveage()

    Dim i, total, count

    i = 2

    total = 0

    count = 0

    Do While Cells(i, 1) <> "" Or Cells(i, 2) <> ""

        total = total + Cells(i, 2)

        count = count + 1

        i = i + 1 //注意循环变化条件

    Loop

    If count > 0 Then

        Cells(20, 1) = total / count

    End If

End Sub


While……Wend

Option Explicit

Sub mark_Red()

    Dim i

    i = 2

    While Cells(i, 2) <> ""

        If Cells(i, 2) < 300 Then

            Cells(i, 2).Select

        With Selection.Font

            .Color = -16776961

            .TintAndShade = 0

        End With

        End If

        i = i + 1

    Wend

End Sub


面向对象的理解


Jovan Jiang VBA学习笔记_第3张图片

简单讲就是把我们在编程时所涉及的元素,按照不同的属性进行分类,然后抽象出一个共有的模板,这个模板就是类,然后按照我们的实际需要创建一个一个具体的对象,类似于我们做PPT的时候用模板做PPT就可以比从头做PPT快的多。


Excle中的类:

Application 应用类,代表正在运行的Excel系统本身

WorkBook 工作簿,代表一个打开的Excle文件

Worksheet 代表一张工作表

Range 代表一个或若干个单元格组成的内容区域


Jovan Jiang VBA学习笔记_第4张图片

Sub sheet()

    Dim s1 As Worksheet //在VBA中给对象赋值时必须加上set,不然就会报错

    Set s1 = Worksheets(2)

    s1.Cells(8, 6) = 500

End Sub


添加工作表并将设置指定单元格的值

Option Explicit

Sub sheet_add()

        Dim w1 As Worksheet

        Set w1 = Worksheets.Add

        w1.Cells(8, 8) = 888

End Sub


多表求和

Option Explicit

Sub sum_grade()

    Dim i, j, sum

    Dim w1 As Worksheet

    For i = 1 To Worksheets.Count

        Set w1 = Worksheets(i)

         sum = 0

          For j = 2 To 6 Step 1

                    sum = sum + w1.Cells(j, 2)                        //这里如果没有对象归属就会只计算一张表

            Next j

            w1.Cells(2, 3) = sum

    Next i

End Sub


多表信息提取

Sub extra_grade()

        Dim w1 As Worksheet

        Dim w2 As Worksheet

        Dim i

        i = 1

For i = 1 To 3

    Set w1 = Worksheets(i)

    Set w2 = Worksheets(4)

    w2.Cells(i, 1) = w1.Cells(1, 2)

    w2.Cells(i, 2) = w1.Cells(2, 3)

Next i

End Sub


注意:

1、当表移动位置时,用位置确定表很容易出错,可以使用表的名称确定,如Set w2 = Worksheets("总分榜"),用双引号引起

2、子过程无法返回结果,函数可以返回结果。


函数

1、过程的一种,在执行结束后能将运行结果返回给调用者。

2、不同过程中定义的变量,即使同名也互相无关


Option Explicit

Sub 暴力分类() //主函数

        Dim i, score, level

        i = 3

        Do While Cells(i, 2) <> ""

                score = Cells(i, 2)

                    level = 客户分类(score)    

//主函数负责传递调用函数所需的参数,同时接收调用 函数计算的结果

                    Cells(i, 3) = level

                    i = i + 1

    Loop

End Sub


Function客户分类(s) //被调用的函数

Dim score, level

        score = s

        If score < 30 Then

                level = "温柔型"

        ElseIf score < 60 Then

                level = "冲动型"

        ElseIf score < 90 Then

                level = "暴躁型"

        ElseIf score < 100 Then

            level = "狂暴型"

        End If

        客户分类= level              //将返回值返回给主函数

End Function


参数传递的演示示例

Sub 参数演示()

        Dim a, b, j

        a = Cells(14, 2)

        b = Cells(14, 3)

        j = 求积(5, 3)

        Cells(14, 4) = j

End Sub


Function 求积(w1, w2)

        Dim j

         j = w1 * w2

        求积= j

End Function


系统函数


Jovan Jiang VBA学习笔记_第5张图片


Jovan Jiang VBA学习笔记_第6张图片



Jovan Jiang VBA学习笔记_第7张图片


Option Explicit

Sub 字符串函数示例01()

    Dim a, s

    s = "   大家好abc   "

    a = Len(s)

    MsgBox a

End Sub


Sub 字符串函数示例02()

    Dim a, s

    s = "   大家好abc   "

    a = Trim(s) '删除两边空格的函数

    MsgBox a

End Sub


Sub 字符串函数示例03()

    Dim a, s

    s = "   大家好abc   "

    a = Replace(s, " ", "") '替换空格的函数

    MsgBox a

End Sub


Sub 字符串函数示例04()

    Dim a, s

    s = "   大家好abc   "

    a = Mid(s, 5, 4) '从中间抽子串

    MsgBox a

End Sub


打开工作簿

Option Explicit

Sub 打开指定工作簿()

        Dim wb As Workbook      '定义一个workbook类对象的变量wb

        Set wb = Workbooks.Open("C:\Users\Jovan_Jiang\Desktop\绩效评价数据表\海西州绩效评价报告生成数据表.xlsx")

        wb.Worksheets(1).Cells(8, 2) = 8888

End Sub


工作簿相关的函数


Jovan Jiang VBA学习笔记_第8张图片

Range对象的使用

Sub Range_对象示例()

        Dim r As Range

        Set r = Range("A3")                     'A3单元格

        Set r = Range("A3:B7")

        Set r = Range("A3:B7,D6,A2:F4")         '两个范围+D6单元格

        Set r = Range(Cells(2, 3), Cells(8, 8))  '以两个单元格为对角定点,形成的范围

        r.Value = 5   //所有r的范围内的单元格均被赋值为5

        r.ClearContents //清除单元格的所有内容

        r.Font.Size = 25

        r.Font.Color = RGB(255, 0, 0)           'RGB编码颜色

        r.Font.Bold = True                      '是否加粗

        r.Font.Italic = True                      '是否斜体

        r.Interior.Color = RGB(255, 255, 0)     '单元格内部高亮显示为黄色

        r.ClearFormats                          '清除所有格式

 End Sub


Jovan Jiang VBA学习笔记_第9张图片


合并和拆分单元格


Jovan Jiang VBA学习笔记_第10张图片


With......Endwith可以省略重复的前缀

Sub Range_对象示例()

        Dim r As Range

        Set r = Range("C3:F8")

        r.Value = 100

        With r.Font

        Color = RGB(255, 0, 0)           'RGB编码颜色

        .Bold = True                              '是否加粗

    .    Italic = True                               '是否斜体

        .Color = RGB(255, 255, 255)     '单元格内部高亮显示为黄色

          End With

End Sub


Application


Jovan Jiang VBA学习笔记_第11张图片

Sub 活动工作簿示例()

        Dim w2 As Workbook, w1 As Workbook

        Set w1 = Application.ActiveWorkbook   //当前的工作簿

        Set w2 = Workbooks.Add //新增的工作簿

        w2.Worksheets(1).Cells(5, 5) = "我是新打开的工作簿"

        w1.Worksheets(1).Cells(10, 3) = "我是之前的工作簿"

End Sub


用application快速求最值

传统的方法

Sub application求最值()

        Dim r As Range, m As Integer

        m = 0

    For Each r In Range("B2:D7")  //可以学习一下for each 循环

        If r.Value > m Then

        m = r.Value

        End If

    Next r

    Cells(10, 4) = m

End Sub


采用Application的方法


Jovan Jiang VBA学习笔记_第12张图片


Jovan Jiang VBA学习笔记_第13张图片

Sub application求最值02()

        Dim r As Range, m As Integer

        m = Application.WorksheetFunction.Max(Range("B2,B7"))    

        //在VBA中写公式的时候注意

        Cells(10, 4) = m

End Sub


ApplicationDisPlayAlerts的用法

Sub 活动工作簿示例()

        Dim w2 As Workbook, w1 As Workbook

        Set w1 = Application.ActiveWorkbook

        Set w2 = Workbooks.Add

        w2.Worksheets(1).Cells(5, 5) = "我是新打开的工作簿"

        w1.Worksheets(1).Cells(10, 3) = "我是之前的工作簿"

        Application.DisplayAlerts = False

         '将该文件保存在本工作簿所在文件夹下

        w2.SaveAs ("数据")

        w2.clese

End Sub


退出方法


Jovan Jiang VBA学习笔记_第14张图片



规则明确,机械重复的活动均可以用VBA等代码替代


总结

VBA的两大内容 程序设计

变量常量

 循环

1、for......next     适用条件:知道循环终止条件

2、Do while......Loop 适用条件:不知道循环终止条件切记循环变化条件i=i+1

3、For each  in 集合......next (集合中已经包含元素的个数)

判断

        If  条件语句 then         //切记elseif不能有空格

        Elseif ...

        Elseif...

         End   if 

        常用的逻辑词And、or、not

字符串


Jovan Jiang VBA学习笔记_第15张图片

过程

Sub......end sub        

//子过程(没有返回值,但是可以让代码更清晰)


Function......end function  

//函数(有返回值,有参数,还可以当公式用很方便)

 

VBA的两大内容 对象结构

类    对象    方法    属性


Jovan Jiang VBA学习笔记_第16张图片

编程习惯和辅助工具


Jovan Jiang VBA学习笔记_第17张图片


全民一起VBA基础篇(Excel数据处理)杨洋老师授课

https://study.163.com/course/courseMain.htm?courseId=1003088001


Jovan Jiang VBA学习笔记_第18张图片
 想要了解更多内容,请扫码添加我的个人订阅号: Jovan Jiang


 

 

 

你可能感兴趣的:(Jovan Jiang VBA学习笔记)