【发布时间】:2022-01-09 18:39:04
【问题描述】:
我正在尝试比较 Range1 中的所有值(活动行的 U:X 中的单元格),不包括空格,与 Range2 中的所有值(m,n),不包括空格,并且 - 如果两者之间存在完全匹配范围 - 更改活动行中 Y 列的颜色,否则不更改颜色。
例子:
Range1 包含 Dog, Cat, Bird, [空白单元格], Range2 包含 Dog, Cat, Bird, [多个空白单元格] = MATCH
Range1 包含 Dog、Cat、[空白单元格]、[空白单元格],Range2 包含 Dog、Cat、Bird,[多个空白单元格] = NO MATCH
这是我目前所拥有的,但是当完全匹配时 yColumn 不会改变颜色。我需要另一个循环吗?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cVal As String
Dim tRow, lRow As Long
Dim pID As String
Dim yColumn As Integer
cVal = Sheet1.Cells(Target.Row, Target.Column).Value
tRow = Target.Row
yColumn = 25
lRow = Sheet4.Range("A1200").End(xlUp).Row
pID = Sheet1.Range("A" & tRow).Value
' Check for ALL Cells Match
If Not Intersect(Target, Range("U2:X1500")) Is Nothing Then
Sheet1.Cells(tRow, yColumn).Interior.Color = xlNone
For m = 2 To lRow
If Sheet4.Range("A" & m).Value = pID Then
For n = 11 To 28
If Sheet4.Cells(m, n).Value = cVal And Sheet4.Cells(m, n).Value <> "" And Target(Range("U2:X1500")) = Sheet4.Cells(m, n).Value Then
Sheet1.Cells(tRow, yColumn).Interior.Color = 914271
Exit Sub
End If
Next n
End If
Next m
End If
End Sub
【问题讨论】:
-
您对
cVal = Sheet1.Cells(Target.Row, Target.Column).Value有什么期望?你对Target(Range("U2:X1500")) = Sheet4.Cells(m, n).Value有什么期望? -
请更好地描述比较这些范围的方式。在
Sheet4.Range("A" & m)中是否有更多可能出现pID?Range中的 Dog, Cat, Bird 和第二个中只有 Dog, Cat 呢?没有空单元格怎么办? -
该事件是
Sheet1上的宏,但不在模块中。 Range1 是活动行上 U:X 列中的单元格区域,Range2 是 Sheet4 中从包含基于 cVal 的相应值的行返回的列 (K:AB) 的范围。那部分工作正常。cVal = Sheet1.Cells(Target.Row, Target.Column).Value定义的值决定了 Sheet1 和 Sheet4 中的哪两行正在比较范围。Target(Range("U2:X1500")) = Sheet4.Cells(m, n).Value应将目标行或活动行的 U:X 与 m 和 n 循环返回的值进行匹配。 -
pID在 A 列的 Sheet1 和 Sheet4 中只出现一次。该宏在 Sheet1 的活动行的 A 列中获取pID,并在 Sheet4 的 A 列中搜索pID.定位后,它开始将 Sheet1 中活动行的 U:X 与 Sheet4 中已定位行的 (K:AB) 进行比较以进行匹配。预期结果是,如果 Sheet1 中具有值的所有单元格与 Sheet4 中具有值的所有单元格匹配,则忽略任何空白单元格,Sheet1 中活动行的 Y 列会更改颜色,否则不会发生任何事情。 -
但是如果Sheet1 中具有值的所有单元格都与Sheet4 中具有值的所有单元格匹配,但Sheet4 中有更多值(非空白)?