VBA代码,把E列含有汉字的单元格整行隐藏,代码解释求助

Sub隐藏()DimcAsRange,iAsLong,nAsLong,sAsStringForEachcInRange(Cells(1,5),Cells(Rows.Cou... Sub 隐藏()
Dim c As Range, i As Long, n As Long, s As String
For Each c In Range(Cells(1, 5), Cells(Rows.Count, 5).End(xlUp)).Cells
s = Trim(c)
n = Len(s)
For i = 1 To n
If Asc(Mid(s, i, 1)) < 0 Then Exit For
Next i
If i <= n Then c.EntireRow.Hidden = True
Next c
End Sub

这是一个朋友给我提供的代码,我想自己研究学习,但是感觉非常吃力。

比如:dim c as range 将c定义为range(区域),但是我见过的数据类型里好像没有range,此处range是何意,既然c被定义为range了,那么后面For each c in range....是指range里面的每个c吗?后面的Rows.count是什么用法啊?end(xlup)是什么意思?还有Trim, len都是什么意思啊? 等等等等,各种晕。

希望高手可以帮我逐句解释一下,越详细越好,感激不尽。
展开
 我来答
Sc耳总
2016-11-19 · 超过64用户采纳过TA的回答
知道小有建树答主
回答量:83
采纳率:100%
帮助的人:68.2万
展开全部
首先:
range是有的。就是指的单元格区域。
For each c in range....表示变量c的循环范围,这里的范围是以cells(1,5)为起始点,也就是E1单元格,以Cells(Rows.Count, 5).End(xlUp)为终点,Rows.Count指的是总行数,比如EXECL2003版最大行数是65536,那Rows.Count就等于65536,说白了Cells(Rows.Count, 5)的意思就是EXECL表E列的最后一行的行号,End(xlup)也可以写成End(3),意思是向上找到这列最后一个有数据的行,所以与Cells(Rows.Count, 5)连接起来的意思就是从E列最后一行向上找到该列最后一个有数据的单元格所在的行数,用白话文来解释就是c的循环范围在E1单元格到你E列最后一行有数据的单元格。比如你E列最后一行有数据的单元格是E12,那么C的循环范围就是E1到E12,这么说懂了吧。

其次:
s = Trim(c) 这里s是字符串变量,Trim函数用来去除首尾的空格,比如你E1单元格的内容是 你好
那么s=Trim(c)后s得到的值就是你好而不是 你好,等于是把空格给去掉了。
n = Len(s) len函数是用来获取字符串长度,也就是把字符串s的长度赋值给变量n

For i = 1 To n 循环范围是1到这个字符串的最大长度
If Asc(Mid(s, i, 1)) < 0 Then Exit For 这里用了Asc函数并嵌套了Mid函数用来判断字符串中是否有汉字。程序读取流程是先Mid(s, i, 1)从s中获取字符串,通过变量i逐个将字符串中的字符提取出来,每次提取1位。然后交给Asc函数判断这个值是不是小于0.如果小于0表示是汉字,那么退出For循环。

最后:
If i <= n Then c.EntireRow.Hidden = True

判断i的值是否小于等于变量n,如果小于则表示有汉字,然后设置隐藏条件为真,也就是将其隐藏。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式