Excel的VBA代码解释?

请帮我添加以下VBA代码的详细注释,谢谢!!
Sub ek_sky()
Dim arr1, i&, j$
arr1 = Range("f1:f" & Cells(Rows.Count, 1).End(3).Row)
For i = 1 To UBound(arr1)
If arr1(i, 1) Like "*小节*" Then
j = j & ",A" & i
End If
Next i
Range(Mid(j, 2)).EntireRow.Select
End Sub

Sub ek_sky()

    Dim arr1, i&, j$

    

    '得到F1:Fx的区域,其中x取决于A列最后一个单元格的行,例如:A1到A10都有内容,A11开始就没内容了,那么arr1得到的区域就是F1:F10

    arr1 = Range("f1:f" & Cells(Rows.Count, 1).End(3).Row)

    'i从1到arr1区域中单元格的数量

    For i = 1 To UBound(arr1)

        '如果arr1中第(i,1)个元素的内容包含以通配符表示的"*小节*",那就执行IF内的语句

        If arr1(i, 1) Like "*小节*" Then

            j = j & ",A" & i

        End If

    Next i

    'j变量中保存的是F列中包含有"*小节*"的对应的A列单元格,如",A1,A2",由于前面有个逗号,所以需要使用Mid(j,2),以此来从第2个符号开始往后取,以去掉最前面的逗号

    '下面整句的使用就是将包含"*小节*"内容的行全都选中

    Range(Mid(j, 2)).EntireRow.Select

End Sub

追问

首先,非常感谢您的耐心解答,还有一些问题想请教您哪,我单独对您发起提问了,望解答。

追答

你好,我已收到你另一个贴子的提问,已针对你提出的相关问题录制了视频进行回复,稍后将给你回复。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-26

前景提要


到现在我们已经经过了两个系列的学习,今天我们如期的进入第三系列,之前也和大家介绍过了本系列主要是讲述一些比较常用的VBA函数,函数篇学起来相对有点枯燥,因为他并不能够马上实现某种功能,但是大部分的功能都离不开各种函数的配合,同时一些VBA函数和excel函数也是通用的,学好函数作用还是很大的,好啦,我们进入函数的第一篇,今天要介绍的就是IIF函数


函数说明


看到这个IIF函数,相信很多童鞋都会认为是我打错字了,应该是IF,然而并不是这样的,在VBA中,确实是有IIF函数的,而它的功能和excel中的if函数的功能是相同的,可以简单的理解为,IIF就是原来excel的if,这样应该会更好理解,格式如下:

IIF("条件","Y","N")

如果条件成立,返回Y,如果不成立,返回N,是不是和excel的if是完全一样的呢,好了,我们来看一个例子。我们综合我们之前学习过的输入框,通过输入框和用户之间进行交互的,让用户输入一个三位数的数字,如果用户输入的是三位数,就返回YES,反之则返回NO。为了不断得巩固之前学习过得知识,我们在之后得例子中,尽量新旧知识点交叉使用,方便大家学习,理解。


上代码


Sub test()

Dim Num&

Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3)

result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")

MsgBox result

End Sub

效果如图:

如果输入正确的三位数123,结果如何呢?


再试下我们输入56656


5位数了,不符合我们的要求了。

这样的场景比较常用在登陆页面,判断用户输入的密码是否达到我们的要求的位数等方面。

可能有童鞋在测试代码的时候, 会输入三个中文汉字,如果如何呢?


脚本居然返回位数正确的结果哦,但是我们明明要求的是输入数字啊,三个汉字的长度也是3,这好像是一个BUG啊,其实并不是,这是我们的写法还不够严谨,针对上面的情况我们还需要判断用户输入的是否是数字,这又牵扯到另外一个函数,isnumber(),就是判断括号内的是否为数字的。我们完善下代码

Sub test()

Dim Num

Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3)

If WorksheetFunction.IsNumber(Num) Then

result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")

Else

MsgBox "您的输入不合法!"

End If

MsgBox result

End Sub

再测试下,我们这里输入拼音,很明显程序判断出来并不是数字,不是数字就不会去判断是否为三位这个条件了,直接跳过这个条件,去之后另外一个条件,弹窗提示我们输入不合法


到这里,代码就算是差不多完善了。

代码解析

我们看看完善之后的代码,首先通过我们之前学习过的Application.InputBox创建一个输入框,和用户之间形成一个简单的交互,当得到用户输入的内容之后,我们要去判断输入的是否符合要求,这里我们要求输入的是三位数字,条件有两个,“三位”,“数字”,数字我们这里可以直接使用IsNumber()这个函数来判断,具体的用法,我们后面会讲到,如果用户输入的是数字,则执行长度的判断,在判断长度的时候,我们不再通过if.....else......这样的形式来输出结果,我们选择通过IIF函数来进行判断

result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!")

如果长度符合3,那么就返回第一个参数的内容,位数正确,如果长度不为3,则返回第二个参数的结果,位数不正确,简单的一行代码就可以实现之前要写好几行的if判断语句,在一些简单的判断中,IIF函数的效率还是可以的。

完整代码加注释

Sub test()

Dim Num

Num = Application.InputBox("请输入一个三位数的的数字", "输入框", , , , , , 3) '构造输入框,形成交互

If WorksheetFunction.IsNumber(Num) Then '判断用户输入的是否是数字

result = IIf(Len(Num) = 3, "位数正确!", "位数不正确!") '如果是数字,进一步判断位数是否正确

Else

MsgBox "您的输入不合法!"

End If

MsgBox result

End Sub

总结

今天我们主要学习了一个函数就是IIF函数,他是excel中if函数的翻版,在VBA中,在一些简单的判断中,他能够节省我们的代码量,让程序执行的更加的迅速,同时顺带提前接触了下isnumber()这个函数,用来判断是否是数字的,大家可以结合自己的使用场景来练习这个函数,VBA虽然简单,但是还是要经常练习的哦 。

相似回答