|
楼主 |
发表于 2012-11-19 00:04
|
显示全部楼层
hp002 发表于 2012-11-9 10:37
老湿
输了16行后,就联想不出来了,能帮我看看不。
很抱歉,今天才看到你的信息,对于你的问题,主要有以下两点
1,数据源设置地址 E1:I ,代码是以 ":" 以后的列为基础提取的数据
也就是说,初始过程是根据你的 I 列使用情况来提取的数据区域,并非 E 列,
你的I列里有很多是空白的单元格,这导致了提取到的数据源不完整
2,range.end 方法,在使用时,目标工作表中是不允许有 隐藏行.或者隐藏列的
正如你的附件,你使用了筛选,隐藏了很多行的内容,并且恰好始 I 列中都没有了内容,只有一个标题行存在,
所以数组 arr 取到的只有第一行的值,也就是数组仅取到了标题行,
这就是为什么"不起作用" 了!
根据你的数据源,可以修代码
- Hx = Sheets(Bm).Cells(65536, Right(Dz, 1)).End(xlUp).Row '提取使用的最大行
- '改为:
- Hx = Sheets(Bm).Range(Split(Dz, ":")(0)).End(xlDown).Row
复制代码 也就是将原来从 I65536 往上查找改为从 E1 开始往下查找
无论是往上还是往下,都需要注意几点
1,查找的列中,数据不允许 有空单元格存在,
正如你的 I列中,存在很多空单元格,这样无论使用那种方法,取到的数据都不准确
2,表中不允许有 隐藏的行或者列存在
使用.row属性,则不允许有隐藏行;使用.column则不允许有隐藏列存在,否则会影响查找结果
3无论使用那种方法,至少应该确定数据源中有2行数据(含标题行)
|
|