作者:绿色风
分类:
时间:2022-08-18
浏览:102
楼主 杨开科 |
今天想起写这个帖子,高手就不用看了,对于初学都或许会有些许的帮助。 如同工作表函数IF一样,If语句在VBA编程中使用极为频繁,但不同的写法,执行效率却不相同,下面以具体例子进行说明: 在工作表Sheet2中的单元格区域H1:H10中输入一组数据,H1中应包含本例If语句中相应的字符串,如“粮食直补第一批”或“综合补贴第二批”等,然后在下面的代码中按连续F8跟踪代码执行。可见,即使第一个If语句已经成立(即Sheet2工作表中的H1单元格中找到包含“粮食直补”的字符串,下面三行If语句仍旧会被执行。- '未优化的代码
- Sub DemoIf1()
- Dim FinalRow As Integer, MyValue, TheValue
- FinalRow = 10
- With Sheets("Sheet1")
- MyValue = Sheets("Sheet2").Range("H1").Value
- TheValue = Sheets("Sheet2").Range("H2:H" & FinalRow).Value
- If InStrRev(MyValue, "粮食直补") > 0 Then .Range("E2:E" & FinalRow).Value = TheValue
- If InStrRev(MyValue, "综合补贴") > 0 Then .Range("F2:F" & FinalRow).Value = TheValue
- If InStrRev(MyValue, "良种补贴") > 0 Then .Range("G2:G" & FinalRow).Value = TheValue
- If InStrRev(MyValue, "退耕还林") > 0 Then .Range("H2:H" & FinalRow).Value = TheValue
- End With
- End Sub
对此代码稍作改变,便可提升代码执行效率,如:- '优化后的代码
- Sub DemoIf2()
- Dim FinalRow As Integer, MyValue, TheValue
- FinalRow = 10
- With Sheets("Sheet1")
- MyValue = Sheets("Sheet2").Range("H1").Value
- TheValue = Sheets("Sheet2").Range("H2:H" & FinalRow).Value
- If InStrRev(MyValue, "粮食直补") > 0 Then
- .Range("E2:E" & FinalRow).Value = TheValue
- ElseIf InStrRev(MyValue, "综合补贴") > 0 Then .Range("F2:F" & FinalRow).Value = TheValue
- ElseIf InStrRev(MyValue, "良种补贴") > 0 Then .Range("G2:G" & FinalRow).Value = TheValue
- ElseIf InStrRev(MyValue, "退耕还林") > 0 Then .Range("H2:H" & FinalRow).Value = TheValue
- End If
- End With
- End Sub
在DemoIf2过程中,连续按F8逐行跟踪代码执行。可见,如果第1个If语句成立,便直接跳到End If,后面3行ElseIf语句根本不会被执行。 需要注意的是.Range("E2:E" & FinalRow).Value = TheValue应写在单独的物理行,否则会出现“编译错误,Else没有If”。有关InStrRev函数的详细信息,请参阅帮助。 此外,对于提供用户输入的对话框,也应尽量按用户操作习惯来安排If语句中的代码顺序。如,一般情况下,用户不会单击“取消”,对单击“取消”作出的处理则应尽量放在后面。 |
2楼 杨开科 |
对于上面的例子,可用Like运算符代替InStrRev函数,其结果是一致的。
- Sub DemoIf3()
- Dim FinalRow As Integer, MyValue, TheValue
- FinalRow = 10
- With Sheets("Sheet1")
- MyValue = Sheets("Sheet2").Range("H1").Value
- TheValue = Sheets("Sheet2").Range("H2:H" & FinalRow).Value
- If MyValue Like "*粮食直补*" Then
- .Range("E2:E" & FinalRow).Value = TheValue
- ElseIf MyValue Like "*综合补贴*" Then .Range("F2:F" & FinalRow).Value = TheValue
- ElseIf MyValue Like "*良种补贴*" Then .Range("G2:G" & FinalRow).Value = TheValue
- ElseIf MyValue Like "*退耕还林*" Then .Range("H2:H" & FinalRow).Value = TheValue
- Else: MsgBox "没找到匹配的字符!"
- End If
- End With
- End Sub
IF语句优化.rar
|
3楼 lrlxxqxa |
实用!
初学都→初学者 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一