VBA基础知识整理[通俗易懂]

VBA基础知识整理[通俗易懂]最近由于项目的需要,需要在Excel自定义一些函数,来完成特殊的处理,为了完成工作,就囫囵吞枣的写了一些代码,现在闲暇下来,就好好的学习一下,VBA的基础知识。1.变量1.Dim<>As<>2.规则变量名称必须使用一个字母作为第一个字符。变量名称不能使用空格,句点(.),感叹号(

大家好,又见面了,我是你们的朋友全栈君。

    最近由于项目的需要,需要在Excel自定义一些函数,来完成特殊的处理,为了完成工作,就囫囵吞枣的写了一些代码,现在闲暇下来,就好好的学习一下,VBA的基础知识。

1.变量
    1.Dim <<variable_name>> As <<variable_type>>
    2.规则
        变量名称必须使用一个字母作为第一个字符。
        变量名称不能使用空格,句点(.),感叹号(!)或字符@,&,$,#。
        变量名称的长度不能超过255个字符。
        不能使用Visual Basic保留关键字作为变量名称。
    3. 
        Sub var()
            Dim str As String
            str = "string"
            MsgBox (str)
        End Sub
2.常量
    1.Const <<constant_name>> As <<constant_type>> = <<constant_value>>
    2.规则
        常量名称必须使用一个字母作为第一个字符。
        常量名称不能在名称中使用空格,句点(.),感叹号(!)或字符@,&,$,#。
        常量名称的长度不能超过255个字符。
        不能使用Visual Basic保留关键字作为常量名称。
    3.
        Sub const_var()
            Const MyInteger As Integer = 720
            MsgBox (MyInteger)
        End Sub
3.数组
    1.数组声明的方式与声明变量相同,只是数组变量的声明使用括号
    2.规则
        若数组大小被指定为5,但是当数组索引从零开始时,它可以保持6个值
        数组索引不能是负数
        可以在一个数组变量中存储一个整数,字符串或字符。
    2.数组声明
        定义
            1. Dim arr1()  
            2. Dim arr2(5)
            3. arr3 = Array("apple","Orange","Grapes")
        赋值
            Dim arr(5)
            arr(0) = "1"
            arr(2) = 100 
            arr(3) = 2.45
            arr(4) = #10/07/2013#   ’日期
            arr(5) = #12.45 PM#  '时间
    3.多维数组
        定义
            1. Dim arr(2,3)
        赋值
            arr(0,0) = "Apple" 
            arr(0,1) = "Orange"
            arr(1,0) = "cucumber"
    4.数组方法
        LBound(ArrayName[,dimension])
            '返回指定数组的最小下标,数组的LBound的结果是零。
            MsgBox ("Line 1 : " & LBound(Array(5, 2, 3)))
        UBound(ArrayName[,dimension])
            '返回指定数组的最大下标。
            MsgBox ("Line 1 : " & UBound(Array(5, 2, 3)))
        Split(expression[,delimiter[,count[,compare]]])
            '返回一个数组,其中包含基于分隔符分割的特定数量的值。
            Split("Red $ Blue $ Yellow","$")
        Join(List[,delimiter])
            '返回一个包含数组中指定数量的子串的字符串
            MsgBox ("Line 1" & " is :" & Join(Array("Red", "Blue", "Yellow"), "---"))
        Filter(inputstrings,value[,include[,compare]])
            '函数返回一个基于零的数组,其中包含基于特定过滤条件的字符串数组的子集。
        IsArray(variablename)
            '返回一个布尔值,指示指定的输入变量是否是数组变量
            msgbox("Line 1 : " & IsArray(Array(1,2,3)))
            msgbox("Line 1 : " & IsArray("sdfadd"))

4.ReDim语句
    ’用于声明动态数组变量并分配或重新分配存储空间
    ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
    Sub Constant_demo_Click()
       Dim a() as variant
       i = 0
       redim a(5)
       a(0) = "XYZ"
       a(1) = 41.25
       a(2) = 22

       REDIM PRESERVE a(7)
       For i = 3 to 7
       a(i) = i
       Next

       'to Fetch the output
       For i = 0 to ubound(a)
          Msgbox a(i)
       Next
    End Sub

5.运算符
    1.算术操作符
        + : 两个操作数相加
        - : 两个操作数相减
        * : 两个操作数相乘
        / : 两个操作数相除
        % : 模运算符,整数除法后的余数
        ^ : 指数运算符
    2.比较运算符
        = : 检查两个操作数的值是否相等。如果是,那么条件是真。   
        <> : 检查两个操作数的值是否不相等。如果值不相等,则条件为真。   
        > : 检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。  
        < : 检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。  
        >= : 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。 
        <= : 检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。  
    3.逻辑运算符
        AND : 两个条件都为真,则表达式为真。
        OR : 如果两个条件中的任何一个为真,则条件为真。
        NOT : 用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。
        XOR : 如果表达式中只有一个表达式的值为True,则结果为True。
    4.连接操作符
        & : 连接两个值
            1 & 2 = 12
            "1" & "2" = 12
        + : 将两个值添加为变量,其值是数字
            1 + 2 = 3
            "1" + "2" = 12

6.单元格的格式方法
    1.Range
        Range("A1")  '表示A1单元格
        Range("A1:A9")    '表示A1-A9单元格
    2.[]
        [A1]    '表示A1单元格
        [A1:A9]     '表示A1到A9单元格
    3.Cells(第几行,第几列)
        Cells(1,1)   '表达第一行第一列的单元格

7.VBA对单元格的操作
    1.获取单元格的值
        Sub alert()
            'A1 = Sheets(1).[a1]    '获取第一个工作表(表名为工作表1)中A1的值赋值给X
            'A1 = Sheets("工作表1").[a1]
            'A1 = Sheets(1).Cells(1, 1)
            'A1 = Sheets("工作表1").Cells(1, 1)
            A1Range("A1").Value    '获取当前工作表A1的值
            MsgBox (A1)   '弹出对话框
        End Sub
    1.单元格赋值
        Sub setVal()
            Range("A1").Value = 100   '点击VBAProject窗口的'运行子过程'
        End Sub
    2.设置单元格的填充色
        Sub setColor()
            Range("B3").Interior.ColorIndex = 3   '值有1-56,代表56种颜色
        End Sub
    3.单元格的复制、粘贴
        Sub cut()
            Range("B3").copy Range("C3")   '将B3的值,复制到C3单元格
        End Sub
    4.单元格的剪切
        Sub cut()
            Range("A1").cut Range("B3")  '将A1的值,剪切到B3单元格
        End Sub

8.条件判断结构
    if then 语句
        Sub if_test()
            B3 = Range("B3").Value
            If B3 > 10 Then
                MsgBox ("大于10")    '弹出字符串时,必须为双引号
            ElseIf B3 < 10 Then
                MsgBox ("小于10")
            Else
                MsgBox ("aaaa")
            End If
            MsgBox (B3)
        End Sub
9.选择判断结构
    Select Case 语句
        Sub select_test()
            B3 = Range("B3").Value
            Select Case B3
            Case 1 To 10
                msg = "1到10之间"
            Case 11 To 20
                msg = "11到20之间"
            Case 21, 22
                msg = "21,22的值"
            Case Else
                msg = "其他的值"
            End Select
            MsgBox (msg)
        End Sub
10.循环结构
    for next 语句
        Sub for_test()
            For i = 1 To 10 Step 1
                If i > 5 Then    
                    Exit For    '跳出for循环
                End If
                Range("D" & i).Value = i    '循环赋值给D1-D10
            Next i
        End Sub

    for each 语句:用于为数组或集合中的每个元素
        Sub for_ecah_test()
            fruits = Array("苹果", "香蕉", "雪梨")
            For Each Item In fruits
                MsgBox (Item)
            Next
        End Sub

    do  while  loop 
        Sub do_while_loop_test()
           Do While i < 5    '在循环开始时,判断条件是否符合
              If i > 3 Then
                  MsgBox ("跳出循环")
                  Exit Do
              End If
              i = i + 1
              MsgBox ("The value of i is : " & i)
           Loop
        End Sub

        Sub do_while_loop_test()
           Do 
              If i > 3 Then
                  MsgBox ("跳出循环")
                  Exit Do
              End If
              i = i + 1
              MsgBox ("The value of i is : " & i)
           Loop While i < 5    '在循环结束时,判断条件是否符合
        End Sub

11.sub 与 function 的区别
    子过程不需要有返回一个值,而函数可能会或可能不会有返回一个值。
    子程序可以不用call关键字来调用。
    子程序总是包含在Sub和End Sub语句中。
    过程调用函数:
        Function function_test(ByVal col, ByVal start_row, ByVal end_row)
            total = 0
                For i = start_row To end_row Step 1
                    total = total + Range(col & i).Value
                Next i
            function_test = total
        End Function
        Sub call_function()
            MsgBox ("总和为:" & function_test("A", 1, 5))
        End Sub
    函数调用过程
        Sub test(name As String, age As Integer)
           MsgBox ("姓名:" & name & "年龄 :" & age)
        End Sub
        Function call_sub()
            test "aaa", 22
        End Function

12.字符串函数
    InStr([start,]string1,string2[,compare]) 
        '函数返回一个字符串第一次出现在一个字符串,从左到右搜索。返回搜索到的字符索引位置。
        MsgBox ("Line 1 : " & InStr(1, “safdfasdf”, "s")) 
    InStrRev(string1,string2[,start,[compare]])
        '函数返回一个字符串在另一个字符串中的第一次出现。搜索从右到左
        msgbox("Line 1 : " & InStrRev("asdfasdf","s",10))
    Lcase(String)
        '将字符串转换为小写字母后返回字符串
        msgbox("Line 1 : " & LCase("DJUEG"))
    UCase(String)
        '将字符串转换为大写字母后返回字符串
        msgbox("Line 1 : " & LCase("ioek"))
    Left(String, Length)
        '从字符串的左侧返回指定数量的字符
        msgbox("Line 1 : " & Left("adfasdf",2))
    Right(String, Length)
        '从字符串的右侧返回指定数量的字符
        msgbox("Line 1 : " & Right("adfasdf",2))
    Mid(String,start[,Length])
        ’返回给定输入字符串中指定数量的字符
        msgbox("Line 1 : " & Mid("adfsd",2))
    Ltrim(String)
        '删除字符串左侧的空格。
        msgbox "After Ltrim : " & LTrim("   adfasdfsd")
    RTrim(String)
        '删除字符串右侧的空格
        msgbox "After Ltrim : " & RTrim("adfasdfsd  ")
    Trim(String)
        '删除给定输入字符串的前导空格和尾随空格
        msgbox "After Ltrim : " & RTrim("   adfasdfsd  ")
    Len(String)
        '返回给定输入字符串的长度,包括空格
        msgbox("Length of var1 is : " & Len("sdf sdfsd  "))
    space(number)
        '用特定数量的空格填充字符串
        msgbox("aaa" & Space(2)& "bbb")
    StrComp(string1,string2[,compare])
        '比较两个给定字符串后,返回一个整数值。
        msgbox("Line 1 :" & StrComp("Microsoft","Microsoft"))
    Replace ( string1, find, replacement, [start, [count, [compare]]] )
        '用另一个字符串替换字符串后返回字符串。
        msgbox("Line 1 :" & Replace("alphabet", "a", "e", 1, 1))
    String(number,character)
        '使用指定的字符填充指定次数的字符串
        msgbox("Line 1 :" & String(3,"$"))
    StrReverse(string)
        '反转指定的字符串
         msgbox("Line 1 : " & StrReverse("VBSCRIPT"))

13.日期函数
    date()
        '返回当前的系统日期
        msgbox("The Value of a : " & a)
    cdate(date)
        '将有效的日期和时间表达式转换为类型日期
        MsgBox ("The Value of a : " & CDate("Jan 01 2020"))
    DateAdd(interval,number,date)
        '将有效的日期和时间表达式转换为类型日期
        msgbox("Line 1 : " &DateAdd("h",1,"01-Jan-2013 12:00:00"))
    DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
        '返回两个指定的时间间隔之间的差值。
        msgbox("Line 2 : " &DateDiff("q","01-Jan-09 00:00:00","01-Jan-10 23:59:00"))
    DatePart(interval,date[,firstdayofweek[,firstweekofyear]])
        '返回给定日期的特定部分
        msgbox("Line 4 : " & DatePart("m","2013-01-15"))
    Day(date)
        '返回1到31之间的数字,表示指定日期的一天
        msgbox(Day("2018-06-30"))
    DateSerial(year,month,day)
        '返回指定的日期,月份和年份参数的日期
        msgbox(DateSerial(2018,5,10))
    FormatDateTime(date,format)
        '格式化并返回有效的日期和时间表达式
        msgbox("Line 5 : " & FormatDateTime("2018-08-15 20:25",4))
    IsDate(expression)
        '判断是否为日期,它都会返回一个布尔值
           msgbox("Line 1 : " & IsDate("Nov 03, 1950"))
    Month(date)
        '返回1到12之间的数字,表示指定日期的月份。
        msgbox("当前的月份的值是:"&Month("2018-06-30"))
    Year(date)
        '返回一个表示指定日期的年份的整数
        msgbox(Year("2018-06-30"))
    MonthName(month[,toabbreviate])
        '回指定日期的月份名称。
        msgbox("Line 1 : " & MonthName(01,True))
        msgbox("Line 2 : " & MonthName(01,false))
    Weekday(date[,firstdayofweek])
        '返回一个从1到7的整数,表示指定日期的星期几。
        msgbox("Line 1: " & Weekday("2013-05-16",1))
    WeekdayName(weekday[,abbreviate[,firstdayofweek]])
        '返回指定日期的工作日名称
        msgbox("Line 2 : " &WeekdayName(2,True))
        msgbox("Line 3 : " &WeekdayName(1,False))
        msgbox("Line 4 : " &WeekdayName(2,True,0))
        msgbox("Line 5 : " &WeekdayName(1,False,1))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136348.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月3日 下午7:16
下一篇 2022年6月3日 下午7:36


相关推荐

  • 英伟达也要“烹龙虾”?将推智能体开源平台NemoClaw 预计下周亮相

    英伟达也要“烹龙虾”?将推智能体开源平台NemoClaw 预计下周亮相

    2026年3月15日
    2
  • 【第一篇】Vue的初次邂逅

    【第一篇】Vue的初次邂逅  因为最近需要使用到Vue,所以打算将Vue的学习资料详细整理一份,感兴趣的小伙伴可以一起来哦。一、Vue基础介绍1.什么是Vue.jsVue.js是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Weex)Vue.js是前端的主流框架之一,和Angular.js、Rea…

    2022年6月4日
    30
  • Midjourney和Discord什么关系 Midjourney如何修改图片

    Midjourney和Discord什么关系 Midjourney如何修改图片

    2026年3月15日
    3
  • 直立智能车(平衡车)毕业论文[通俗易懂]

    直立智能车(平衡车)毕业论文[通俗易懂]直立智能车设计摘要随着微电子控制技术的发展和人们对出行工具的日益增长的需求,一款简单易操作、容易携带、清洁无污染的两轮自平衡车开始走进大众的视野,但这种小型代步工具仍可能存在一定的不稳定性和安全隐患,本次课题主要通过在实验室制作一款简易的自平衡小车,通过手机蓝牙控制,以此模拟真实的使用者驾驶体验,在模拟实验中提升平衡车的稳定性,解决可能出现的实…

    2022年5月29日
    106
  • HTTP常见端口_8443端口

    HTTP常见端口_8443端口常见端口地点HTTP服务器,默认的端口号为80/tcp(木马Executor开放此端口);HTTPS(securelytransferringwebpages)服务器,默认的端口号为443/tcp443/udp;Telnet(不安全的文本传送),默认端口号为23/tcp(木马TinyTelnetServer所开放的端口);FTP,默认的端口号为21/tcp(木马DolyTro…

    2026年1月19日
    3
  • C语言scanf函数用法详细解释!

    C语言scanf函数用法详细解释!函数名 scanf nbsp 功能 执行格式化输入 nbsp 用法 intscanf char format argument scanf 函数是通用终端格式化输入函数 它从标准输入设备 键盘 读取输入的信息 可以读入任何固有类型的数据并自动把数值变换成适当的机内格式 其调用格式为 nbsp nbsp nbsp scanf lt 格式化字符串 gt lt 地址表 gt scanf 函数返

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号