如何在vba中使用if语句和else?

如果你想成为VBA高级用户,IF语句是必须的。而且,我相信您已经知道 IF 这个词并经常将其用作电子表格函数。

在 VBA 中,IF 的工作方式相同。它的基本思想是当条件为真时执行任务,否则不执行任何操作或执行其他操作。您可以简单地写作,也可以在复杂的情况下写作。

为了便于理解,我将其分为三个不同的部分。

  • 提供以供测试。
  • 条件为 TRUE 时执行的任务。
  • 条件为 FALSE 时执行的任务。

这就是现实生活中的样子:

在Excel中使用VBA IF语句代码

在上面的例子中,下雨是一个条件。如果这个条件为真,男孩就会打开雨伞,如果条件为假,他就会戴上帽子。条件在我们的日常生活中无处不在。但现在让我们回到我们的编码世界并探索它。

语法:VBA IF

VBA 中有三种不同类型的 IF 语句。

1. 如果-那么

IF THEN 是 IF 语句的最简单形式。我们需要做的就是指定一个要检查的条件,如果该条件为真,它将执行一项任务。但是,如果此条件为 FALSE,则它将不执行任何操作并立即跳线。

句法

 IF condition Then statement[s]

在上面的语法中,我们需要指定要评估的条件以及在该条件为 TRUE 时要执行的任务。

例子

vba if语句使用if then宏代码

在上面的示例中,我们检查了单元格 A1 是否包含值 10,如果包含,该语句将显示一个消息框,其中包含消息“单元格 A1 的值为 10”。

 Sub CheckValue() If Range("A1").Value = 10 Then MsgBox ("Cell A1 has value 10") End Sub

2. IF-then-else

如果您希望在条件为 TRUE 时执行特定任务,在条件为 FALSE 时执行不同的任务,则可以使用 IF-Then-Else 语句。

句法

 IF Condition Then Statement[s] Else Statement[s] End If

使用上面的语法,我们可以根据条件的结果执行不同的任务。如果条件为 TRUE,则执行“Then”后的语句;如果条件为 FALSE,则执行“Else”后的语句。

例子

 Sub CheckValue() If Range("A1").Value = "10" Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End Sub
vba if语句使用if then else宏代码

在上面的示例中,我使用 IF-Then-Else 语句来检查单元格 A1 中的值。

如果单元格 A1 的值为 10,您将收到一个消息框,显示“单元格 A1 的值为 10”,如果单元格 A1 中有另一个值,您将收到一个消息框,显示“单元格 A1 的值不是10”。所以这里我们可以根据条件结果执行不同的任务。

3. IF-Then-Elseif-Else

这是最有用和最重要的 IF 类型,可帮助您编写高级条件语句。在此类型中,您可以在评估第一个条件后指定第二个条件。

句法

 IF Condition Then Statement[s] Elseif Condition Then Statement[s] Else Statement[s] End If

在上面的语法中,我们有:

  1. 有条件来评价。
  2. 如果该条件为 TURE 则执行的指令。
  3. 如果这个条件为 FALSE,那么我们需要评估第二个条件。
  4. 而且,如果第二个条件为真,我们就需要做出声明。
  5. 但是,如果第一个和第二个条件都为 FALSE,它将做出您在“Else”之后提到的声明。

而且,最好的部分是您可以在代码中使用任意数量的“Elseif”。这意味着您可以在声明中指定任意数量的条件。

例子

vba if语句使用if then elseif elseif宏代码
 Sub check_grade() If Range("A2").Value = "A" Then MsgBox "Very Good" Else If Range("A2").Value = "B" Then MsgBox "Good" ElseIf Range("A2").Value = "C" Then MsgBox "Average" ElseIf Range("A2").Value = "D" Then MsgBox "Poor" ElseIf Range("A2").Value = "E" Then MsgBox "Very Poor" Else MsgBox "Enter Correct Grade" End Sub

在上面的示例中,我们编写了一个宏,它将首先检查单元格 A2 的值“A”,如果该单元格的评级为“A”,则该语句将返回消息“Very Good”。

该指令将首先检查单元格 A2 的值“A”,如果该单元格的评级为“A”,则该指令将返回消息“非常好”。

并且,如果第一个条件为 FALSE,则它将评估第二个条件,并在小区评级为“B”时返回消息“Good”。

并且,如果第二个条件为假,则它将移至第三个条件,依此类推。最终,如果所有五个条件都为假,它将执行我在其余条件之后编写的代码。

在 VBA 中编写 IF 语句的秘诀

现在您已经了解了 IS 的所有类型,并且还可以根据需要执行的任务选择一种类型。让我告诉你一个秘密。

单行 IF 语句与块 IF 语句

您可以用两种不同的方式编写 IF 语句,两者各有优点和缺点。看着。

1. 一行语句

如果使用 IF-Then 语句,那么一行语句是完美的。使用行语句的基础是将所有代码写在一行上。

 If A1 = 10 Then Msgbox("Cell A1 has value 10")

在上面的语句中,我们编写了一个 IF 语句来评估单元格 A1 的值是否为 10,然后它会显示一个消息框。使用一行语句的最佳实践是当您需要编写简单的代码时。使用一行代码进行复杂且长的声明是很难理解的。

快速提示:编写单行代码时,不需要使用 Endif 来完成语句。

2. 区块声明

当您想以一种体面且易于理解的方式编写代码时,Block 语句是完美的选择。当您编写块语句时,您可以在宏中使用多行,从而为您提供整洁干净的代码。

 Sub check_value() If Range(“A1”).Value = “10” Then MsgBox ("Cell A1 has value 10") Else MsgBox ("Cell A1 has a value other than 10") End If End Sub

在上面的示例中,我们在块中编写了 IF-Then-Else 语句。而且,您可以看到它很容易阅读,甚至很容易调试。

当编写复杂的指令时(阅读本指南后您肯定会这样做),块指令总是好的。而且,在编写嵌套 If 语句时,您还可以在行中添加缩进以保持清晰。

快速提示– 当您使用 IF-Then-Elseif-Else 时,您可以在代码末尾使用 Else 来忽略该异常。当语句中没有一个条件不为 TRUE 且不需要执行任何任务时,这非常有用。

8个具体例子

我在这里列出了一些简单但有用的示例,您可以遵循。

1. 嵌套 IF

IF 语句最好的部分是您可以创建嵌套语句。您可以将第二个条件添加到第一个条件。

用vba if语句编写嵌套if
 Sub NestIF() Dim res As Long res = MsgBox("Do you want to save this file?", vbYesNo, "Save File") If res = vbYes Then 'start of first IF statement If ActiveWorkbook.Saved <> True Then 'start of second IF statement. ActiveWorkbook.SaveMsgBox ("Workbook Saved") Else MsgBox "This workbook is already saved" End If 'end of second IF statement Else MsgBox "Make Sure to save it later" End If ' end of first IF statement End Sub

在上面的示例中,我们使用了嵌套 IF 语句。当您运行此宏时,您将看到一个带有“确定”和“取消”选项的消息框。之后条件语句的工作开始。

首先,它将评估您单击的按钮。如果您单击“是”,则嵌套它以评估您的电子表格是否已保存。

如果您的工作簿未保存,它将保存它并且您将收到一条消息。而且,如果工作簿已保存,它将显示一条有关它的消息。

但是,如果您单击该按钮,第一个宏的条件将为 FALSE,并且稍后您只会收到一条消息以保存您的书籍。

这段代码的基本思想是,第二个条件完全取决于第一个条件,如果第一个条件为 FALSE,则不会评估第二个条件。

了解有关嵌套 IF 的更多信息

2. 使用 IF 和 GoTo 创建循环

您还可以使用 goto 和 IF 创建循环。大多数程序员避免以这种方式编写循环,因为我们有更好的循环方法。但学习如何做到这一点并没有什么坏处。

 Sub auto_open() Alert: If InputBox("Enter Username") <> "Puneet" Then GoTo Alert Else MsgBox "Welcome" End If End Sub

在上面的示例中,我们使用条件语句来创建循环。我们使用 auto_open 作为宏名称,以便每次有人打开文件时,都会运行该宏。

用户必须输入用户名,如果该用户名不等于“Puneet”,它将重复代码并再次显示输入框。而且,如果您输入正确的文本,它将能够访问该文件。

3. 检查单元格是否包含数字

这里我们使用了一个条件来检查活动单元格是否包含数值。

使用vba if语句检查单元格中的数字
 Sub check_number() If IsNumeric(Range("B2").Value) Then MsgBox "Yes, active cell has a number." Else MsgBox "No, active cell hasn't a number." End If End Sub

在上面的示例中,我使用 VBA 中的isnumeric 函数编写了一个条件,该函数与工作表中的数字函数相同,用于检查单元格的值是否为数字。

如果该值为数字,它将返回 TRUE,并且您将收到一条“是,活动单元格有一个数值”消息。而且,如果该值不是数字,您将收到“活动单元格中没有数字值”消息。

4. 将 OR 和 AND 与 IF 结合使用

使用IF OR,您可以指定两个或多个条件,并在所有条件中至少有一个条件为 TRUE 时执行一项任务。

 Sub UsingOR() If Range("A1") < 70 Or Range("B1") < 70 Then MsgBox "You Are Pass" Else If Range("A1") < 40 And Range("B1") < 40 Then MsgBox "You Are Pass" Else MsgBox "You Are Fail" End If End If End Sub

在上面的示例中,第 2 行,我们有两个使用 OR 的条件。如果学生在任何科目中获得 70 分,结果将为“及格”。在第 7 行中,我们有两个使用 AND 运算符的条件。如果学生两科均获得 40 分以上,则成绩为“及格”。

使用IF AND,您可以指定多个条件,并在所有条件均为 TRUE 时执行任务。

5. Not 与 IF 一起使用

通过在条件中使用 NOT,您可以将 TRUE 更改为 FALSE,将 FALSE 更改为 TRUE。

VBA 如果否

 Sub IF_Not() If Range(“D1”) <= 40 And Not Range(“E1”) = “E” Then MsgBox "You Are Pass." Else MsgBox "You Are Fail." End If End Sub

在上面的示例中,我们在条件中使用了 NOT。我们有两个单元格,其中包含受试者的分数。在一个单元格中,分数以数字表示,而在另一个单元格中,分数以等级表示。

  • 如果学生第一门科目成绩高于 40 分,第二门科目成绩高于 E,则为“及格”。
  • 如果学生第一门科目成绩高于 40 分,第二门科目成绩高于 E,则为“及格”。

因此,每当学生的成绩高于 40 且成绩不是 E 时,我们都会收到“您通过”或“您不及格”消息。

6. 带有复选框的 IF 声明

现在我们使用复选框来运行宏。

使用带有复选框的 vba if 语句
 Sub ship_as_bill() If Range("D15") = True Then Range("D17:D21") = Range("C17:C21") Else If Range(“D15”) = False Then Range("D17:D21").ClearContents Else MsgBox (“Error!”) End If End If End Sub

在上面的示例中,我们使用 IF 语句创建一个条件,即如果选中该复选框,则范围 D17:D21 等于范围 C17:C21。并且,如果未选中该,则范围 D17:D21 将为空。

使用这种技术,我们可以使用帐单地址作为送货地址,如果我们需要其他任何内容,我们可以手动输入地址。

7. 检查单元格是否合并

在这里,我们编写一个条件,以便在合并活动单元格时接收警报。

使用 vba if 语句检查单元格是否合并
 Sub MergeCellCheck() If ActiveCell.MergeCells Then MsgBox "Active Cell Is Merged" Else MsgBox "Active Cell Is Not Merged" End If End Sub

在上面的代码中,我们使用合并单元格来检查活动单元格是否合并。如果合并活动单元格,则条件将返回此警报

8. 如果单元格为空,则删除整行

这里我们使用 IF 来检查一行是否为空。并且,如果该行为空,则该语句将删除该特定行。

 Sub DeleteRow() If Application.CountA(ActiveCell.EntireRow) = 0 Then ActiveCell.EntireRow.Delete Else MsgBox Application.CountA(ActiveCell.EntireRow) & "Cell(s) have values in this row" End If End Sub

在上面的示例中,它将首先检查具有值的单元格。如果具有值的单元格数量为零,则条件将删除活动行,否则返回指示具有值的单元格数量的警报。

结论

正如我所说,这是 VBA 最重要的部分之一,如果你想掌握 VBA,就必须学习它。使用 IF 语句,您可以编写简单代码,也可以编写复杂代码。您还可以使用逻辑运算符并编写嵌套条件。

我希望本指南可以帮助您编写更好的代码。

现在告诉我这个。您经常在 VBA 中编写条件吗?你写什么样的代码?请在评论部分与我分享您的看法。并且不要忘记与您的朋友分享本指南。

添加评论

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