两个单元格值的比较总是不相等

时间:2018-03-01 15:08:37

标签: excel vba excel-vba

无论出于何种原因,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

2 个答案:

答案 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)作为列的索引。

据我所知,您应该使用正数作为索引。