【问题标题】:Only copy cells if a value doesn't exist in a range - VBA If Statement仅当范围中不存在值时才复制单元格 - VBA If 语句
【发布时间】:2016-10-21 16:53:00
【问题描述】:

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

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 &lt;&gt; SummarySheet.Range(Cells(3, 1), Cells(100, 1)).Value) Then 部分的情况下运行良好,所以我认为这是我出错的地方。

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

有什么想法吗?

编辑:

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

【问题讨论】:

  • 知道错误信息总是有帮助的...不过,您在缩小问题范围方面做得很好:)
  • 我会用错误信息更新它:)
  • 哦,这条消息改变了它。您的活动工作表不是SummarySheet吗?
  • 是的,活动工作表是 Cell(Examrow, 1) 来自的工作表

标签: vba if-statement


【解决方案1】:
添加错误消息后

编辑

someWorksheet.Range 方法接受两个范围形式的参数。这些范围必须在工作表someWorksheet 上。如果您使用Cells(3, 1),您不会告诉VBA 单元格在哪个工作表上,因此它会猜测您的意思是ActiveSheet。如果ActiveSheet 不是someWorksheet,您将收到错误消息,因为someWorksheetRange 方法无法处理来自另一个工作表的范围。答案显然是指定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

【讨论】:

  • 啊,有道理!非常感谢,它工作不完美,但我认为这将是一个单独的问题!再次感谢
  • 我想我已经找到了我遇到的问题,它可能与此有关。我有 3 个单元格中包含“热”字样。
  • 为什么会有问题?
  • 对不起,不是按回车的意思,我会重新开始。我想我已经找到了我遇到的问题,它可能与此有关。我有 3 个单元格,其中包含“热”字样; “热手”、“热”和“热脚”并没有拿起“热”单元格。这是因为 .Find 方法为热电池返回“someValue”,因为它在另外两个中,所以跳过了 If 函数?
  • 这就是 LookAt 参数的用途。你设置为xlWhole了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多