繁体   English   中英

如何检查一个范围内的单元格是否在另一个范围内

[英]How to check if a cell in one range exists in another range

坚持太久了,我希望你们中的一个能提供一些见识。

我试图遍历一个单元格范围(varSKU1),检查每个值是否存在于另一单元格范围(varSKU2)中。 如果该值不存在,我想将其添加为varSKU2中的新单元格。

代码如下:

Dim varSKU1(), varSKU2() As Variant
Dim n, m As Integer
Dim sku1, sku2 As Variant
Dim rowCount1, rowCount2 As Integer
Dim mFlag As Boolean

rowCount1 = Sheets("SKUs").Cells(Rows.Count, "A").End(xlUp).row
rowCount2 = Sheets("Cats").Cells(Rows.Count, "A").End(xlUp).row

varSKU1 = Sheets("SKUs").Range("A2:A" & rowCount1).Value
varSKU2 = Sheets("Cats").Range("A2:A" & rowCount2).Value

m = rowCount2 + 1

For Each sku1 In varSKU1

    mFlag = False

    For Each sku2 In varSKU2

        If sku1 = sku2 Then

            mFlag = False
            Exit For

        Else

            mFlag = True

        End If

    Next sku2

    If mFlag = True Then

        Sheets("Cats").Range("A" & m).Value = sku1
        Sheets("Cats").Range("B" & m).Value = "Misc"
        Sheets("Cats").Range("C" & m).Value = "Miscellaneous"

        m = m + 1

    End If

Next sku1

现在,该代码将varSKU1中的所有值作为新单元格添加到Sheets(“ Cats”)中,而不管varSKU2中是否存在该值。

尝试这个:

主要问题是布尔值。 以false开始每个循环,然后在发现相等时将其更改为true退出for,如果最后仍未找到匹配项,则仍然为false,然后对此进行测试并执行所需的操作。

Sub code()
Dim varSKU1 As Range, varSKU2 As Range
Dim n&, m&
Dim sku1 As Range, sku2 As Range
Dim rowCount1&, rowCount2&
Dim mFlag As Boolean

rowCount1 = Sheets("SKUs").Cells(Sheets("SKUs").Rows.Count, "A").End(xlUp).Row
rowCount2 = Sheets("Cats").Cells(Sheets("Cats").Rows.Count, "A").End(xlUp).Row

Set varSKU1 = Sheets("SKUs").Range("A2:A" & rowCount1)
Set varSKU2 = Sheets("Cats").Range("A2:A" & rowCount2)
m = rowCount2 + 1

For Each sku1 In varSKU1
    mFlag = False
    For Each sku2 In varSKU2
        If cstr(sku1) = cstr(sku2) Then
            mFlag = True
            Exit For
        End If
    Next sku2

    If mFlag = False Then
        Sheets("Cats").Range("A" & m).Value = sku1
        Sheets("Cats").Range("B" & m).Value = "Misc"
        Sheets("Cats").Range("C" & m).Value = "Miscellaneous"
        m = m + 1
    End If

Next sku1
End Sub

感谢@ScottCraner,您当然可以帮助缩小我的问题。 我保留了布尔值更改,但真正的决定因素是sku1和sku2的比较。 无论出于何种原因,比较两个范围/变量都是很困难的。 将它们都转换为字符串后,我能够正确地引用它们的文本值。 我假设以前,我们是在内存中引用它们的索引或地址。

Sub FindMisc()

Dim varSKU1 As Variant
Dim varSKU2 As Variant
Dim n, m
Dim sku1, sku2 As Variant
Dim rowCount1, rowCount2
Dim mFlag As Boolean


rowCount1 = Sheets("SKUs").Cells(Sheets("SKUs").Rows.Count, "A").End(xlUp).Row
rowCount2 = Sheets("Cats").Cells(Sheets("Cats").Rows.Count, "A").End(xlUp).Row

varSKU1 = Sheets("SKUs").Range("A2:A" & rowCount1)
varSKU2 = Sheets("Cats").Range("A2:A" & rowCount2)

m = rowCount2 + 1

    For Each sku1 In varSKU1

        mFlag = False

        For Each sku2 In varSKU2

            If CStr(sku1) = CStr(sku2) Then

                mFlag = True
                Exit For

            End If

        Next sku2

        If mFlag = False Then

            Sheets("Cats").Range("A" & m).Value = sku1
            Sheets("Cats").Range("B" & m).Value = "Misc"
            Sheets("Cats").Range("C" & m).Value = "Miscellaneous"

            m = m + 1

        End If

    Next sku1
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM