VBA学习笔记1:宏、判断、循环、分支语句、函数与公式

'VBA语句
'一、宏程序语句(运行后可以弯沉一个功能)
'1. 在单元格A1中输入100
 Sub test()  '开始语句
   Range("a1") = 100
 End Sub  '结束语句

'2. 录制宏(将当前光标所选中的单元格内容复制到单元格B9中)
 Sub copy()
   Selection.Copy
   Range("B9").Select
   ActiveSheet.Paste
 End Sub

'3. 录制宏(删除单元格A1中的内容)
 Sub delete()
   Range("A1").Select
   Selection.ClearContents
 End Sub

'二、函数程序语句(运行后可以返回一个值)
 Function shcount()
   shcount = Sheets.Count
 End Function

'三、在程序中应用的语句
'1. 调用test
 Sub test2()
   Call test  '调用test语句
 End Sub

'2. 第一列的前100行等于1到100
 Sub test3() 
   For x = 1 To 100   'for next 循环语句
     Cells(x, 1) = x
   Next x
 End Sub


'变量的存活周期
'1. 过程级变量:过程结束,变量值释放
'2. 模块级变量:变量的值只在本模块中保持,工作簿关闭时随时释放
'3. 全局级变量: 在所有的模块中都可以调用,值会保存到EXCEL关闭时才会被释放。
 
'变量的释放
'1. 一般情况下,过程级变量在过程运行结束后就会自动从内存中释放
'2. 只有一些从外部借用的对象变量才需要使用set 变量=nothing进行释放。


'VBA对象
'VBA中的对象其实就是我们操作的具有方法、属性的excel中支持的对象

'Excel中的几个常用对象表示方法
 '1、工作簿
     ' Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已打开的第N个工作簿
     ' Workbooks ("工作簿名称")
     ' ActiveWorkbook 正在操作的工作簿
     ' ThisWorkBook '代码所在的工作簿
 '2、工作表
     'Sheets("工作表名称")
     'Sheet1 表示第一个插入的工作表,Sheet2表示第二个插入的工作表....
     'Sheets(n) 表示按排列顺序,第n个工作表
     'ActiveSheet 表示活动工作表,光标所在工作表
     'worksheet 也表示工作表,但不包括图表工作表、宏工作表等。
  '3、单元格
     'cells 所有单元格
     'Range ("单元格地址")
     'Cells(行数,列数)
     'Activecell 正在选中或编辑的单元格
     'Selection 正被选中或选取的单元格或单元格区域


'VBA属性
'VBA属性就是VBA对象所具有的特点
'表示某个对象的属性的方法是: 对象.属性=属性值
'1. 单元格A1的值等于100
 Sub ttt()
   Range("a1").Value = 100  '单元格的值
 End Sub
'或者:
 Sub ttt()
   Dim rg As Range  '定义Range对象rg
   Set rg = Range("a1")
   rg = 100
 End Sub

'2. 将第一个工作表改为“工作表1”
 Sub ttt1()
   Sheets(1).Name = "工作表1"  '工作表的名称
 End Sub

'3. 将工作表sheet2中单元格A1的值改为“abcd”
 Sub ttt2()
   Sheets("Sheet2").Range("a1").Value = "abcd"  '工作表中单元格的值
 End Sub

'4. 将单元格A2填充为红色
 Sub ttt3()
   Range("A2").Interior.ColorIndex = 3  '单元格的内部填充色
 End Sub


'VBA方法
'VBA方法是作用于VBA对象上的动作
'表示用某个方法作用于VBA的对象上,可以用下面的格式:
'1. 将单元格A1的值复制到A2
 Sub ttt4()
   Range("A1").Copy Destination:= Range("A2")  'Destination:=可以省略
 End Sub

'2. 将sheet2放在sheet1后面  
 Sub ttt5()
   Sheet1.Move before:=Sheets("Sheet2")
 End Sub


'判断语句
'一、IF判断
'1. 判断单元格A1的值,若大于0则单元格B1的值为“正数”,否则为“负数或0”
 Sub judge1()  '单条件判断
   If Range("a1").Value > 0 Then
     Range("b1") = "正数"
   Else
     Range("b1") = "负数或0"
   End If
 End Sub

'2. 若单元格A1的值大于0则B1的值为“正数”,等于0为“等于0”,否则为“负数”
 Sub judge2()  '多条件判断
   If Range("a1").Value > 0 Then
     Range("b1") = "正数"
   ElseIf Range("a1") = 0 Then
     Range("b1") = "等于0"
   ElseIf Range("B1") <= 0 Then
     Range("b1") = "负数"
   End If
 End Sub

'3. 若单元格A1和A2的值不为空值,则A3=A1*A2
 Sub judge3()
  If Range("a1") <> "" And Range("a2") <> "" Then
    Range("a3") = Range("a1") * Range("a2")
  End If
 End Sub

'4. 区间判断:若A2<=1000,则B2=0.01;若1000<A2<=3000,则B2=0.03;若A2>3000,则B2=0.05
 Sub scope()
  If Range("a2") <= 1000 Then
    Range("b2") = 0.01
  ElseIf Range("a2") <= 3000 Then
    Range("b2") = 0.03
  ElseIf Range("a2") > 3000 Then
    Range("b2") = 0.05
  End If
 End Sub

'二、IIF判断
'1. 若A1小于等于0,则A3等于“负数或零”,否则等于“负数”
 Sub 判断4()
   Range("a3") = IIf(Range("a1") <= 0, "负数或零", "负数")
 End Sub

'三、select判断
'1. 若单元格A1的值大于0,则B1等于“正数”,否则等于“负数或0”
 Sub 判断1()  '单条件判断
   Select Case Range("a1").Value
   Case Is > 0
     Range("b1") = "正数"
   Case Else
     Range("b1") = "负数或0"
   End Select
 End Sub

'2. 若单元格A1的值大于0,则B1等于“正数”,等于0则B1等于“0”,否则等于“0”
 Sub 判断2()  '多条件判断
   Select Case Range("a1").Value
   Case Is > 0
     Range("b1") = "正数"
   Case Is = 0
     Range("b1") = "0"
   Case Else
     Range("b1") = "负数"
   End Select
 End Sub

'3. 若A3的值小于“G”,则
 Sub 判断3()
  If Range("a3") < "G" Then
    MsgBox "A-G"
  End If
 End Sub

'4. 区间判断:若0<=A2<=1000,则B2=0.01;若1001<=A2<=3000,则B2=0.03;若A2>3000,则B2=0.05
 Sub scope()
  Select Case Range("a2").Value
  Case 0 To 1000
    Range("b2") = 0.01
  Case 1001 To 3000
    Range("b2") = 0.03
  Case Is > 3000
    Range("b2") = 0.05
  End Select
 End Sub


'循环语句
'1. D列的值等于B列乘以C列(前10行)的4种实现方法:
'方法1:
 Sub t1()
 Dim x As Integer  '定义整数变量x
   For x = 2 To 10 Step 1
     Range("d" & x) = Range("b" & x) * Range("c" & x)
   Next x
 End Sub

'方法2:
 Sub t2()
 Dim rg As Range
   For Each rg In Range("d2:d10")
     rg = rg.Offset(0, -2) * rg.Offset(0, -1)
   Next rg
 End Sub

'方法3:
 Sub t3()
 Dim x As Integer
   x = 1
   Do
     x = x + 1
     Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
   Loop Until x = 10
 End Sub

'方法4:
 Sub t5()
  x = 1
  Do While x < 10
    x = x + 1
    Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
  Loop
 End Sub

'2. 将A1:B7和D5:E9区域中的空值更改为0
 Sub s1()
  Dim rgg As Range
  For Each rgg In Range("a1:b7,d5:e9")
    If rgg = "" Then
      rgg = 0
    End If
  Next rgg
 End Sub

'3. 若第一列相邻两行之间的差值不等于1,则在第二列相应位置输入“断点”(前10行)
 Sub s2()
  Dim x As Integer
  x=0
  Do
    x = x + 1
    If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then
       Cells(x, 2) = "断点"
       Exit Do
    End If
  Loop Until x = 11
 End Sub


'函数与公式
'一、用VBA在单元格中输入普通公式
'1. 实现D2=B2*C2
 Sub t1()
    Range("d2") = "=b2*c2"
 End Sub

'2. 实现第四列等于B列*C列(2到6行)     
 Sub t2()
   Dim x As Integer
   For x = 2 To 6
     Cells(x, 4) = "=b" & x & "*c" & x
     Next x
 End Sub

'二、用VBA在单元格输入带引号的公式
'1. 将A列中“B”对应的B列的值求和(2到6行)
 Sub t3()
    Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)"  '遇到双引号就把双引号加倍
 End Sub
      
'三、用VBA在单元格中输入数组公式
'1. 将数组B2:B6和C2:C6的积求和
 Sub t4()
   Range("c9").FormulaArray = "=SUM(B2:B6*C2:C6)"  '不需要在公式中加{}
 End Sub
    
'四、利用单元格公式返回值
'1. 用Evaluate直接计算出公式的值 
 Sub t5()
    Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)")
    Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")
 End Sub
  
'五、借用工作表函数
'1. 统计A列中出现“B”的总次数(前10行)
 Sub t6()
    Range("d8") = Application.WorksheetFunction.CountIf(Range("A1:A10"), "B")  
 End Sub

'六、利用VBA函数
'1. 在单元格C20中返回A20中“E”出现的位置
 Sub t7()
   Range("C20") = VBA.InStr(Range("a20"), "E")  '字符串查找,类似于工作表函数find
 End Sub  

'七、编写自定义函数
“1. 返回当前工作表的名称
  Function wn()
     wn = Application.Caller.Parent.Name  
  End Function


'END语句和Exit语句
'End作用:强制退出所有正在运行的程序

'Exit作用:退出指定的语句
'1、Exit Sub
 Sub e1()
   Dim x As Integer
     For x = 1 To 100
        Cells(1, 1) = x
        If x = 5 Then
          Exit Sub
        End If
     Next x
     Range("b1") = 100
 End Sub

'2、Exit function
 Function ff()
   Dim x As Integer
     For x = 1 To 100
       If x = 5 Then
         Exit Function
       End If
     Next x
     ff = 100
 End Function
   
'3、Exit for
 Sub e2()
   Dim x As Integer
     For x = 1 To 100
        Cells(1, 1) = x
        If x = 5 Then
           Exit For
        End If
     Next x
     Range("b1") = 100
 End Sub

'4、Exit do
 Sub e3()
   Dim x As Integer
     Do
       x = x + 1
       Cells(1, 1) = x
       If x = 5 Then
         Exit Do
       End If
     Loop Until x = 100
     Range("b1") = 100
 End Sub


'分支语句
'1. Goto语句,跳转到指定的地方
 Sub t1()
   Dim x As Integer
   Dim sr
 100:
   sr = Application.InputBox("请输入数字", "输入提示")
   If Len(sr) = 0 Or Len(sr) = 5 Then GoTo 100
 End Sub

'2. gosub..return ,跳过去,再跳回来
 Sub t2()
   Dim x As Integer
   For x = 1 To 10
      If Cells(x, 1) Mod 2 = 0 Then GoSub 100
   Next x
 Exit Sub
 100:
   Cells(x, 1) = "偶数"
   Return          '跳到gosub 100 这一句
 End Sub

'3. on error resume next '遇到错误,跳过继续执行下一句
 Sub t3()
   On Error Resume Next
   Dim x As Integer
   For x = 1 To 10
     Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
   Next x
 End Sub
 
'4. on error goto  '出错时跳到指定的行数
 Sub t4()
   On Error GoTo 100
   Dim x As Integer
   For x = 1 To 10
     Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
   Next x
    Exit Sub
 100:
   MsgBox "在第" & x & "行出错了"
 End Sub
 
'5. on error goto 0 '取消错误跳转
 Sub t5()
   On Error Resume Next
   Dim x As Integer
   For x = 1 To 10
     If x > 5 Then On Error GoTo 0
     Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
   Next x
   Exit Sub
 End Sub









  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
非常好的问题!让我来回答你的问题。 首先,关于VBA学习笔记(一):自动添加代码,你可以使用VBA来自动添加代码。具体步骤如下: 1. 打开你要添加代码的Excel文件,并按下Alt + F11进入VBA编辑器界面。 2. 在左侧的“项目资源管理器”窗格中,展开你的Workbook,并双击“这台电脑”(或“Microsoft Excel 对象”),打开相应的代码窗口。 3. 在代码窗口的顶部,选择“工具” > “” > “录制新”。 4. 在弹出的“新建”对话框中,为新命名,并选择一个快捷键,以便日后调用。 5. 点击“确定”后,VBA会自动开始录制你的操作。 6. 在代码窗口中,添加你需要自动执行的代码。 7. 完成代码添加后,点击“停止录制”按钮,保存你的新。 接下来,关于VBA修改注册表,你可以使用VBA的“WshShell”对象来实现。具体步骤如下: 1. 在VBA编辑器中,打开你要修改注册表的代码窗口。 2. 在代码窗口的顶部,添加以下代码: ``` Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") ``` 这将创建一个名为“WshShell”的对象,用于执行后续的注册表修改操作。 3. 接下来,你可以使用该对象的“RegWrite”方法来修改注册表。例如,以下代码将修改Windows启动时自动运行的程序列表: ``` WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MyApp", "C:\MyApp.exe", "REG_SZ" ``` 该代码将在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”键下添加一个名为“MyApp”的值,其值为“C:\MyApp.exe”,类型为“REG_SZ”。 4. 完成代码添加后,保存并执行你的代码。 希望这些步骤对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值