如果某个值不存在于范围内,则仅复制单元格 - VBA If Statement

时间:2016-10-21 08:13:41

标签: vba if-statement

我想使用If语句,其中如果单元格的值不存在于某个范围内,则If语句为true,并执行将单元格复制到不同工作表的操作。我遇到问题的代码部分是 -

If (Value < Date And CompletedValue = "") And (Cells(Examrow, 1).Value <> SummarySheet.Range(Cells(3, 1), Cells(100, 1)).Value) Then

没有And Cells(Examrow, 1).Value <> SummarySheet.Range(Cells(3, 1), Cells(100, 1)).Value) Then部分,代码工作正常,所以我认为这是我出错的地方。

它应该查看单元格(Examrow,1),获取值,然后将其与工作表SummarySheet中范围A3:A:100中的所有单元格进行比较。如果该值尚未在指定的范围内,则if语句应该执行其操作。

任何想法?

编辑:

我得到的错误信息是: Error Message

1 个答案:

答案 0 :(得分:0)

添加错误消息后

编辑

someWorksheet.Range方法以范围的形式接受两个参数。这些范围必须位于工作表someWorksheet上。如果您使用Cells(3, 1),则不会告诉VBA单元格在哪张表上,因此它猜测您的意思是ActiveSheet。如果ActiveSheet不是someWorksheet,您将收到错误,因为Range someWorksheet方法无法处理来自其他工作表的范围。答案显然是指定Cells(3, 1)Cells(100, 1)

的工作表
SummarySheet.Range(SummarySheet.Cells(3, 1), SummarySheet.Cells(100, 1))

无论如何你都要硬编码,你也可以使用

SummarySheet.Range("A3:A100")

这显然也适用于您的其他细胞参考。

但是之后您将收到一个新错误,因为您无法将单个值与数组进行比较。您必须遍历范围的所有单元格或使用内置的.Find方法:

someRange.Find(someValue)

将返回首次找到someValue的单元格,如果找不到,则返回Nothing。所以你只需要检查上面的Is Nothing

If SummarySheet.Range("A3:A100").Find(Cells(Examrow, 1).Value) Is Nothing Then

您应该设置另一个options以满足您的需求,因为它们可以从之前的搜索中保存。

这看起来像这样:

Dim foundCell As Range 'to keep the If condition readable

Set foundCell = SummarySheet.Range("A3:A100").Find( _
    What:=yourValue, _
    LookIn:=xlValues, _
    LookAt:=xlWhole, _
    MatchCase:=True)

If (.....) And foundCell Is Nothing Then