excel VBA 选择含特定文本的单元格的整行

请教大家,我想选择含“DeutscheBank”文字的单元格的整行,然后把这些行copy到testing表格里,然后删除一些不必要的列。请问我这样写代码为什么总是Rows... 请教大家,我想选择含“Deutsche Bank”文字的单元格的整行,然后把这些行copy到testing表格里,然后删除一些不必要的列。请问我这样写代码为什么总是Rows("i&"":""&l+i-1").Select那句出错啊?

sub t1()

Worksheets("782 Forward Report").Activate
Dim i As Long, l As Long
Range("a5000") = Application.WorksheetFunction.Match("Deutsche Bank", [C:C], 0)
Range("a5001") = Application.WorksheetFunction.CountIf([C:C], "Deutsche Bank")
i = Range("a5000").Value
l = Range("a5000").Value

Rows("i&"":""&l+i-1").Select
Selection.Copy Destination = Sheets("testing").Range("a1")
Sheets("testing").Columns("A:B").Delete
Sheets("testing").Columns("I:XX").Delete
end sub
有没有大侠有更简洁的方法?可以直接copy这些行的C:H列这个区域的数据出来?拜谢!
展开
 我来答
鱼木混猪哟
高粉答主

推荐于2016-11-16 · 专注Office,尤其Excel和VBA
鱼木混猪哟
采纳数:6078 获赞数:33696

向TA提问 私信TA
展开全部
用以下代码可实现:
Sub main()
Sheets("782 Forward Report").Activate
For i = 1 To Range("C65536").End(3).Row
If Cells(i, 3) = "Deutsche Bank" Then
For j = 1 To 256
Sheets("testing").Cells(i, j) = Cells(i, j)
Next
End If
Next
Sheets("testing").Columns("A:B").Delete
Sheets("testing").Columns("I:XX").Delete
End Sub

关于题目中出现的不能获取最大行的问题,是用Range("C65536").End(3).Row来解决的
关于End的相关知识如下:
For irow = 1 To [A65536].End(3).Row
If Abs(Cells(irow, 1).End(2) - Cells(irow, 256).End(1)) / Cells(irow, 1).End(2) > 0.1 Then Cells(irow, 1).End(2)(1, 2) = Cells(irow, 256).End(1)
Next

括号中的1、2、3、4分别代表向左、向右、向上、向下。END(x)表示从指定的单元格向左、向右、向上、向下最后一个有效RANGE

以Cells(irow, 1).End(2)为当前单元格,向右移一位。
假如Cells(irow, 1).End(2)为B2,Cells(irow, 1).End(2)(1, 2) 为C2

end(xlup)是向上,end(xldown)是向下,end(xltoleft)是向左,end(xltoright)是向右

关于[A65536].End(xlUp).row 中的[A65536]

在1995-2006年,excel工作簿包含65536行,但现在的office 2007中工作簿包含1048576行。[A65536]就是A列的最后一行的意思,这段话的意思就是,从A列最后一行向上找,找到有数据的行为止。

是从A列最下面往上遇到的有数据的列号
如果{A27}是你数据的最后列
I=[A65536].End(xlUp).row
则I就是27

[a65536].End(3)的意思是查找A列最后一个非空单元格,比如找到非空单元格为A2
[a65536].End(3)(2, 1)
(2,1)是数据行最末行的下一空单元格;(1,2)是数据行最末一个单元格的右侧单元格
庄力荣
2014-10-02 · TA获得超过382个赞
知道小有建树答主
回答量:401
采纳率:100%
帮助的人:223万
展开全部
直接 rows(i).select 就好了啊 这个就是选择正行的数据 你要是想选部分数据 用range
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jianghong834
推荐于2016-05-19 · TA获得超过1.5万个赞
知道大有可为答主
回答量:2184
采纳率:87%
帮助的人:383万
展开全部
代码改为如下:

Sub t1()
Sheets("782 Forward Report").Activate
For i = 1 To Range("c65536").End(xlUp).Row
If Cells(i, 3) = "Deutsche Bank" Then
For j = 1 To 256
Sheets("testing").Cells(i, j) = Cells(i, j)
Next
End If
Next

Sheets("testing").Columns("A:B").Delete
Sheets("testing").Columns("I:XX").Delete

End Sub
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式