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都是什么意思啊? 等等等等,各种晕。
希望高手可以帮我逐句解释一下,越详细越好,感激不尽。 展开
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都是什么意思啊? 等等等等,各种晕。
希望高手可以帮我逐句解释一下,越详细越好,感激不尽。 展开
1个回答
展开全部
首先:
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,如果小于则表示有汉字,然后设置隐藏条件为真,也就是将其隐藏。
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,如果小于则表示有汉字,然后设置隐藏条件为真,也就是将其隐藏。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询