无论出于何种原因,If zoneChanged.Columns(-5).Value <> correctZone.Columns(2).Value Then
语句始终评估为true,尽管单元格中的值相同。也许在这一点上,价值观永远不会相同,但我无法弄清楚原因。此外,返回的结果在两组值之间交替,即使这不是预期的。这是整个代码:
Sub panelSearch()
Dim Pos As Long
Dim i As Long
Dim cellFieldSet As Range
Dim cellSearchSet As Range
Dim cellBeingSearched As Range
Dim cellBeingSearchedFor As Range
Dim zoneChanged As Range
Dim correctZone As Range
Dim interVal As Range
'Area I am attempting to search
Set cellSearchSet = Range("U2:U8184") '8184
'Values I am searching for
Set cellFieldSet = Range("AI2:AI615")
i = 0
For Each cellBeingSearched In cellSearchSet
For Each cellBeingSearchedFor In cellFieldSet
Pos = InStr(cellBeingSearched, cellBeingSearchedFor.Value)
If Pos > 0 Then 'code if found
Set zoneChanged = cellBeingSearched
Set correctZone = cellBeingSearchedFor
'-4142 is default color index
If zoneChanged.Columns(-5).Interior.ColorIndex = -4142 Then
'This control statement always evaluates as true even when the two cells should be the same
If zoneChanged.Columns(-5).Value <> correctZone.Columns(2).Value Then
'Need to add counter to keep multiple results from changing cell multiple times
zoneChanged.Columns(-5).ClearContents
zoneChanged.Columns(-5) = zoneChanged.Columns(-5) & correctZone.Columns(2)
zoneChanged.Columns(-5).Interior.Color = RGB(255, 0, 0)
'Counter for multiple results
If i > 0 Then
zoneChanged.Columns(-5).Interior.Color = RGB(128, 128, 128)
End If
End If
i = i + 1
End If
End If
Next cellBeingSearchedFor
Next cellBeingSearched
End Sub
答案 0 :(得分:3)
现在@DisplayName指出我的解释不正确,我对它有了更深入的了解。然而,解决方案并没有改变,只是我的解释原因。
所以问题中的问题显然是,由于(乍看之下) column
属性的非常奇怪的计数系统,它只是改变了错误的列数(其中如果我们调查它并不奇怪。)
处理行/列计数时,Excel从1
开始计数。因此,如果我们执行Column(1).Select
,则会选择第一列A
。因此,我们在column
属性中提供的参数是列号(而不是我们要转移的金额)。
因为Column(1)
是第一列(例如所选范围的列),这意味着Column(0)
是第一列(所选范围的列)的左侧。
因此,如果我们使用column
来移动.Columns(-1)
,则将选择2
列向左移动,是的,我的意思是两个。
Columns(5).Columns(-1).Select
Debug.Print Selection.Column '= 3
如果我们考虑转移,我们会等待选择第4列(向左移动)。但是它选择列号 -1
,其中当前列是第1列。因此,从1
(当前)到-1
(目标)进行计数,它是{ {1}} 2
左侧的{1}}步骤,以及1
向左移动的原因。
<强>结论强>
我的结论是2
应该用于跳转到特定的列号。但是当我们想要相对于当前选择移位(特定数量的列)时,我们应该使用Columns()
来方便计数。
所以Offset()
正在按预期移动Offset
将选择.Offset(0, -1)
列向左移动(我们期望1
)。
要使5个单元格继续使用-1
。 .Offset(0, -5)
的相同内容应相应为.Columns(2)
。
.Offset(0, 2)
有关详细信息,请查看文档:{{3}}
答案 1 :(得分:1)
我相信这是因为您使用负值(-5)作为列的索引。
据我所知,您应该使用正数作为索引。