Sub copydata()
A = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To A
If Worksheets("sheet1").Cells(i, 2).Value = Worksheets("sheet1").Range("a20:a25") Then
Worksheets("sheet1").Rows(i).Copy
Worksheets("sheet2").Activate
b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("sheet2").Cells(b + 1, 1).Select
ActiveSheet.Paste
End If
Next
End Sub
我认为我的值集有问题,我不知道如何解决。
答案 0 :(得分:2)
您遇到的问题似乎与以下行有关:
process_request
用通俗易懂的英语,我对您要在此处执行的操作的理解是检查cell(i,2)的值是否等于Range(“ a20:a25”)的总和,执行一些操作。
但是,您的问题是,您实际上是在检查单元格值是否等于工作表对象(工作表和范围)。无论如何,您从未真正转换过工作表对象,以使其可以与cell(i,2)的值进行比较
我假设您要比较总和,便提出了一个快速解决方案。
If Worksheets("sheet1").Cells(i, 2).Value = Worksheets("sheet1").Range("a20:a25")
如果您要比较此范围内的每个单元格的值与每个项目,那么我们将不得不采用其他方法,请随时告诉我,我们很乐意为您提供帮助。
代码的一个侧面说明是,我建议始终将Option Explicit放在代码的顶部。这是一个好习惯,因为它将始终需要您定义变量并帮助防止这些类型的混淆。
鉴于在这种情况下,您没有比较变量,所以这次可能没有帮助,但在其他时候肯定会有所帮助。
答案 1 :(得分:1)
您不能直接将单个单元格与某个范围进行比较。使用工作表的“匹配”来查找另一个范围内的值。
Sub copydata()
dim i as long, b as long
with Worksheets("sheet1")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If not iserror(application.match(.Cells(i, "B").Value, .Range("a20:a25"), 0)) Then
b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
.Rows(i).Copy destination:=Worksheets("sheet2").Cells(b + 1, "A")
End If
Next
end with
End Sub