excel编程系列基础:典型的判断语句应用技巧

在日常工作中,我们往往需要在众多的“对象集”中遍历每一个对象,从而达到处理数据的结果,无论是EXCEL、ACCESS、ERP都是如此,即便像高级语言PYTHON、JAVA也同样会有循环语句结构,这就是关系型数据的处理特点。但是我们在循环的过程中,因为各种需求的不同,所以不是所有的数据内容都是我们需要的。

那就要对每一行数据条进行甄别,让计算机代替我们判断,是需要的则处理,不需要的就PASS。

一、IF判断语句

其实大家对判断语句应该并不陌生,因为工作表函数中就有IF判断函数,如此的经典,VBA又岂能放过。

1.用一个小案例认识IF判断语句

示例1)需求,判断身份证号的位数是否正确。

如果看到这样的一组号码,不考虑号码的信息正误,只看位数,你很难知道它是否是18位,那么此时用代码来处理,就显得很方便了,如下:

Sub 判断身份证号位数正误()

With Sheets("IF判断语句")

For i = 2 To 10

If Len(.Cells(i, 1)) = 18 Then

.Cells(i, 2) = "18位"

End If

Next i

End With

End Sub

【代码解析】

Line1:使用工作表“IF判断语句”作为代码中引用对象的统一父级对象;

Line2:规定循环变量i的范围为2到10,因为我们是遍历单元格,逐行判断,所以循环变量应该以单元格的行号作为循环依据,所以是ROW2到ROW10;

Line3:Cells(i, 1)说明是某一行和第一列的交点单元格,当i变量为2,3,4,…,10时,对应的单元格地址就是A2,A3,A4,…,A10。用LEN函数提取单元格字符串的长度,判断是否等于18;

Line4:如果判断条件满足,则Cells(i, 2)对应的B列单元格中输入“18位”;

Line5:判断语句的结束语句;

Line6:循环语句的结束语句;

Line7:With语句的结束语句。

2.IF判断语句的语法

从上面的示例1我们可以看出,当判断条件满足时,返回对应的结果,但却留下了很多空单元格。下面我们就正式的了解一下IF判断函数的语法,如下:

这就是IF判断语句的完整语法,和IF函数一样,当满足某一级判断时,返回相应结果,并跳出此次判断。这其中的ElseIF语句,就相当于IF函数的嵌套使用,Else就相当于IF函数的False_value。

3.通过案例学会IF判断语句

处于实战的考虑,我们继续看两个案例,帮助大家能够更好地了解IF判断语句的用法,如下:

示例2)需求,判断A列数值的奇偶性。代码如下:

Sub 奇偶性()

With Sheets("奇偶性")

a = .[A1].End(4).Row

For i = 2 To a

If .Cells(i, 1) Mod 2 = 0 Then

.Cells(i, 2) = "偶"

Else

.Cells(i, 2) = "奇"

End If

Next i

End With

End Sub

【代码解析】

Line1:使用工作表“奇偶性”作为代码中引用对象的统一父级对象;

Line2:使用单元格End属性和Row属性,找到数据范围末行的行号,并赋值给变量a;

Line3:规定循环变量i的循环范围是2到a,循环每一行数据(不含表头);

Line4:判断单元格Cells(i,1)第一列每一个单元格,除以2求余(Mod函数)是否等于0;

Line5:如果等于0,则对应的Cells(i,2)单元格,赋值“偶”;

Line6:Else,不满足上面条件的情况时;

Line7:则对应的Cells(i,2)单元格,赋值“奇”;

Line8:判断语句的结束语句;

Line9:循环语句的结束语句;

Line10:With语句的结束语句。

小知识

Mod函数,在工作表函数中也有它的身影,但是在EXCEL VBA中它的语法有些不同,教同学们一个记住它的方法:在VBA中你可以把它理解为一个“运算符号”,例如4/5、6*8、21-6这样的算式,求余就是235 Mod 62,表示235除以62的余数。

示例3)需求,按照制度,制作每个人的提成。

不要觉得我们一直在讲基础,对于VBA来说,没有绝对的基础,漏掉哪一个环节都有可能让你使用VBA的过程不顺畅。我们现在就利用判断语句,解决一个同学们工作中的实际问题。

数据源就不用多说了,作者E图表述在以往的文章中说过很多了,包括区间的写法。下面直入正题,代码如下:

Sub 提成计算()

With Sheets("计算提成")

a = .Range("A1").End(4).Row

For i = 2 To a

If .Cells(i, 3) < 100 Then

.Cells(i, 4) = "销售额*85%*1%"

.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.01

ElseIf .Cells(i, 3) >= 100 And .Cells(i, 3) < 200 Then

.Cells(i, 4) = "销售额*85%*2%"

.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.02

ElseIf .Cells(i, 3) >= 200 And .Cells(i, 3) < 500 Then

.Cells(i, 4) = "销售额*85%*3%"

.Cells(i, 5) = .Cells(i, 3) * 0.85 * 0.03

Else

.Cells(i, 4) = "销售额*80%*8%"

.Cells(i, 5) = .Cells(i, 3) * 0.8 * 0.08

End If

Next i

End With

End Sub

这算是IF判断语句最全的写法了,基本涵盖了所有和判断语句有关的内容。介于篇幅,也考虑到同学们需要有思考的空间,上面这段代码,就不给出代码解析的过程,正题思路就是一个IF(IF(IF))的嵌套使用。

小知识

如果有两个条件都需要满足,我们可以使用AND,依然和IF工作表函数一样的用法,但是不一样的是语法为“条件1 AND 条件2 AND 条件N”;如果是多条件取其一,就用OR,“条件1 OR 条件2 OR 条件N”;如果是更加复杂的情况,如:(条件1 AND 条件2) OR 条件3,意思就是条件1和条件2都满足,或者只有条件3独立满足。这个逻辑过程,可以举一反三。

二、SELECT判断语句

因为IF函数已深入人心,所以我们开篇就讲解了IF判断语句,其实在EXCEL VBA中还有另一种判断语句的写法,就是SELECT判断语句,语法如下:

我们看一个案例说明问题,考勤统计:

不考虑旷工和漏打卡的情况,这个案例单纯的就为了说明SELECT判断语句的用法,代码如下:

Sub 迟到早退()

With Sheets("考勤")

a = .[C1].End(4).Row

i = 2

Do While i <= a

Select Case .Cells(i, 4)

Case Is <= TimeSerial(8, 0, 0)

.Cells(i, 5) = "上午正常"

Case Is <= TimeSerial(12, 0, 0)

.Cells(i, 5) = "上午迟到"

Case Is < TimeSerial(17, 0, 0)

.Cells(i, 5) = "下午早退"

Case Else

.Cells(i, 5) = "下午正常"

End Select

i = i + 1

Loop

End With

End Sub

【代码解析】

Line1:引用“考勤”工作表为整体父级对象;

Line2:确定末行的行号,并赋值给a变量;

Line3:确定Do While的循环变量i的初始值为2(从工作表的第2行开始);

Line4:给定循环的条件,不能超过最大数据范围a;

Line5:确定Select Case的判断条件是.Cells(i,4)单元格的时间内容;

Line6:逐条判断Case Is给定的条件,满足则执行相关语句命令行,并跳转到End Select;如果不满足,则执行下一个Case Is条件;

……;

Line15:循环变量加1(进行下一次循环);

Line16:循环语句的结束语句;

Line17:With语句的结束语句。

整体的思路和IF判断语句是一样的,作者E图表述,还是希望大家多看看IF判断,毕竟写法上和我们日常理解的IF很像,写代码时的思路更好梳理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要读取Excel表格中公式的计算值,可以使用Java的POI库中的公式求值器。具体步骤如下: 1. 使用POI库读取Excel文件,并获取要读取数据的单元格。 2. 判断该单元格是否包含公式,如果包含公式则获取该单元格的公式。 3. 创建一个公式求值器,并将该单元格的公式传入求值器中。 4. 使用求值器的evaluate()方法计算公式的值。 5. 将计算结果转换为字符串类型并返回。 以下是示例代码: ```java // 创建一个POI工作簿对象 Workbook workbook = new XSSFWorkbook(new FileInputStream(new File("test.xlsx"))); // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 获取要读取数据的单元格 Cell cell = sheet.getRow(0).getCell(0); // 判断该单元格是否包含公式 if(cell.getCellType() == CellType.FORMULA) { // 获取该单元格的公式 String formula = cell.getCellFormula(); // 创建一个公式求值器 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); // 将该单元格的公式传入求值器中,并计算公式的值 CellValue cellValue = evaluator.evaluate(cell); // 将计算结果转换为字符串类型并输出 System.out.println(cellValue.formatAsString()); } ``` 注意:在使用POI库读取Excel表格中的公式时,需要先将工作簿的自动计算公式选项设置为开启,否则公式的计算值将为0。可以通过以下代码实现: ```java // 创建一个POI工作簿对象 Workbook workbook = new XSSFWorkbook(new FileInputStream(new File("test.xlsx"))); // 开启工作簿的自动计算公式选项 workbook.getCreationHelper().createFormulaEvaluator().setIgnoreMissingWorkbooks(true); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值