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

请教大家,我想选择含“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列这个区域的数据出来?拜谢!

用以下代码可实现:
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)是数据行最末一个单元格的右侧单元格
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-02
直接 rows(i).select 就好了啊 这个就是选择正行的数据 你要是想选部分数据 用range
第2个回答  推荐于2016-05-19
代码改为如下:

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本回答被提问者采纳
相似回答