如何检查一个范围内的单元格是否存在于另一个范围内
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 中的所有值作为新单元格添加到表格 ("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 的比较。无论出于何种原因,比较两个 ranges/variants 都是在挑剔。将它们都转换为字符串后,我能够正确引用它们的文本值。我假设之前,我们引用了它们在内存中的索引或地址。
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
在这个问题上坚持太久了,我希望你们中的一位能提供一些见解。
我正在尝试遍历一个单元格范围 (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 中的所有值作为新单元格添加到表格 ("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 的比较。无论出于何种原因,比较两个 ranges/variants 都是在挑剔。将它们都转换为字符串后,我能够正确引用它们的文本值。我假设之前,我们引用了它们在内存中的索引或地址。
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