精华内容
下载资源
问答
  • 要使用VBA,首先打开你的Excel电子表格,然后将Microsoft Visual Basic窗口打开,这样才能使用VBA代码!  方法是:在Excel中直接按下组合键Alt F11即可打开VB窗口,倘若VB...删除第8个单元格为空的,范围从1...

    要使用VBA,首先打开你的Excel电子表格,然后将Microsoft Visual Basic窗口打开,这样才能使用VBA代码!

      方法是:在Excel中直接按下组合键Alt F11即可打开VB窗口,倘若VB默认没有打开代码窗口,请执行操作:“视图”→“代码窗口”即可!

      好了,环境都设置好了,下面来学习如题所示的操作吧!

      代码1#8212;删除第8个单元格为空的行,范围从1行到88行:
    ----------------------------------------------------------
     Sub DeleteEmptyRow '删除指定的单元格为空的行
      Dim i As Integer
      For i = 88 To 1 Step -1
       If Cells(i, 8) = "" Then
        Sheets("sheet1").Rows(i).Delete
       End If
      Next i
     End Sub
    ----------------------------------------------------------
      代码解释:

      For i = 88 To 1 Step -1 '循环语句,从第88行一直检查到第1行
      If Cells(i, 8) = "" Then '如果当前行的第8列的值为空值,那么就删除该行!i是变量,随着循环而变,其值从88逐渐减小到1

      代码2#8212;删除第6个单元格为空的列,范围从1列到66列:
    ----------------------------------------------------------
     Sub DeleteEmptyColmn() '删除指定的单元格为空的列
      Dim i As Integer
      For i = 66 To 1 Step -1
       If Cells(i, 6) = "" Then
        Sheets("sheet1").Columns(i).Delete
       End If
      Next i
     End Sub
    ----------------------------------------------------------
      代码解释:与上面的代码类似,不再解释!

      知识扩展:

      以上两种代码仅删除sheet1工作表满足条件的空行空列,如果要一次性删除多个工作表的满足条件的空行和空列呢?

      同样道理,只要再代码外面再使用一个循环即可!

    ----------------------------------------------------------

     Sub DeleteEmptyRowAndColmn() '删除指定的单元格为空的行
      Dim i As Integer
      For j = 1 To 3
       For i = 88 To 1 Step -1
        If Cells(i, 6) = "" Then
         Sheets(j).Columns(i).Delete
        End If
       Next i
      Next j
     End Sub

    相关参考

    VBA语言基础

    各种Excel VBA的命令

    VB6 中将数据导出到 Excel 提速之法

    VBA语法200

    各种Excel VBA的命令

    Execl编程详解

      VB

     VB软件操作EXCELVB全面控制Excel

    展开全文
  • Sub 删表格红色() '每个表格只能有一个红色的,有多个只处理第一个 Dim tb As Table, cl As Cell For Each tb In ActiveDocument.Tables For Each cl In tb.Range.Cells If cl.Range.Font.Color = 255 ...
    Sub 删表格红色行()
        
        '每个表格只能有一个红色的行,有多个只处理第一个
        Dim tb As Table, cl As Cell
        
        For Each tb In ActiveDocument.Tables
            For Each cl In tb.Range.Cells
                If cl.Range.Font.Color = 255 Then
                    cl.Row.Delete
                    Exit For
                End If
            Next
        Next
        
        MsgBox "处理完毕!"
    End Sub
    

    通过swagger.json转换word api文档后,发现有大量的exception行,做批量移除行操作。

     

    展开全文
  • VBA快速入门学习笔记

    2020-10-04 17:12:20
    VBA对象包括工作薄、工作表、工作表上的单元格区域、图表等等,工作簿、工作表、单元格、批注、透视表、自选图形、名称等等都是对象,VBA正是用于处理这些对象的语言。下图是一个比较经典的VBA对象类别图。在VBE...

     

    NOTE 1:

    一、VBA对象

           工作簿、工作表、单元格、批注、透视表、自选图形、名称等等都是对象,VBA正是用于处理这些对象的语言。下图是一个比较经典的VBA对象类别图。在VBE(VB编辑器)里也可以看到对象的浏览器(F2键),对象可以相互包含。

    二、VBA对象引用

            对象的引用(reference) 在写代码是要控制对象,首先要找到这个对象,然后把这个对象的地址告诉给VBA程序,且要遵循从大到小的规则。和我们中国地址的习惯一致,如我们在写地址的时候:先写中国,然后是某省,某市,某区依次往下写。告诉给VBA的时候也是一样的。 例如:

    1 Workbooks集合包含在Application对象里,我们要引用名称为“book.xlsm”的工作薄时就是:Application.Workbooks(“book.xlsm”)

    2 当我们引用“book.xlsm”里面的工作表“Sheet1”时应是:

    Application.Workbooks(“book.xlsm”).Worksheets(“Sheet1”)

    3 可以继续延伸到下一层,引用“book.xlsm”里工作表“Sheet1”里面的单元格区域“B1:D10”: Application.Workbooks(“book.xlsm”).Worksheets(“Sheet1”).Range(“B1:D10”)

    特别注意1:如果我们引用的是活动对象,也就是被激活的对象,引用就可以进行简化。

    如果是book.xlsm工作薄是激活的,引用可以简化为

    Worksheets(“Sheet1”).Range(“B1:D10”)

    如果Sheet1当前也是激活的,引用甚至还可以简化为Range(“B1:D10”),也可以直接输入[B1:D10],如果引用的单元Range是单个的单元格,可以用Range(“B1”)引用,还可以用Cells(行号,列号)的引用方式。

    特别注意2:和引用文件不同的是,VBA里使用的分隔符是点。

    特别注意3:引用不是选择,如下面的截图是选择的截图,引用不会有视觉效果。

     

    三、常用对象的属性和方法

    Names对象

    应用程序或工作簿中的所有**Name** 对象的集合。

    每一个 Name 对象都代表一个单元格区域的定义名称。 名称可以是内置名称, 例如 Database、Print_Area 和 Auto_Open (或 custom names)。

    RefersTo 参数必须以 A1 样式表示法指定,包括必要时使用的美元符 ($)。 例如,如果在 Sheet1 上选定了单元格 A10,并且通过将 RefersTo 参数“=Sheet1!A1:B1”而定义了一个名称,那么该新名称实际上指向单元格区域 A10:B10(因为指定的是相对引用)。 若要指定绝对引用,请使用“=Sheet1!$A$1:$B$1”。

    方法

    Add方法:为单元格区域定义新名称。

    Item 方法:从Names集合中返回单个**Name** 对象。

    属性

    Application 属性:在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Count 属性:返回一个 Long 值,它表示集合中对象的数量。

    Creator 属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    Parent 属性:返回指定对象的父对象。 只读。

    Name 对象

    代表单元格区域的定义名。 名称可以是内置名称, 例如 Database、Print_Area 和 Auto_Open (或 custom names)。

    方法

    Delete 方法:删除对象

    属性

    Application 属性:在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Category 属性:返回或设置指定名称的类别中的宏语言。 名称必须引用自定义的函数或命令。 读/写 String。

    CategoryLocal 属性:返回或设置指定名称的类别中的用户语言名称引用自定义的函数或命令。 读/写 String。

    Comment 属性:返回或设置与名称相关联的批注。 读/写 String。

    Creator 属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    Index 属性:返回一个 long 类型值,该值代表相似对象的集合中对象的索引号。

    MacroType 属性:返回或设置名称所引用的对象。 读/写**XlXLMMacroType**。 xlXLMMacroType可以是下列xlXLMMacroType常量之一。 ||xlCommand。 名称是指用户定义的宏。 ||xlFunction。 名称是指用户定义的函数。 ||xlNotXLM。 名称不引用函数或宏。

    Name 属性:返回或设置一个String值,它代表对象的名称。

    NameLocal 属性:返回或设置中的语言的用户对象的名称。 读/写 String。

    Parent 属性:返回指定对象的父对象。 只读。

    RefersTo 属性:用宏语言以 A1 样式表示法返回或设置名称所引用的公式(以等号开头)。 读/写 String。

    RefersToLocal 属性:返回或设置名称引用的公式。 公式中的用户语言和处于 A1 样式表示法,开头等号。 读/写 String。

    RefersToR1C1 属性:返回或设置名称引用的公式。 公式中的宏,语言和处于 R1C1 样式表示法,开头等号。 读/写 String。

    RefersToR1C1Local 属性:返回或设置名称引用的公式。 此公式中的用户语言和处于 R1C1 样式表示法,开头等号。 读/写 String。

    RefersToRange 属性:返回一个由Name对象引用的**Range** 对象。 只读。

    ShortcutKey 属性:返回或设置定义为自定义 Microsoft Excel 4.0 宏命令的名称的快捷键。 读/写 String。

    ValidWorkbookParameter 属性:如果指定的Name对象是有效的工作簿参数,则返回True 。 只读 Boolean。

    Value 属性:返回或设置一个String值,该值代表公式的规定名称去引用。

    Visible 属性:返回或设置一个布尔值, 确定对象是否可见。 读/写。如果将某个名称的Visible属性设置为False, 则该名称将不会出现在 '定义名称' 对话框中。

    WorkbookParameter 属性:返回或设置为工作簿参数指定的Name对象。 读/写

    Validation对象

    代表工作表区域的数据有效性规则。

    方法

    Add方法:向指定区域添加数据验证。

    Delete 方法:删除对象。

    Modify 方法:修改指定区域的数据有效性验证。

    属性

    AlertStyle 属性:返回有效性检验警告样式。 只读的**XlDVAlertStyle**。信息图标,警告图标,禁止图标

    Application 属性:

    在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Creator 属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    ErrorMessage 属性:返回或设置数据有效性检验错误消息。 读/写 String。

    ErrorTitle 属性:返回或设置数据有效性错误对话框的标题。 读/写 String。

    Formula1 属性:返回与条件格式或者数据有效性相关联的值或表达式。 可为常量值、字符串值、单元格引用或公式。 只读的字符串。

    Formula2 属性:返回与条件格式或数据有效性验证第二部分相关联的值或表达式。 仅在数据验证条件格式**运算符** 属性为xlBetween或xlNotBetween时使用。 可为常量值、字符串值、单元格引用或公式。 只读 String 类型。

    IgnoreBlank 属性:如果指定区域内的数据有效性检验允许空值,则该值为 True。 读/写 Boolean。

    IMEMode 属性:返回或设置日文输入规则的说明。 可以是下表中列出的**XlIMEMode** 常量之一。 Long 类型,可读写。

    InCellDropdown 属性:如果数据有效性显示含有有效取值的下拉列表,则该属性值为 True。 读/写 Boolean。

    InputMessage 属性:返回或设置数据有效性检验输入信息。 读/写 String。

    InputTitle 属性:返回或设置数据有效性输入对话框的标题。 读/写 String。 限制为32个字符。

    Operator 属性:返回一个Long值, 它代表数据有效性的运算符。

    Parent 属性:返回指定对象的父对象。 只读。

    ShowError 属性:如果用户输入无效数据时显示数据有效性检查错误消息,则该属性值为 True。 读/写 Boolean。

    ShowInput 属性:如果用户在数据有效性检查区域内选定了某一单元格时,显示数据有效性检查输入消息,则该属性值为 True。 读/写 Boolean。

    Type 属性:返回一个Long值, 它包含一个**XlDVType** 常量, 该常量代表区域的数据类型验证。

     

    Value 属性:返回一个布尔值, 该值指示是否满足所有验证条件 (即, 如果该范围包含有效数据)。

    PageSetup 对象

    代表页面设置说明。PageSetup 对象包含作为特性的所有页面设置属性(左边距、下边距、纸张大小等)。

    属性(常用)

    AlignMarginsHeaderFooter 属性:返回True excel 以对齐的边距设置页面设置选项中的页眉和页脚。 读/写 Boolean。

    BlackAndWhite 属性:如果为true以黑白方式打印文档中的元素。 读/写 Boolean。

    BottomMargin 属性:返回或设置下边距的大小, 以磅为单位。 读/写 Double。

    CenterFooter 属性:居中对齐PageSetup对象中的页脚信息。 读/写 String。

    CenterFooterPicture 属性:返回一个代表页脚的中心部分的图片的**图形** 对象。 用于设置图片的属性。

    CenterHeader 属性:居中对齐中的PageSetup对象的头信息。 读/写 String。

    CenterHeaderPicture 属性:返回一个代表中心节标头的图片的**图形** 对象。 用于设置图片的属性。

    CenterHorizontally 属性:如果在页面的水平居中位置打印指定工作表,则该属性值为 True。 Boolean 类型,可读写。

    CenterVertically 属性:True如果在上的垂直居中位置打印工作表。 读/写 Boolean。

    DifferentFirstPageHeaderFooter 属性 :True,如此 如果不同的页眉或页脚使用第一页上。 读/写 Boolean。

    Draft 属性:如果为true将图形不打印工作表。 读/写 Boolean。

    EvenPage 属性:返回或设置工作簿或节的偶数页上的文本对齐方式。

    FirstPage 属性:返回或设置工作簿或节的第一页上的文本对齐方式。

    FirstPageNumber 属性:返回或设置打印指定工作表时第一页的页号。 如果xlAutomatic, Microsoft Excel 将选择第一个页码。 默认值为 xlAutomatic。 Long 类型,可读写。

    FitToPagesTall 属性:返回或设置打印工作表时,对工作表进行缩放使用的页高。 仅应用于工作表。 读/写 Variant。

    FitToPagesWide 属性:返回或设置打印工作表时,对工作表进行缩放使用的页宽。 仅应用于工作表。 读/写 Variant。

    FooterMargin 属性:返回或设置从页面底部的距离,页脚,以磅为单位。 读/写 Double。

    HeaderMargin 属性:返回或设置从页面顶部的距离,页眉,以磅为单位。 读/写 Double。

    LeftFooter 属性:返回或设置工作簿或节的左页脚上的文本对齐方式。

    LeftFooterPicture 属性:返回一个代表左侧的页脚节的图片的**图形** 对象。 用于设置图片的属性。

    LeftHeader 属性:返回或设置工作簿或节的左页眉上的文本对齐方式。

    LeftHeaderPicture 属性:返回一个代表左侧标头的各个部分的图片的**图形** 对象。 用于设置图片的属性。

    LeftMargin 属性:以磅为单位返回或设置左边距的大小。 读/写Doub

    OddAndEvenPagesHeaderFooter 属性 :True 指定的 PageSetup 对象是否的奇数和偶数页不同的页眉和页脚。 读/写 Boolean。

    Order属性:返回或设置一个**XlOrder** 值, 该值代表 Microsoft Excel 在打印大型工作表时对页面编号时使用的顺序。

     

    Orientation属性:返回或设置一个**XlPageOrientation** 值, 它代表纵向或横向打印模式。

     

    Pages属性:返回或设置pages集合中页面的计数或项目号。

    PaperSize 属性:返回或设置纸张大小。 XlPaperSize 类型,可读写。

    PrintArea 属性:使用采用宏语言的 A1 样式引用,以字符串形式返回或设置要打印的区域。 读/写 String。

    PrintComments 属性:返回或设置批注随工作表打印的方式。 读/写**XlPrintLocation**。

    PrintErrors 属性:设置或返回一个**XlPrintErrors** 常量, 该常量指定显示的打印错误的类型。 该功能允许用户在打印工作表时取消错误显示。 可读写。

    PrintGridlines 属性:True如果在上打印单元格网格线。 仅适用于工作表。 读/写 Boolean。

    PrintHeadings 属性:如果为true行和列标题的打印此页。 仅适用于工作表。 读/写 Boolean。

    PrintNotes 属性:True如果单元格注释打印作为表的尾注。 仅适用于工作表。 读/写 Boolean。

    PrintQuality 属性:返回或设置打印质量。 读/写 Variant。

    PrintTitleColumns 属性:返回或设置包含要重复左侧的每一页中,在语言的宏的 A1 样式表示法字符串形式的单元格的列。 读/写 String。

    PrintTitleRows 属性:返回或设置那些包含在每一页顶部重复出现的单元格的行,用宏语言字符串以 A1 样式表示法表示。 读/写 String。

    RightFooter 属性:返回或设置页的右边缘和页脚的右边界之间的距离 (以磅为单位)。 读/写 String。

    RightFooterPicture 属性:返回一个代表页脚的右部分的图片的**图形** 对象。 用于设置图片的属性。

    PageSetup.RightHeader 属性:返回或设置页眉的右侧部分。 读/写 String。

    RightHeaderPicture 属性:指定应在右侧的标头中显示的图形图像。 只读。

    RightMargin 属性:返回或设置的右边距的大小,以磅为单位。 读/写 Double。

    ScaleWithDocHeaderFooter 属性:返回或设置如果文档的大小更改时应与文档扩展的页眉和页脚。 读/写 Boolean。

    TopMargin 属性:返回或设置上边距的大小,以磅为单位。 读/写 Double。

    Zoom属性:返回或设置一个Variant值, 它代表 Microsoft Excel 用于缩放工作表时使用的百分比 (10% 到 400%)。

    Hyperlinks 对象

    代表工作表或区域的超链接的集合。

    方法

    add方法:向指定的区域或形状添加超链接。

    Delete 方法:删除对象。

    属性

    Application 属性:在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Count 属性:返回一个 Long 值,它表示集合中对象的数量。

    Creator 属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    Item 属性:从集合中返回一个对象。

    Parent 属性:返回指定对象的父对象。 只读。

    Hyperlink 对象

    代表一个超链接。

    方法

    AddToFavorites 方法:将工作簿或超链接的快捷方式添加到“收藏夹”文件夹。

    CreateNewDocument 方法:新建一篇链接到指定超链接的文档。

    Delete 方法:删除对象。

    Follow方法:显示缓存文档 (如果已下载)。 否则,此方法将解析该超链接,下载目标文档,并在相应的应用程序中显示此文档。

    属性

    Address 属性:返回或设置一个String值,该值代表目标文档的地址。

    Application 属性:在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Creator属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    EmailSubject 属性:返回或设置指定超链接的电子邮件主题行的文本字符串。 主题行追加到超链接的地址。 读/写 String。

    Name 属性:返回一个String值,它代表对象的名称。

    Parent 属性:返回指定对象的父对象。 只读。

    Range 属性:返回一个**range** 对象, 该对象代表指定的超链接所附加到的区域。

    ScreenTip属性:返回或设置指定超链接的屏幕提示文字。 读/写 String。

    Shape 属性:返回一个**Shape** 对象,它代表附加到指定的超链接的形状。

    SubAddress 属性:返回或设置与超链接相关联的文档中的位置。 读/写 String。

    TextToDisplay 属性:返回或设置指定超链接显示的文本。 默认值是超链接的地址。 读/写 String。

    Type属性:返回一个Long值, 它包含一个**MsoHyperlinkType** 常量, 该常量代表 HTML 框架的位置。

    Filter筛选器对象

    代表单个列的筛选。Filter对象是 Filters 集合中的成员。 Filters 集合包含自动筛选区域中的所有筛选。

    属性

    Application 属性:在不使用对象识别符的情况下使用时, 此属性返回代表 Microsoft Excel 应用程序的**Application** 对象。 如果与对象识别符一起使用,则此属性返回代表指定对象的创建者的 Application 对象(可以将此属性与 OLE 自动化对象一起使用以返回该对象的应用程序)。 只读。

    Count属性:返回集合中对象的数目。 只读 Long。

    Creator 属性:返回一个 32 位整数,该整数指示在其中创建了此对象的应用程序。 只读 Long。

    Criteria1 属性:筛选区域中返回指定列的第一个筛选的值。 只读的Variant。

    Criteria2 属性:筛选区域中返回指定列的第二个筛选的值。 只读的Variant。

    On 属性:True如果位于指定的筛选器。 只读 Boolean。

    Operator属性:返回一个**XlAutoFilterOperator** 值, 该值代表关联指定筛选器所应用的两个条件的运算符。

    Parent 属性:返回指定对象的父对象。 只读。

    Filters 对象

    Filter 对象的集合, 该集合代表自动筛选区域中的所有筛选器。

    AutoFilter 对象

    代表对指定工作表的自动筛选。

    方法

    ApplyFilter 方法:应用指定的自动筛选对象。

    ShowAllData 方法:显示自动筛选对象返回的所有数据。

    属性(常用)

    FilterMode 属性:如果工作表处于自动筛选模式, 则返回True 。 只读 Boolean 类型。

    Filters 属性:返回一个**Filters** 集合, 该集合代表自动筛选区域中的所有筛选器。 此为只读属性。

    Range属性:返回一个**range** 对象, 该对象代表应用指定的自动筛选的区域。

    Sort属性:获取一个或多个列, 并对AutoFilter集合的排序顺序进行排序。

    四、变量与常量

             在VBA中可以使用名称来表示内存的位置,这个名称就是标识符,可以理解为变量和常量的名字。

    a、第一个字符必须使用英文字母或中文字符(中文版EXCEL支持中文字符),禁止使用数字

    b、名称长度不超过255个字符

    c、名称不能与VBA本身的Function过程、语句、即方法的名称相同,避免冲突。如不能使用保留字,如sub,end,if等等

    d、不能在同一范围的相同层级中使用重复的名称

    e、最好有特定意义,便于使用

    f、变量不能使用空格和句号,感叹号等标点符号

    变量的概念

    变量是用于保存程序运行过程中的临时值,和常量不同的是,在程序运行过程中变量保存的值是可以被改变的。

    声明变量

    在使用变量时,需要告诉VBA程序变量的名称和数据类型,即声明变量。通常用Dim语句来声明动态变量(还有一种不常用的Static语句来声明静态变量,后面会介绍。)

    Dim语句格式如下:Dim 变量名 [ AS  数据类型 ]

    声明变量通常都是在程序开始处,可以再同一行声明多个变量,用英文逗号间隔即可。举几个例子:

    声明i为整型变量   

    Dim i As Integer

    声明j为字符串,k为整型变量   

    Dim j As String, k As Integer

    声明x和y为整型变量   

    Dim x, y As Integer

    格式中 [AS 数据类型] 是可以省略的,即声明变量时不指定变量的类型。系统会自动将其分配为Variant变量(即变体型),这叫隐式声明。

    但在编写代码时不推荐使用隐式声明变量,1、隐式声明变量后,之后变量名如果用错,VBA不会有提示。2、变体型变量占用内存多,会拖累程序运行速度。

    所以通常在模块中添加Option Explict语句,要求该模块中所有变量必须先强制声明再使用。(也可以系统中直接设置默认添加这个语句,在VBE的“工具-选项”中,勾选“要求变量声明”再插入新模块时,就会默认有Option Explict语句)

     

    变量赋值

    为变量赋值就需要用到赋值语句,赋值语句的作用就是对表达式进行运算,并把运算结果赋值给变量或者属性。

    表达式为如下(其中let经常都省略):[ let ] 变量或属性的名称=常量值或者表达式

    前面用for循环举例时就用过赋值语句,下么我再举例说明下

    Sub test()

       Dim i As String 

       Let i = "VB使人快乐"

       MsgBox i

    End Sub

    声明的了i是字符串变量后,赋值一个字符串,最后用msgbox函数将变量的内容输出。

    这里有个例需要说明,除了let语句外,在后期遇到将对象类型赋值给变量的情况时,需要用set语句来赋值,后期遇到时候会再讲解。

    变量的作用域

     

     

    作用域就是变量使用范围,VBA中有三种级别的作用域,即过程级变量、模块级变量和工程级变量。

    通常使用的是过程级变量,也称为局部变量,就是再Sub和End Sub之间编写代码时声明的变量。在过程结束时,占用的内存空间就会释放,有利于节省计算机内存。在不同的过程中可以使用相同名称的过程级变量。

    模块级变量时在模块的第一个过程之前使用Dim或者private声明的变量,该模块的所有过程都可以使用这个变量。

    工程级的变量时在模块声明部分用puplic来声明,即Public 变量名 As  变量类型。可以在窗体、模块和类模块中都使用工程级变量。

    (对于不同级的变量使用的原则,尽量使用过程级变量,如果不同过程之间有共享值时,才使用模块变量,要控制工程级变量的使用数量。)

    变量的存活期

    变量的存活期就是指变量在内存中保留的时间。那么当程序开始运行时,模块级和工程级的变量就会出现在内存中,而过程级变量时一个SUB过程开始后才储存到内存中,退出SUB过程后,变量占用的内存也会释放。

    而当程序退出时,工程级变量、模块级变量和过程级变量占用的变量占用的内存都会释放。

    但是如果将变量用static语句声明为静态变量,那么在过程退出时,静态变量仍保存在内存中。过程再运行一遍时,动态变量重置,而静态变量还是上一次过程运行后的结果。

    静态变量声明staitc与dim语句的声明格式一样。下面我举例来说明动态变量和静态变量的区别。用Debug.print将运行结果在立即窗口中显示。

     

    多次运行这个过程之后,运行的结果在立即窗口中显示,变量默认值为0,第一次运行过程,a和b结果都为1。第一次过程结束后,动态变量a重新变成默认值0,而静态变量b仍为1,第二次运行过程,动态变量a结果1,静态变量结果为2。结束后动态变量由会变成默认值0,而B仍为2,依次类推。只有当程序退出时候静态变量才会重置。

    其实模块级变量和工程级变量的结果和静态变量时一样的,只有当程序退出时占用的内存才会释放。

     

    常 量  

    最后简单说一下常量,在程序运行过程中值不会发生变化,常量可以在程序中直接书写的量。

    如果一个常数需要反复用到,比如圆周率3.14,就可以为一个常量命名,定义格式如下:

    Const 符号常数名=符号常数或表达式

     

    五、数据类型、转换、运算符

    数据类型

    数据类型转换

    VBA提供了15种标准数据类型
    数据类型的转换
    各种进制转换函数
    VB中涉及到的数据进制之间的转换函数主要有如下几个:
    Hex 函数: 返回代表十六进制数值的 String;
    Oct 函数: 返回代表一数值的八进制值的Variant (String);
    Cint函数: 强制将一个表达式转换成-32,768 至 32,767的整型;
    CLng函数: 强制将一个表达式转换成-2,147,483,648 至 2,147,483,647的长整型;
    Cdec函数: 强制将一个表达式转换成Decimal 数据类型;
    CDbl函数: 强制将一个表达式转换成Double 数据类型;
    例子:
    (1) A=hex(5) 返回5;
    (2) B=hex(10) 返回A
    (3) C=hex(23) 返回17
    (4) D=oct(5) 返回5
    (5) E=oct(10) 返回12
    (6) F=oct(23) 返回27
    (7) G=Cint(&H17) 返回23
    (8) H=Cint(&O12) 返回10

    运算符

    a、算术运算符

    以下是VBA支持算术运算符。

    假设变量A=5,变量B=10,那么

    运算符描述示例
    +两个操作数相加A + B = 15
    -两个操作数相减A - B = -5
    *两个操作数相乘A * B = 50
    /两个操作数相除B / A = 2
    %模运算符,整数除法后的余数B % A = 0
    ^指数运算符B ^ A = 100000

     

    b、比较运算符

    VBA支持的比较运算符如下所示。

    假设变量A=10,变量B=20,则 -

    运算符描述示例
    =检查两个操作数的值是否相等。如果是,那么条件是真。(A = B)结果为:False
    <>检查两个操作数的值是否不相等。如果值不相等,则条件为真。(A <> B)结果为:True
    >检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。(A > B)结果为:False
    <检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。(A < B)结果为:True
    >=检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。(A >= B)结果为:False
    <=检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。(A <= B)结果为:True

     

    c、逻辑(或关系)运算符

    以下由VBA支持的逻辑运算符。

    假设变量A=10,变量B=0,则

    运算符描述示例
    AND逻辑AND运算符。如果两个条件都为真,则表达式为真。A<>0 AND B<>0结果为:False
    OR逻辑OR运算符。如果两个条件中的任何一个为真,则条件为真。A<>0 OR B<>0结果为:True
    NOT逻辑NOT运算符。用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。NOT(a<>0 OR b<>0)结果为:False
    XOR

    逻辑排除。它是NOTOR运算符的组合。如果表达式中只有一个表达式的值为True,则结果为True
     

    (a<>0 XOR b<>0)结果为:True

    d、连接运算符

    VBA支持以下连接运算符。

    假设变量A=5,变量B=10,则

    运算符描述示例
    +将两个值添加为变量,其值是数字A + B = 15
    &连接两个值A & B = 510

     

    假设变量A = "Microsoft",变量B = "VBScript",则 

    运算符描述示例
    +连接两个值A + B 的结果为MicrosoftVBScrip
    &连接两个值A + B 的结果为MicrosoftVBScrip

    e、like运算符

    Like运算符的语法
    Like运算符用于判断给定的字符串是否与指定的模式相匹配,其语法为:
    结果=<字符串> Like <模式>
    说明:
    (1) <字符串>为文本字符串或者对包含文本字符串的单元格的引用,是要与<模式>相比较的字符串,数据类型为String型。
    <模式>数据类型为String型,字符串中可以使用一些特殊字符,其它的字符都能与它们相匹配,其如下表1所示。
    <模式>的字符                       与<字符串>匹配的文本
    ?                                          任意单个字符
    *                                            零或者多个字符
    #                                          任意单个数字(0-9)
    [charlist]                                字符列表中的任意单个字符
    [!charlist]                               不在字符列表中的任意单个字符
    [ ]                                          空字符串(“ “)
    (2) <结果>为Boolean型。如果字符串与指定的模式相匹配,则<结果>为True;否则<结果>为False。如果字符串或者模式Null,则结果为Null。
    (3) Like运算符缺省的比较模式为二进制,因此区分大小写。可以用Option Compare语句来改变比较模式,如改变为文本比较模式,则不区分大小写。
    (4) [Charlist]将模式中的一组字符与字符串中的一个字符进行匹配,可以包含任何一种字符,包括数字;在[Charlist]中使用连字号(-)产生一组字符来与字符串中的一个字符相匹配,如[A-D]与字符串相应位置的A、B、C或D匹配;在[Charlist]中可以产生多组字符,如[A-D H-J];各组字符必须是按照排列顺序出现的;在Charlist的开头或结尾使用连字号(-)与连字号自身相匹配,例如[-H-N]与连字号(-)或H到N之间的任何字符相匹配。
    在Charlist中的一个字符或者一组字符前加上!号,表明与该字符或该组字符之外的所有字符匹配,如[!H-N]与字符H-N范围之外的所有字符匹配;而在[]外使用!号则只匹配其自身。要使用任何特殊字符作为匹配字符,只需将它放在[]中即可,例如[?]表明要与一个问号进行匹配。
    为了与左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。

    以实例来认识Like运算符
    下面的代码演示了Like运算符在不同情况下所得的结果。
    Sub testLikePattern()
    Dim bLike1 As Boolean, bLike2 As Boolean
    Dim bLike3 As Boolean, bLike4 As Boolean
    Dim bLike5 As Boolean, bLike6 As Boolean
    Dim bLike7 As Boolean
    bLike1 = "aBBBa" Like "a*a"    ' 返回 True
    bLike2 = "F" Like "[A-Z]"    ' 返回 True
    bLike3 = "F" Like "[!A-Z]"    ' 返回 False
    bLike4 = "a2a" Like "a#a"    ' 返回 True
    bLike5 = "aM5b" Like "a[L-P]#[!c-e]"    ' 返回 True
    bLike6 = "BAT123khg" Like "B?T*"    ' 返回 True
    bLike7 = "CAT123khg" Like "B?T*"    ' 返回 False
    MsgBox "Like运算符不同情形匹配结果:" & vbCrLf & " ""aBBBa"" Like ""a*a"" 结果为True." & _
         vbCrLf & """F"" Like ""[A-Z]""结果为True." & _
         vbCrLf & """F"" Like ""[!A-Z]""结果为False." & _
         vbCrLf & """a2a"" Like ""a#a""结果为True." & _
         vbCrLf & """aM5b"" Like ""a[L-P]#[!c-e]""结果为True." & _
         vbCrLf & """BAT123khg"" Like ""B?T*""结果为True." & _
         vbCrLf & """CAT123khg"" Like ""B?T*""结果为False."
    End Sub

    Like运算符的使用及示例

    [示例一] 利用Like运算符自定义字符比较函数
    IsLike函数非常简单,如果文本字符串与指定的模式匹配,该函数则返回True,代码如下:
    Function IsLike(text As String,pattern As String) As Boolean
       IsLike= text Like pattern
    End Function
    该函数接受两个参数:
    text:字符串或者是对包含字符串的单元格的引用。
    pattern:包含有如上表1所示特殊字符的字符串。
    函数的使用:在工作表中输入下面所示公式,可以查看函数的结果。
    (1)下面的公式返回True。因为*匹配任意数量的字符。如果第一个参数是以“g”开始的任意文本,则返回True:
    =IsLike(“guitar”,”g*”)
    (2)下面的公式返回True。因为?匹配任意的单个字符。如果第一个参数是以“Unit12”,则返回False:
    =IsLike(“Unit1”,”Unit?”)
    (3)下面的公式返回True,原因是第一个参数是第二个参数的某个单个字符:
    =IsLike(“a”,”[aeiou]”)
    (4)如果单元格A1包含a,e,I,o,u,A,E,I,O或者U,那么下面的公式返回True。使用Upper函数作为参数,可以使得公式不区分大小写:
    =IsLike(Upper(A1),Upper(“[aeiou]”))
    (5)如果单元格A1包含以“1”开始并拥有3个数字的值(也就是100到199之间的任意整数),那么下面的公式返回True:
    =IsLike(A1,”1##”)

    [示例二] 判断文本框的输入结果
    打开一个工作簿,选择菜单“工具——宏——Visual Basic编辑器”或按Alt+F11组合键,打开VBE编辑器。在VBE编辑器中,选择菜单“插入——用户窗体”,新建一个用户窗体,点击控件工具箱中的“文本框”控件和“按钮”控件,在用户窗体上放置一个“文本框”和一个“按钮”,并在用户窗体中对它们的大小和位置进行合理调整,将按钮的标题改为

    双击刚创建的“按钮”控件,并输入下面的代码:
    Private Sub CommandButton1_Click()
    Dim sEnd As String, sPattern As String
    sEnd = "in Office"
    sPattern = "[F W]*" & sEnd
    If TextBox1.Text Like sPattern Then
        MsgBox "输入正确"
    Else
        MsgBox "输入错误"
    End If
    End Sub
    示例说明:本代码中[F W]*表示字符以F或W开头的字符串,使用&连接符将其与变量sEnd所代表的字符串“in Office”相连接。如果您在文本框中输入以字符F或字符W开头并以“in Office”结尾的句子,将显示“输入正确”消息框,否则将显示“输入错误”的消息框。在VBE编辑器中点击运行按钮或按F5键,运行该代码试试。当您在文本框中输入“Fanjy in Office”后,单击按钮,将显示“输入正确”消息框。注意,本示例区分大小写。

     

    在Excel中实现字数统计
    (1) 使用Len工作簿函数进行简单的字数统计
    '① - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '对当前单元格进行字数统计

    Sub TotalCellCharNum()
    Dim i As Long
    i = Len(ActiveCell.Value)
    MsgBox "当前单元格的字数为:" & Chr(10) & i
    End Sub
    '② - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '对所选的单元格区域进行字数统计

    Sub TotalSelectionCharNum()
    Dim i As Long
    Dim rng As Range
    For Each rng In Selection
        i = i + Len(rng.Value)
    Next rng
    MsgBox "所选单元格区域的字数为:" & Chr(10) & i
    End Sub

    (2) 使用Like运算符进行较复杂的字数统计
    '③ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '对当前单元格中的文本分类进行字数统计

    Sub SubTotalCellCharNum()
    Dim str As String, ChineseChar As Long
    Dim Alphabetic As Long, Number As Long
    Dim i As Long, j As Long
    j = Len(ActiveCell.Value)
    For i = 1 To Len(ActiveCell)
        str = Mid(ActiveCell.Value, i, 1)
        If str Like "[一-龥]" = True Then
          ChineseChar = ChineseChar + 1 '汉字累加
        ElseIf str Like "[a-zA-Z]" = True Then
          Alphabetic = Alphabetic + 1 '字母累加
        ElseIf str Like "[0-9]" = True Then
          Number = Number + 1 '数字累加
        End If
    Next
    MsgBox "当前单元格中共有字数" & j & "个,其中:" & vbCrLf & "汉字:" & ChineseChar & "个" & _
         vbCrLf & "字母:" & Alphabetic & "个" & _
         vbCrLf & "数字:" & Number & "个", vbInformation, "文本分类统计"
    End Sub
    '④ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    '对所选的单元格区域中的文本分类进行字数统计

    Sub SubTotalSelectionCharNum()
    Dim str As String, ChineseChar As Long
    Dim Alphabetic As Long, Number As Long
    Dim i As Long, rng As Range, j As Long
    For Each rng In Selection
        j = j + Len(rng.Value)
        For i = 1 To Len(rng)
          str = Mid(rng.Value, i, 1)
          If str Like "[一-龥]" = True Then
            ChineseChar = ChineseChar + 1 '汉字累加
          ElseIf str Like "[a-zA-Z]" = True Then
            Alphabetic = Alphabetic + 1 '字母累加
          ElseIf str Like "[0-9]" = True Then
            Number = Number + 1 '数字累加
          End If
        Next
    Next
    MsgBox "所选单元格区域中共有字数" & j & "个,其中:" & vbCrLf & "汉字:" & ChineseChar & "个" & _
         vbCrLf & "字母:" & Alphabetic & "个" & _
         vbCrLf & "数字:" & Number & "个", vbInformation, "文本分类统计"
    End Sub

    小结
    上面对Like运算符的相关知识进行了介绍,在编写代码的过程中,可以灵活使用Like运算符。例如,可以用来进行字符串的比较,然后进行相应的统计或者执行进一步的操作,或者用来判断用户输入是否正确,以判断程序是否向下运行,等等

    五、条件语句

    VBA中条件语句分为单条件的判断和多条件的判断

    1、单条件判断

    if  判断1   then

    代码 1    

    else   

    代码  2    

    end if 

    当条件成立时执行代码1的操作,否则执行代码2的操作。

    举例:

    如果A1单元格中的数字大于等于60,B1单元格中显示及格,否则显示不及格。

    Sub 判断()

    If Range('A1') >= 60 Then

    Range('b1').Value = '及格'

    Else

    Range('b1').Value = '不及格'

    End If

    End Sub

    2、多条件判断

    以下是在大多数编程语言中找到的典型条件判断结构的一般形式。

    VBA提供了以下类型的条件判断声明

    编号语句描述
    1if语句一个if语句由一个布尔表达式和一个或多个语句组成。
    2if…else语句

    if else语句由一个布尔表达式和一个或多个语句组成。如果条件为True,则执行If语句下的语句。如果条件为false,则执行脚本的Else部分。//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/vba/vba_decisions.html
     

    3if…elseif…else语句

    一个if语句,后跟一个或多个else...if语句,它由布尔表达式组成,接着是一个可选的else语句,当所有条件变为false时执行else语句块。//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/vba/vba_decisions.html
     

    4嵌套if语句一个ifelseif语句中可以嵌套另一个ifelseif语句。
    5switch语句一个switch语句允许一个变量与一个值列表进行测试。

    条件判断有两种语

    1、单条件的判断语句:

    学习函数时我们经常用IF来判断,VBA 中也一样。语法如下:

    if  判断1   then

    代码 1    

    else   

    代码  2    

    end if 

     

    当条件成立时执行代码1的操作,否则执行代码2的操作。

    举例:

    如果A1单元格中的数字大于等于60,B1单元格中显示及格,否则显示不及格。

    Sub 判断()

    If Range('A1') >= 60 Then

    Range('b1').Value = '及格'

    Else

    Range('b1').Value = '不及格'

    End If

    End Sub

    我们在A1中输入不同数据,然后按F5运行代码试试看B1中的结果。

    2、多条件的判断语句

    多条件判断有两种语句

    1)、

    if 判断1 then

    代码1

    elseif 判断2  then

    代码2

    elseif 判断3  then

    代码3

    ……

    else

    end if

     

    举例:

    如果A1单元格中的数字大于等于85,B1单元格中显示优秀,若大于等于60,B1中显示良好,小于60,显示差。

    Sub 多重判断1()

    If Range('A1') >= 85 Then

    Range('b1').Value = '优秀'

    ElseIf Range('A1') >= 60 Then

    Range('b1').Value = '良好'

    ElseIf Range('A1') < 60 Then

    Range('b1').Value = '差'

    End If

    End Sub

    2)、

    select case 判断的对象

    case (is)条件1           

    代码1

    case(is)条件2

    代码2

    ……

    case ( is) 条件N

    代码n

    end select

    还是上面的例子,我们试试用select case 来写

    Sub 多重判断2()

    Select Case Range('A1')

    Case Is >= 85

    Range('b1').Value = '优秀'

    Case Is >= 60

    Range('b1').Value = '良好'

    Case Is < 60

    Range('b1').Value = '差'

    End Select

    End Sub

    如果条件是单个自变量,用select case 写起来更加方便,而且在case后面直接写比较运算符时,case后面的is会自动添加上去,代码显得更加简洁。

    六、循环语句

    VBA提供以下类型的循环来处理循环需求A提供以下类型的循环来处理循环需求

    编号循环类型描述
    1for循环多次执行一系列语句,缩写管理循环变量的代码。
    2for…each循环如果组中至少有一个元素并为组中的每个元素重复执行,则执行此操作。
    3while…wend循环这在执行循环体之前测试条件。
    4do…while循环do..while语句只要条件为True就会被执行(即,)循环应该被重复直到条件为False
    5do…until循环只要条件是Falsedo..Until语句就会被执行(即,)循环应该被重复直到条件为真。

    1、For 循环

    For循环是一种重复控制结构,它允许开发人员有效地编写需要执行特定次数的循环

    语法:

    For counter = start To end [Step stepcount]
          [statement 1]
          [statement 2]
          ....
          [statement n]
          [Exit For]
          [statement 11]
          [statement 22]
          ....
          [statement n]

          Next

    流程图:

    控制流程:

    • For步骤先执行。这一步允许您初始化任何循环控制变量,并递增步进计数器变量。
    • 其次,评估条件。 如果评估结果为:True,则循环体被执行。 如果为False,则循环体不会执行,并且控制流将跳转到紧跟在For循环之后的下一个语句。
    • 在执行For循环体之后,控制流将跳转到下一个语句。 这个语句更新任何循环控制变量。 它根据步计数器值进行更新。
    • 现在条件再次评估。 如果条件为:True,则循环执行并且该过程重复自身(循环体,然后递增步,然后再次条件)。 条件变为False后,For循环终止。

    示例:

    Private Sub Constant_demo_Click()
          Dim a As Integer
          a =10 
          For i = 0 To a Step 2
                MsgBox ("The value is i is : " & i)
          Next
    End Sub

    当上面的代码被编译并执行时,会产生类似以下结果。
    The value is i is : 0
    The value is i is : 2
    The value is i is : 4
    The value is i is : 6
    The value is i is : 8
    The value is i is : 10
     

    2、For Each 循环

    For Each循环用于为数组或集合中的每个元素执行语句或一组语句。
    For Each循环与For循环类似; 然而,For Each循环是为数组或组中的每个元素执行的。 因此,这种类型的循环中将不存在步计数器。 它主要用于数组或在文件系统对象的上下文中使用,以便递归操作。

    语法:

    For Each element In Group
       [statement 1]

       [statement 2]
       ....
       [statement n]
       [Exit For]
       [statement 11]
       [statement 22]

    Next

    示例:

    Private Sub Constant_demo_Click()  
         'fruits is an array
         fruits = Array("苹果", "橙子", "樱桃")
         Dim fruitnames As Varian
         'iterating using For each loop.
         For Each Item In fruits
               fruitnames = fruitnames & Item & Chr(10)
         Next
         MsgBox fruitnames
    End 
    Sub

    当执行上面的代码时,它会在每行中打印一个项目的所有水果名称。

    3、while…wend循环

    While...Wend循环中,如果条件为True,则会执行所有语句,直到遇到Wend关键字。

    如果条件为false,则退出循环,然后控件跳转到Wend关键字后面的下一个语句。

    语法:

    While condition(s)

           [statements 1]

           [statements 2]
       ...
           [statements n]

    Wend

    流程图:

    示例:

    Private Sub Constant_demo_Click()
         Dim Counter :  Counter = 10   
         While Counter < 15     ' Test value of Counter.
              Counter = Counter + 1   ' Increment Counter.
              msgbox "The Current Value of the Counter is : " & Counter
         Wend   ' While loop exits if Counter Value becomes 15.

    End Sub

    当上面的代码被执行时,它会在消息框中打印以下内容。

    The Current Value of the Counter is : 11 
    The Current Value of the Counter is : 12 
    The Current Value of the Counter is : 13 
    The Current Value of the Counter is : 14 
    The Current Value of the Counter is : 15

    4、do....while循环

    语法:

    Do While condition
         [statement 1]
         [statement 2]
          ...
         [statement n]
         [Exit Do]
         [statement 1]
         [statement 2]
         ...
         [statement n]
    Loop

    流程图:

    示例:

    以下示例使用Do...while循环来检查循环开始处的条件。循环内部的语句只有在条件成立时才被执行。
    Private Sub Constant_demo_Click()
       Do While i < 5
          i = i + 1
          msgbox "The value of i is : " & i
       Loop
    End Sub
    Vb
    当上面的代码被执行时,它会在消息框中输出下面的输出。
    The value of i is : 1
    The value of i is : 2
    The value of i is : 3
    The value of i is : 4
    The value of i is : 5

    备用/替代语法

    另外还有一个替代语句for...while循环,用于在循环结束时检查条件。下面的例子解释了这两种语法的主要区别。

    语法 :
    Do 
       [statement 1]
       [statement 2]
       ...
       [statement n]
       [Exit Do]
       [statement 1]
       [statement 2]
       ...
       [statement n]
    Loop

    While condition

    示例:

    以下示例使用Do...while循环来检查循环结束时的条件。循环内的语句至少执行一次,即使条件为False

    Private Sub Constant_demo_Click() 
       i = 10
       Do
          i = i + 1
          MsgBox "The value of i is : " & i
       Loop While i < 3 'Condition is false.Hence loop is executed once.
    End Sub

    运行结果为:

    The value of i is: 11

    5、do...untile循环

    语法:

    第一种语法:
    Do Until 条件式
    条件式为True为止,循环处理
    Loop

    第二种语法:
    Do
    条件式为True为止,循环处理
    Loop Until 条件式
    示例:

    下面分别针对如上的两种语法,给出相应的例子:
    如下代码功能为:'单元格A1~A10内,填入1~10
    i = 1
    Do Until i = 11
    Worksheets("Sheet1").Cells(i, 1).Value = i
    i = i + 1
    Loop

    如下代码的功能为:'单元格A1~A10内,填入1~10

    i = 10
    Do
    Worksheets("Sheet1").Cells(i, 1).Value = i
    i = i + 1
    Loop Until i = 11

    循环控制语句:

    循环控制语句从正常顺序改变执行。 当执行离开一个作用域时,循环中的所有其余语句都不会被执行。

    VBA支持以下控制语句。

    编号控制语句描述
    1Exit For 语句终止For循环语句并将执行转移到循环之后的语句
    2Exit do  语句终止Do While语句并将执行转移到循环之后的语句

    6、Exit For语句

    流程图:

    示例:

    以下使用Exit For语句的示例。 如果计数器(i)的值达到4,则退出For循环,并在For循环之后立即跳转到下一个语句。
    Private Sub Constant_demo_Click()
       Dim a As Integer
       a = 10
       For i = 0 To a Step 2 'i is the counter variable and it is incremented by 2
          MsgBox ("The value is i is : " & i)
          If i = 4 Then
             i = i * 10 'This is executed only if i=4
             MsgBox ("The value is i is : " & i)
             Exit For 'Exited when i=4
          End If
       Next
    End Sub
    Vb
    当执行上面的代码时,它将在消息框中输出以下输出。
    The value is i is : 0
    The value is i is : 2
    The value is i is : 4
    The value is i is : 40

    7、Exit Do 语句

    Exit Do被执行时,控制器在Do循环之后立即跳转到下一个语句。

    示例:

    以下示例演示如何使用Exit Do语句,如果计数器的值达到10,则退出Do循环,并在For循环之后立即跳转到下一个语句。
    Private Sub Constant_demo_Click()
       i = 0
       Do While i <= 100
          If i > 10 Then
             Exit Do   ' Loop Exits if i>10
          End If
          MsgBox ("The Value of i is : " & i)
          i = i + 2
       Loop
    End Sub
    Vb
    当上面的代码被执行时,它会在消息框中输出下面的输出。
    The Value of i is : 0
    The Value of i is : 2
    The Value of i is : 4
    The Value of i is : 6
    The Value of i is : 8
    The Value of i is : 10

    NOTE2

    七、子程序

    子程序(Sub Procedures,也叫子过程)与函数类似,但有一些差异。

      a、子过程不需要有返回一个值,而函数可能会或可能不会有返回一个值。
      b、子程序可以不用call关键字来调用。
      c、子程序总是包含在Sub和End Sub语句中。

    示例:

    Sub Area(x As Double, y As Double)
       MsgBox x * y
    End Sub
    要在脚本的某处调用过程,可以使用函数进行调用。无法使用与函数相同的方式来调用子过程,因为子过程不会返回值。
    Function findArea(Length As Double, Width As Variant)
       area Length, Width    ' To Calculate Area 'area' sub proc is called
    End Function
    Vb
    现在只能调用该函数,而不能调用子程序,如下图所示

    该区域的面积仅在消息框中计算和显示。

    结果单元显示为零,因为计算的面积值不是从函数返回的。简而言之,不能直接在Excel工作表中调用子程序。

    八、宏注释

     注释用于记录程序逻辑和用户信息,其他程序员将来可以阅读并理解相同的代码无缝工作。
    它包括由开发者,修改者以及还可以包括合并逻辑的信息。 解释器在执行时忽略注释。
    VBA中的注释用两种方法表示,它们分别如下 

    任何以单引号(')开头的语句都被视为注释。以下是注释的一个例子。
    ' This Script is invoked after successful login 
    ' Written by : Yiibai Yiibai
    ' Return Value : True / False
    Vb
    任何以关键字"REM"开头的语句。以下是注释的一个例子。
    REM This Script is written to Validate the Entered Input 
    REM Modified by  : Yiibai Yiibai /user2

    九、VBA事件

    在VBA中,要手动更改单元格或单元格值范围时,可以触发事件驱动的编程。 更改事件可能会使事情变得更容易,但您可以非常快速地结束一个完整的格式化页面。VBA中有两种事件 -

    • 工作表事件
    • 工作簿事件

    1、工作表事件

    工作表事件在工作表中发生更改时被触发。 它是通过右键单击工作表选项卡并选择“查看代码”,然后粘贴代码来创建的。

    用户可以选择这些工作表中的每一个,并从下拉列表中选择“工作表”以获取所有支持的工作表事件的列表。

    以下是可以由用户添加的支持的工作表事件。
    Private Sub Worksheet_Activate() 
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
    Private Sub Worksheet_Calculate() 
    Private Sub Worksheet_Change(ByVal Target As Range) 
    Private Sub Worksheet_Deactivate() 
    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    示例:

    在这个示例中,只需要双击之前显示一条消息。

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
       MsgBox ("这是一个双击事件触发提示")
    End Sub
    Vb
    双击任何单元格后,消息框将显示给用户,如以下屏幕截图所示。

    2、工作簿事件

    工作簿事件总是在工作簿发生更改时触发的。可以通过选择“ThisWorkbook”并从下拉列表中选择“workbook”来添加工作簿事件的代码,如下图所示。

    立即将Workbook_open子过程显示给用户,如以下屏幕截图所示。

    以下是可以由用户添加的受支持的工作簿事件。
    Private Sub Workbook_AddinUninstall() 
    Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Private Sub Workbook_BeforePrint(Cancel As Boolean) 
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Private Sub Workbook_Deactivate() 
    Private Sub Workbook_NewSheet(ByVal Sh As Object) 
    Private Sub Workbook_Open() 
    Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
    Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    Private Sub Workbook_WindowActivate(ByVal Wn As Window) 
    Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) 
    Private Sub Workbook_WindowResize(ByVal Wn As Window)
    Vb
    例子只需要向用户显示一条消息,无论何时创建新的工作表,都会成功创建新的工作表。
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
       MsgBox "New Sheet Created Successfully"
    End Sub
    Vb
    在创建一个新的excel工作表后,会向用户显示一条消息,如以下屏幕截图所示。

     

    十、VBA错误处理

    在(VBScript/VBA)编程中有三种类型的错误:

    • 语法错误
    • 运行时错误
    • 逻辑错误

    语法错误:

    语法错误(也称为解析错误)发生在VBScript的解释时间。 例如,下面一行导致语法错误,因为它缺少一个右括号。
    Function ErrorHanlding_Demo()
       dim x,y
       x = "Yiibai Yiibai"
       y = Ucase(x
    End Function
    Vb
    运行时错误

    运行时错误(也称为异常)在执行期间发生,在解释之后。
    例如,下面的行会导致运行时错误,因为这里的语法是正确的,但是在运行时它正在尝试调用fnmultiply,但这是一个不存在的函数。
    Function ErrorHanlding_Demo1()
       Dim x,y
       x = 10
       y = 20
       z = fnadd(x,y)
       a = fnmultiply(x,y)
    End Function

    Function fnadd(x,y)
       fnadd = x + y
    End Function
    Vb
    逻辑错误

    逻辑错误可能是最难追查的错误类型。这些错误不是语法或运行时错误的结果。 相反,当您在驱动脚本的逻辑中犯了一个错误,并且没有得到预期的结果时,就会发生这种情况。
    你可能无法捕捉到这些错误,因为这取决于业务需求,在程序中加入什么类型的逻辑。
    例如,将一个数字除以零,或写入一个进入无限循环的脚本。
    Error对象

    假设我们有一个运行时错误,那么通过显示错误信息来停止执行。作为开发人员,如果想捕获错误,那么使用Error对象。
    例子
    在下面的例子中,Err.Number给出错误号,Err.Description给出错误描述。
    Err.Raise 6   ' Raise an overflow error.
    MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
    Err.Clear   ' Clear the error.
    Vb
    错误处理

    VBA启用错误处理例程,也可以用来禁用错误处理例程。没有On Error语句,发生的任何运行时错误都是致命的:显示错误消息,并且执行突然停止。
    On Error { GoTo [ line | 0 | -1 ] | Resume Next }

    编号关键字描述
    1GoTo line

    启用在所需的行参数中指定的行开始的错误处理例程。指定的行必须与On Error语句在相同的过程中,否则将发生编译时错误。//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/vba/vba_error_handling.html
     

    2GoTo 0禁用当前过程中启用的错误处理程序并将其重置为Nothing
    3GoTo -1禁用当前过程中启用的异常并将其重置为Nothing
    4Resume Next指定发生运行时错误时,控制权转到发生错误的语句之后的语句,并从该点继续执行。

     

    示例:

    Public Sub OnErrorDemo()
       On Error GoTo ErrorHandler   ' Enable error-handling routine.
       Dim x, y, z As Integer
       x = 50
       y = 0
       z = x / y   ' Divide by ZERO Error Raises

       ErrorHandler:    ' Error-handling routine.
       Select Case Err.Number   ' Evaluate error number.
          Case 10   ' Divide by zero error
             MsgBox ("You attempted to divide by zero!")
          Case Else
             MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
       End Select
       Resume Next
    End Sub

    十一、VBA文本文件

    可以读取Excel文件,并使用VBA将单元格的内容写入文本文件。VBA允许用户使用两种方法处理文本文件 -

    • 文件系统对象(FSO)
    • 使用Write命令

    1、文件系统对象(FSO)

    FSO对象帮助开发人员使用驱动器,文件夹和文件

    编号对象类型描述
    1DriveDrive是一个对象。 包含收集有关连接到系统的驱动器的信息的方法和属性。
    2DrivesDrives是一个集合。 它提供了连接到系统的驱动器的物理或逻辑列表。
    3FileFile是一个对象。 它包含允许开发人员创建,删除或移动文件的方法和属性
    4FilesFiles是一个集合。 它提供了一个文件夹中包含的所有文件的列表。
    5FolderFolder是一个对象。 它提供了允许开发人员创建,删除或移动文件夹的方法和属性。
    6FoldersFolders是一个集合。 它提供了一个文件夹内所有文件夹的列表。
    7TextStreamTextStream是一个对象。 它使开发人员能够读写文本文件。

    Drive

    Drive 是一个对象,它提供对特定磁盘驱动器或网络共享的属性的访问。 Drive对象支持以下属性 -

    • AvailableSpace
    • DriveLetter
    • DriveType
    • FileSystem
    • FreeSpace
    • IsReady
    • Path
    • RootFolder
    • SerialNumber
    • ShareName
    • TotalSize
    • VolumeName

    示例:

    第1步 - 在使用FSO进行脚本编写之前,应该启用Microsoft脚本运行时。请导航到工具->引用,如以下屏幕截图所示。

    第2步 - 添加“Microsoft脚本运行时间”,然后单击确定。

    第3步 - 添加想要写入文本文件中的数据,这里添加一个命令按钮。

    第4步 - 现在运行脚本。

    Sub CommandButton1_Click()
       Const ForReading = 1, ForWriting = 2, ForAppending = 3
       Dim FilePath As String
       Dim CellData As String
       Dim LastCol As Long
       Dim LastRow As Long
       LastCol = ActiveSheet.UsedRange.Columns.Count
       LastRow = ActiveSheet.UsedRange.Rows.Count

        ' Create a TextStream.
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set stream = fso.OpenTextFile("F:\worksp\vba\Support.log", ForWriting, True)

       CellData = ""
       ' LastRow = 3
       LastCol = 3
       For i = 1 To LastRow
          For j = 1 To LastCol
             CellData = Trim(ActiveCell(i, j).Value)
             stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData
          Next j
       Next i

       stream.Close
       MsgBox ("Job Done")

    End Sub

    执行脚本时,请确保将光标放在工作表的第一个单元格中。 Support.log文件的创建方式如下面“F:\worksp\vba”的目录,如下的截图所示。

    该文件的内容,如以下屏幕截图中所示 - 
    The Value at location (1,1)姓名
    The Value at location (1,2)性别
    The Value at location (1,3)城市
    The Value at location (2,1)张三
    The Value at location (2,2)男
    The Value at location (2,3)北京
    The Value at location (3,1)李四
    The Value at location (3,2)男
    The Value at location (3,3)北京
    The Value at location (4,1)王五
    The Value at location (4,2)男
    The Value at location (4,3)上海
    The Value at location (5,1)李小丽
    The Value at location (5,2)女
    The Value at location (5,3)深圳
    The Value at location (6,1)Linsa
    The Value at location (6,2)女
    The Value at location (6,3)深圳

    2、Write命令

    与FSO不同,不需要添加任何引用,但是,我们将无法使用驱动器,文件和文件夹。也能够将流添加到文本文件。

    示例:

    Sub CommandButton1_Click()
       Const ForReading = 1, ForWriting = 2, ForAppending = 3
       Dim FilePath As String
       Dim CellData As String
       Dim LastCol As Long
       Dim LastRow As Long

       LastCol = ActiveSheet.UsedRange.Columns.Count
       LastRow = ActiveSheet.UsedRange.Rows.Count

       FilePath = "F:\worksp\vba\write.txt"
       Open FilePath For Output As #2

       CellData = ""
       LastCol = 3
       For i = 1 To LastRow
          For j = 1 To LastCol
             CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value)
             Write #2, CellData
          Next j
       Next i

       Close #2
       MsgBox ("Job Done")

    End Sub

    执行该脚本时,将在“F:\worksp\vba”位置创建“write.txt”文件,如以下屏幕截图所示。

    该文件的内容显示如以下屏幕截图

     

    十二、VBA生成图标示例

    使用VBA,可以根据特定标准生成图表。下面通过一个例子来看看它如何实现

    第1步 - 输入要生成图形的数据。

    第2步 - 创建3个按钮 - 一个生成条形图,另一个生成饼图,另一个生成柱形图。

    第3步 - 开发一个宏来生成这些类型的图表。

    ' Procedure to Generate Pie Chart
    Private Sub fn_generate_pie_graph_Click()
       Dim cht As ChartObject
       For Each cht In Worksheets(1).ChartObjects
          cht.Chart.Type = xlPie
       Next cht
    End Sub

    ' Procedure to Generate Bar Graph
    Private Sub fn_Generate_Bar_Graph_Click()
       Dim cht As ChartObject
       For Each cht In Worksheets(1).ChartObjects
          cht.Chart.Type = xlBar
       Next cht
    End Sub

    ' Procedure to Generate Column Graph
    Private Sub fn_generate_column_graph_Click()
       Dim cht As ChartObject
       For Each cht In Worksheets(1).ChartObjects
          cht.Chart.Type = xlColumn
       Next cht
    End Sub
    第4步 - 点击相应的按钮,图表被创建。 在下面的输出中,点击生成饼图按钮。

    十三、VBA自定义函数

    函数是一组可重复使用的代码,可以在程序中的任何地方调用。这消除了一遍又一遍地编写相同的代码的需要。这使程序员能够将一个大程序划分成许多小的可管理的功能模块。
    除了内置函数外,VBA还允许编写用户定义的函数。 在本章中,我们将学习如何在VBA中编写自己的函数。

    1、函数定义

    一个VBA函数可以有一个可选的return语句。如果要从函数返回值,则可使用return语句。例如,可以在一个函数中传递两个数字,然后从函数中返回它们的乘积。

    注 - 函数可以返回由逗号分隔的多个值,作为分配给函数名称本身的数组。

    在使用函数之前,我们需要定义这个特定的函数。 在VBA中定义函数的最常见的方法是使用Function关键字,后跟一个唯一的函数名称,它可能会也可能不会带有一个带有End Function关键字的参数列表和一个语句,这表示函数的结束。以下是定义函数的基本语法。
    基本语法
    Function Functionname(parameter-list)
       statement 1
       statement 2
       statement 3
       .......
       statement n
    End Function

    示例:

    添加以下函数计算返回面积。请注意,可以使用函数名称本身返回一个值/值。
    Function findArea(Length As Double, Optional Width As Variant)
       If IsMissing(Width) Then
          findArea = Length * Length
       Else
          findArea = Length * Width
       End If
    End Function
    调用函数

    要调用函数,请使用函数名称调用函数,如以下屏幕截图所示。

    计算面积的结果输出如下所示将显示给用户。

    十四、数组

    1、声明:

    我们都知道,一个变量是一个存储值的容器。 有时,开发人员希望一次可以在一个变量中保存多个值。 当一系列值存储在单个变量中时,则称为数组变量。
    数组声明数组声明的方式与声明变量相同,只是数组变量的声明使用括号。 在下面的例子中,括号里提到了数组的大小。参考以下示例 - 
    'Method 1 : Using Dim
    Dim arr1()    'Without Size

    'Method 2 : Mentioning the Size
    Dim arr2(5)  'Declared with size of 5

    'Method 3 : using 'Array' Parameter
    Dim arr3
    arr3 = Array("apple","Orange","Grapes")

    在上面代码中,

    a、虽然数组大小被指定为5,但是当数组索引从零开始时,它可以保持6个值。
    b、数组索引不能是负数。
    c、VBScript数组可以在数组中存储任何类型的变量。因此,一个数组可以在一个数组变量中存储一个整数,字符串或字符。

    2、赋值

    通过为每个要分配的值指定一个数组索引值,将这些值分配给数组。它可以是一个字符串。

    示例:

    添加一个模块并添加以下代码 - 
    Private Sub Constant_demo_Click()
       Dim arr(5)
       arr(0) = "1"           'Number as String
       arr(1) = "VBScript"    'String
       arr(2) = 100            'Number
       arr(3) = 2.45            'Decimal Number
       arr(4) = #10/07/2013#  'Date
       arr(5) = #12.45 PM#    'Time

       msgbox("Value stored in Array index 0 : " & arr(0))
       msgbox("Value stored in Array index 1 : " & arr(1))
       msgbox("Value stored in Array index 2 : " & arr(2))
       msgbox("Value stored in Array index 3 : " & arr(3))
       msgbox("Value stored in Array index 4 : " & arr(4))
       msgbox("Value stored in Array index 5 : " & arr(5))
    End Sub

    当执行上面的函数时,它会产生下面的输出。
    Value stored in Array index 0 : 1
    Value stored in Array index 1 : VBScript
    Value stored in Array index 2 : 100
    Value stored in Array index 3 : 2.45
    Value stored in Array index 4 : 7/10/2013
    Value stored in Array index 5 : 12:45:00 PM

    3、多维数组

    数组不仅限于一个维度,但它们最多可以有60个维度。 二维数组是最常用的数组。

    示例:

    在下面的例子中,一个多维数组被声明为3行4列。
    Private Sub Constant_demo_Click()
       Dim arr(2,3) as Variant    ' Which has 3 rows and 4 columns
       arr(0,0) = "Apple" 
       arr(0,1) = "Orange"
       arr(0,2) = "Grapes"           
       arr(0,3) = "pineapple" 
       arr(1,0) = "cucumber"           
       arr(1,1) = "beans"           
       arr(1,2) = "carrot"           
       arr(1,3) = "tomato"           
       arr(2,0) = "potato"             
       arr(2,1) = "sandwitch"            
       arr(2,2) = "coffee"             
       arr(2,3) = "nuts"            

       msgbox("Value in Array index 0,1 : " &  arr(0,1))
       msgbox("Value in Array index 2,2 : " &  arr(2,2))
    End Sub
    当执行上面的函数时,它会产生下面的输出。
    Value stored in Array index : 0 , 1 : Orange
    Value stored in Array index : 2 , 2 : coffee

    4、ReDim语句

    ReDim语句用于声明动态数组变量并分配或重新分配存储空间。
    ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
    参数说明

    Preserve - 一个可选参数,用于在更改最后一个维度的大小时保留现有数组中的数据。
    Varname - 必需的参数,表示变量的名称,应遵循标准变量命名约定。
    Subscripts - 必需的参数,表示数组的大小。

    示例:

    在下面的例子中,数组已经被重新定义,当数组的现有大小发生改变时,这些值被保存下来。

    注意 - 调整数组的大小时,删除的元素中的数据将丢失。

    Private 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
    Vb
    当执行上面的函数时,它会产生下面的输出。
    XYZ
    41.25
    22
    3
    4
    5
    6
    7

    5、数组方法

    VBScript中有各种内置函数,可以帮助开发人员有效地处理数组。 下面列出了与数组一起使用的所有方法。

     

    编号方法描述
    1LBound它返回一个整数,对应于给定数组的最小下标。
    2UBound它返回一个整数,对应于给定数组的最大下标。
    3Split它返回一个包含指定数量值的数组。根据分隔符分割。
    4Join它返回一个包含数组中指定数量的子串的字符串。这是Split方法的一个完全相反的功能。
    5Filter它返回一个基于零的数组,该数组包含基于特定过滤条件的字符串数组的子集。
    6IsArray它返回一个布尔值,表示输入变量是否是一个数组。
    7Erase为数组变量恢复分配的内存。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Excel 中如何根据单元格内容删除行

    万次阅读 2018-10-29 18:15:33
    根据单元格内容快速删除行,首先需要选中含有该单元格内容的所有,然后删除。似乎在 Excel 当中除了 VBA 以外没有其他更快捷的方法能解决这个问题了。这里将推荐几个快速根据单元格内容删除的方法给你。 通过...

    根据单元格内容快速删除行,首先需要选中含有该单元格内容的所有行,然后删除。似乎在 Excel 当中除了 VBA 以外没有其他更快捷的方法能解决这个问题了。这里将推荐几个快速根据单元格内容删除行的方法给你。

    通过查找和替换删除含有特定单元格内容的行

    通过 VBA 代码删除含有特定单元格内容的行

    用 Kutools for Excel 删除含有特定单元格内容的行

     

    通过查找和替换删除含有特定单元格内容的行

    在 Excel 当中,查找和替换功能是非常强大有用的,它也可以用来根据某个特定值删除行。

    1. 按住 Ctrl + F 打开查找和替换对话框,然后在查找内容文本框里输入苹果(苹果就是你想要删除的行所依据的值)。如图所示:

    zh cn excel remove rows based on cell value 1

    2. 点击查找全部, 然后按 Ctrl + A 选中所有找到的结果。如图所示:

    zh cn excel remove rows based on cell value 2

    3. 点击关闭,你就会看到所有含有苹果的单元格都被选中了。右键点击打开右键菜单,选择删除。 如图所示:

    zh cn excel remove rows based on cell value 3

    4. 在删除对话框当中,选择整行

    zh cn excel remove rows based on cell value 4


    arrow blue right bubble 通过 VBA 代码删除含有特定单元格内容的行

    用 VBA 代码快速删除包含特定值的行,可以按照以下步骤来实现:

    Kutools for Excel囊括了120多種快速提升您 Excel 使用效率的工具。 60天內免費试用。

      免费下载Kutools for Excel                                 购买 Kutools for Excel

    1. 选中想要删除行的区域。

    2. 按住 Alt+ F11 打开 Microsoft Visual Basic for applications 窗口,然后点击插入 >> 模块,将下面代码复制粘贴到模块窗口当中。

    VBA 代码: 根据指定单元格内容删除行

    Sub DeleteRows()
    'Updateby20140314
    Dim rng As Range
    Dim InputRng As Range
    Dim DeleteRng As Range
    Dim DeleteStr As String
    xTitleId = "KutoolsforExcel"
    Set InputRng = Application.Selection
    Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
    DeleteStr = Application.InputBox("Delete Text", xTitleId, Type:=2)
    For Each rng In InputRng
        If rng.Value = DeleteStr Then
            If DeleteRng Is Nothing Then
                Set DeleteRng = rng
            Else
                Set DeleteRng = Application.Union(DeleteRng, rng)
            End If
        End If
    Next
    DeleteRng.EntireRow.Delete
    End Sub

    3. 点击 F5 运行代码,在弹出的窗口中选择需要应用代码的区域。

    zh cn excel remove rows based on cell value 5

    4. 点击确定,会弹出另外一个窗口让你选择所依据的单元格,如图所示:

    zh cn excel remove rows based on cell value 6

    5. 点击确定,含有苹果的行就被删除了。

    zh cn excel remove rows based on cell value 7zh cn arrowzh cn excel remove rows based on cell value 8

    但是对于 Excel 初学者而言,通过 VBA 代码就有点复杂。所以接下来介绍一个更简单易懂的方法来依据单元格值删除行。


    arrow blue right bubble 用 Kutools For Excel 删除含有特定单元格内容的行

    如果你已经安装了 Kutools for Excel,通过它的选择指定单元格功能可快速地根据某个特定值删除行。

    Kutools for Excel囊括了120多种快速提升您 Excel 使用效率的工具。60天內免费试用。

     免费下载Kutools for Excel                                 购买 Kutools for Excel

    1. 选中需要根据单元格内容删除行的区域。

    2. 点击 Kutools >> 选择 >> 选择指定单元格。如图所示:

    doc select specific cell

    3. 在选择指定单元格对话框当中,在选择类型中选择整行,然后在指定类型区域选择等于,并在旁边的文本框当中输入你想要依据的值(苹果)。 如图所示:

    zh cn excel remove rows based on cell value 10

    4. 点击确定或者应用,所有单元格值为苹果所在的行都被选中了。

    注意:点击确定以后会弹出一个对话框告诉你有多少行被选中了。

    5. 右键点击选中的行,在右键菜单中点击删除,所有含有苹果这一指定单元格内容的行将被删除。

    zh cn excel remove rows based on cell value 11

    点击这里了解更多关于选择指定单元格的内容。

    点击这里免费下载Kutools for Excel


     


    Is Your Problem Solved?

    Yes, I want to be more efficiency and save time when using Excel          No, the problem persists and I need further support

    Recommended Productivity Tools

    The following tools will greatly save your time and effort, which one do you prefer?
    Office TabUsing handy tabs in your Office, as the way of Chrome, Firefox and New Internet Explorer.
    Kutools for Excel: 120 powerful new functions for Excel, Increase your productivity in 5 minutes. Save two hours every day!
    Classic Menu for OfficeBring back familiar menus to Office 2007, 2010, 2013, 2016, 2019 and 365, as if it were Office 2000 and 2003.


    Kutools For Excel

    gold star1 Amazing! Increase your productivity in 5 minutes. Don't need any special skills, save two hours every day!

    gold star1 More than 200 powerful advanced functions which designed for Excel:

    • Merge Cell/Rows/Columns without Losing Data.
    • Combine and Consolidate Multiple Sheets and Workbooks.
    • Compare Ranges, Copy Multiple Ranges, Convert Text to Date, Unit and Currency Conversion.
    • Count by Colors, Paging Subtotals, Advanced Sort and Super Filter,
    • More Select/Insert/Delete/Text/Format/Link/Comment/Workbooks/Worksheets Tools...

    Screen shot of Kutools for Excel

    展开全文
  • EXCEL中删除空单元格所在

    千次阅读 2017-11-27 21:54:00
    前两天的一个下午,事比较多...想把这些同学的数据,整行全部删除,但人又太多,一个个弄起来比较麻烦。 问搞不搞得好? 其实,这是一个应用比较多的实例,而且在EXCEL中,可以很方便的来实现。 先来看一下场景!...
  • Vba菜鸟教程

    万次阅读 多人点赞 2020-05-02 18:21:15
    文章目录Vba菜鸟教程编辑器宏vba基本语法运算符变量语句简写语句sub语句调用语句退出语句分支语句循环语句判断语句公式与函数在单元格输入公式利用单元格公式返回值调用工作表函数利用vba函数自定义函数操作对象操作...
  • Excel_VBA教程

    2014-09-22 11:36:34
    30选择和列 73 31获取工作表信息 73 32往工作表输入数据 73 33返回工作表中的信息 74 34单元格格式 74 35移动,复制和删除单元格 74 36操作工作簿和工作表 75 37操作窗口(WINDOWS) 76 38管理EXCEL应用程序 76 39...
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    删除........................................................................6 打开........................................................................6 读入...........................................
  • VBA快速入门

    2009-11-09 15:00:47
    VBA 数组入门 [size=10.5pt] 一、初识数组 1 、数组就是一个列表或一组数据表。我们学习数组的目的,就是为了加速我们代码的效率。 2 、我们如何运用数组呢? 首先,必须声明数组。 ...
  • Excel VBA Range单元格操作实例

    千次阅读 2020-02-16 21:51:53
    四、Range操作 4.2取得最后一个非空单元格 xlDown/xlToRight/xlToLeft/xlUp Dim ERow as Long ...注意:使用PasteSpecial方法时指定xlPasteAll(粘贴全部),并不包括粘贴列宽 Sub CopyWithSameCol...
  • 快速上手开发。 基础 VBA分sub和function。function有返回值,但是sub没有返回值。 声明变量 sub 笔记() Dim 变量名 as 变量类型 '除了dim,还可以用 private ,public ,static END sub 可以用一个语句同时...
  • Excel VBA 基础教程

    2019-01-01 18:51:06
    目 录 一、VBA语言基础...................................................................................................................1 第一节 标识符....................................................
  • vba 是编辑宏的语言,可以把宏实现拓展。 1.带有宏的工作表要保存为 xlsm 格式,保存的时候会提示。 xlsx 保存的只是普通的 excel(excel安全机制导致的) 2.未使用相对引用录制的宏是 固定单元格的 (Range) ...
  • 本文介绍了利用 Excel 中的 Power Query 与 VBA 实现 CSV 格式数据清洗的关键步骤及思路,对实操过程中的性能提升等具体问题给出了解决办法,最后对此类问题给出了通用的注意事项,具备一定的指导性。
  • VBA:完美解决数独问题----全网最强

    千次阅读 2020-11-27 11:42:22
    代码: 解释: 函数名为 GetShuDuList(Row As Integer, Col As Integer) As String (核心函数) 用一个嵌套的For循环来读取数独表格的数据,第九代码,这里用了一个 IIF语句,意思就是,在指定的行号和列号...
  • 来吧!带你玩转 Excel VBA

    千次阅读 2013-08-15 10:03:06
    带你玩转 Excel VBA(含CD光盘1张)(双色)(附带近500个VBA思考练习题,Exceltip.net出品) 罗刚君  杨嘉恺 编著 ISBN 978-7-121-20627-6 2013年7月出版 定价:85.00元 648页 16开 编辑推荐...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    04154为单元格设置条件格式、删除条件格式 04155为单元格插入指向工作簿内部的超链接、删除超链接 04156为单元格插入指向工作簿外部的超链接、删除超链接 04157为单元格添加批注、删除批注 04158修改单元格的批注 ...
  • ExcelVBA程序设计.doc

    2011-04-05 21:32:51
    30选择和列 73 31获取工作表信息 73 32往工作表输入数据 73 33返回工作表中的信息 74 34单元格格式 74 35移动,复制和删除单元格 74 36操作工作簿和工作表 75 37操作窗口(WINDOWS) 76 38管理EXCEL应用程序 76 39...
  • Excel+VBA+之快速上手

    万次阅读 2009-12-31 10:55:00
    第一章 VBA语言基础 第一节 标识符 一.定义 标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常 量、过程、函数、类等的引用。 二.命名规则 1) 字母打头,由字母...
  • 003:多条件判断并非IF函数不可 004:如何按指定条件统计数量? 005:如何按指定条件求和与求平均? 006:如何按指定条件查询数据? 007:如何对行列汇总同时快速求和? 008:如何按不同分隔符获取数据? 011:混乱...
  • Excel VBA简介

    千次阅读 2017-07-05 14:28:36
    什么是VBA?为什么要学习VBA?  =========  VBA是Visual Basic For Application的简称,具体说来,可能让叶枫三天三夜也说不完,叶枫也只知道VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。很...
  • 目录1. 单元格对象与方法1.1 End 方法1.2 SpecialCells 方法 1. 单元格对象与方法 1.1 End 方法 ...这样,不管是Excel 2003 版本(最大65536)还是Excel 2007 及以后版本(最大1048576),都不会报错。
  • 来吧 带你玩转 Excel VBA
  • 《征服Excel VBA:让你工作效率倍增的239个实用技巧》分16 章,共239 个实例,详细介绍了Excel VBA 的使用技巧,主要内容包括:宏的应用技巧、VBE 使用技巧、程序控制流程、Range 对象操作、Worksheet 对象操作、...
  • Excel VBA程序设计.doc

    2009-07-06 22:16:12
    3.基于多于一个条件的决定 121 4.The If…Then…Else语句 122 5.If…Then…ElseIf语句 125 6.嵌套的If…Then语句 126 7.Select Case语句 127 8.和Case子句一起使用Is 128 9.确定Case子句里数值的范围 129 10.在Case...
  • 链接:https://docs.microsoft.com/zh-CN/office/vba/Library-Reference/Concepts/getting-started-with-vba-in-office 你是否面临着重复清理 Word 中五十个表格的工作? 你是否希望有一个特殊的文档能够在打开时...
  • Excel_VBA程序设计.pdf

    热门讨论 2009-08-31 23:05:20
    非常详尽的Excel_VBA程序设计,好不容易才整理搜索到的。 一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 第...
  • VBA中的字符串处理

    万次阅读 2011-11-16 11:43:18
    1 VBA中的字符串 2 VBA中处理字符串的函数  2.1 比较字符串  2.2 转换字符串  2.3 创建字符串  2.4 获取字符串的长度 ... 2.8 删除空格  2.9 返回字符代码  2.10 返回数值代表的相应字符  2.11
  • 这次京东破天荒出了个5折,而且是没有任何附加条件的5折,有需要的朋友不妨剁手。这书的厚度,买了当枕头那都是值得的。复制我你就会爱上我▼http://t.cn/A6zNQZfI2019集大成力作《Excel VBA经典代码应用大全》内容...
  • MongoDB快速入门(文档CRUD,批量创建文档,常用函数,多表关系)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 886
精华内容 354
关键字:

vba快速删除指定条件的行