VBA 过程的基本语法如下:

Sub 过程名(参数)
    语句1
    语句2
    ...
 End Sub

VBA 函数与 VBA 过程很相似,除了使用的关键词外,主要区别是,函数可以返回值。

Function [函数名]([参数]) As [返回值类型]
    语句1    
    语句2    
    ...    
    语句n    
    [函数名] = [返回值]
End Function

函数包含的语句中,相比过程,可以看到多一个 [函数名] = [返回值] 语句,这是函数的返回值语句

Excel VBA对象模型

  • 应用程序(Application)
  • 工作簿(Workbook)
  • 工作表(Worksheet)
  • 范围(Range)

许多使用 Excel 完成的工作都是围绕这四种对象及其成员进行的。位于顶层的是Application对象,也就是Excel应用程序本身,它包含Excel中的其它的对象,如Workbook对象;一个Workbook对象包含其它一些对象,如Worksheet对象;而一个Worksheet对象又可以包含其它对象,如Range对象, 一个 Range 对象,表示一个单元格、行、列、包含一个或多个单元格块的单元格选定区域(选定区域可能是连续的,也可能不是连续的)或甚至多个工作表上的一组单元格)。

Application.Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”) 表明是对工作簿Book1上的工作表Sheet1中单元格A1的引用,其中Application代表Excel应用程序本身,可省略。特别地,若Book1是当前活动工作簿,则上述语句可简写为 Worksheets(“Sheet1”).Range(“A1”) ;若Sheet1是当前活动工作表,则又可简写为 Range(“A1”) 。因此,若在引用中省略了工作簿对象,则表明是使用当前活动工作簿;若再省略了工作表对象,则表明是使用当前活动工作表。

Worksheet.Cells语法
Worksheets("Sheet1").Cells(5, 3).Font.Size = 14 将 Sheet1 中单元格第5行第3列的字号设置为 14 磅。

一个简单的比较程序,比较两个sheet的序号是否一致

Sub compare()
    Sheet1.Range("C2:C1000").ClearContents
    
    'Dim sheet1_rows, sheet2_rows
    sheet1_rows = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    sheet2_rows = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To sheet1_rows
        Worksheets("Sheet1").Cells(i, 3) = "不一致"
        For j = 2 To sheet2_rows
            If Worksheets("Sheet1").Cells(i, 1) = Worksheets("Sheet2").Cells(j, 1) Then
                Worksheets("Sheet1").Cells(i, 3) = "一致"
                Exit For
            End If
        Next
    Next
End Sub

其中
求出A列最后1行:Cells(Rows.Count, 1).End(3).Row "Cells(Rows.Count, 1)表示是查找A列最后一个非空单元格,按列的可以改Cells(1, Columns.count)end(xlup)表示的向上查找,还有其他3个方向,向下,向左,向右:xldown、xltoleft、xltoright

结果如下

vba sub 和 function的区别 vba和函数的区别_VBA