弱弱的问个问题:
j = Cells(rows.count,2).end(3).row+1
Cells(rows.count,2).是指第二列最后一个有值的行的交叉的单元格,对吗?
end(3)怎么解释?
Cells(rows.count,2)是当前Sheet页B列(即第2列)的最后一个单元格;
Cells(rows.count,2).end(3)是从B列最后一个单元格开始自下而向上获得最后一个非空单元格;
Cells(rows.count,2).end(3).row就是获得B列最后一个非空单元格的行标签。
end(3)就等于end(xlUP),就是自下而上的意思。
追问多谢指导,我查了一下Excel帮助,上面写的是
xlDown -4121 向下。
xlToLeft -4159 向左。
xlToRight -4161 向右。
xlUp -4162 向上。
为什么你写成3?不胜赐教!我是初学者,多谢费心。
呵呵我也是初学者,写成3、-4162和xlUP的效果是等价的,我理解应该是一种简写,作为VBA代码的默认可执行方式,是预先设定好的,在了解的基础上遵循这个规则就可以了。
关于这个问题,比较经典的回答,可以参考下面这个链接,我想对楼主一定有帮助。http://zhidao.baidu.com/link?url=DG0l4p4YhNmcX2VsvIeJWbmkontkqCyJDNEvaqU9ccEh9MSFCmcks0i5KyHnCyUOqfLmGl6TCecUCSKI-9Sl2_
太感谢了!抱歉还有个问题:
如果我需要指定到工作表中的某一个表格,如何改写你之前的程序,我试了一下,如果不改,那么新拷贝的数据在我建的表格的下方出现了
j = .Cells(.Rows.Count, 2).End(3).Row + 1
.Range("B" & i, "Q" & i).Copy .Range("B" & j, "Q" & j)
在.Cells(.Rows.Count, 2).End(3).Row + 1前面加上Sheet(x),如原始数据在Sheet1,需要在Sheet2中进行判断和粘贴,可以改为:
抱歉没说清楚,我不是指不同的sheet工作表,而是指table表格,我建了一个表格,引用了表格的格式等,要把这些数据加到这个表格中。
追答这是因为B列在你的表格区域内,.Cells(.Rows.Count, 2).End(3).Row这行代码在进行判断时,会将B列非空单元格的下一行判断在表格底部的下一行,因此数据正好复制到了表格下方。
解决方法:可以在表格外部增加一个“复制标记列”,代码和图例如下。
Sub 复制2()