Excel vba: почему этот вложенный цикл не выполняет сравнение 1 к нескольким? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть следующий nexted для цикла

'searches matches in Col C against B
For Row = 2 to totalrows Step 1

    'MsgBox "cell :" & Cells(Row, 2).Value
    For c = 2 To totalrows Step 1
        MsgBox " cell b :" & Cells(c, 2) & " cell C:" & Cells(rows, 3).Value
        If Cells(c, 3).Value = Cells(Row, 2).Value Then
            'change b color to orange = found
            With Cells(c, 2).Interior
                .ColorIndex = 4
                .Pattern = xlSolid
            End With

        End If

    Next c
Next Row

сейчас сравнивается b1 = c1 b2 = c2 b3 = c3 вместо b1 = c1 b1 = c2 b1 = c3 b2 = c1 b2 = c2 ...

я что-то упустил?

Ответы [ 3 ]

1 голос
/ 14 декабря 2010

В msgbox, когда вы получаете значение ячейки b, вы пропускаете значение .value, а когда получаете значение ячейки c, вы записываете ячейки (rows, 3), что неверно, должны быть ячейки (row, 3),Возможно (поскольку код постов других пользователей очень похож на ваш), он работает нормально, но отображаемые в нем окна сообщений ошибочны из-за этой строки кода.

0 голосов
/ 14 декабря 2010

Редактировать: Может быть, я должен упомянуть, что то, что было в msgbox и что сравнивалось, было не то же самое, и я изменил это.

Я работаю с debug.print и открываю окно, которое помогает. У меня есть это в моем листе

a1  b1  c1  d1
a2  b2  c2  d2
a3  b3  c3  d3
a4  b4  c4  d4

Это код

Sub mysub()

totalrows = 4

'searches matches in Col C against B
For Row = 1 To totalrows Step 1

    Debug.Print "row = " & Row
    'MsgBox "cell :" & Cells(Row, 2).Value
    For c = 1 To totalrows Step 1
        'MsgBox " cell b :" & Cells(c, 2) & " cell C:" & Cells(Row, 3).Value
        Debug.Print " cell b :" & Cells(Row, 2).Value & " cell C:" & Cells(c, 3).Value
        If Cells(Row, 2).Value = Cells(c, 3).Value Then
            'change b color to orange = found
            With Cells(c, 2).Interior
                .ColorIndex = 4
                .Pattern = xlSolid
            End With

        End If

    Next c
Next Row
End Sub

Это результат

row = 1
 cell b :b1 cell C:c1
 cell b :b1 cell C:c2
 cell b :b1 cell C:c3
 cell b :b1 cell C:c4
row = 2
 cell b :b2 cell C:c1
 cell b :b2 cell C:c2
 cell b :b2 cell C:c3
 cell b :b2 cell C:c4
row = 3
 cell b :b3 cell C:c1
 cell b :b3 cell C:c2
 cell b :b3 cell C:c3
 cell b :b3 cell C:c4
row = 4
 cell b :b4 cell C:c1
 cell b :b4 cell C:c2
 cell b :b4 cell C:c3
 cell b :b4 cell C:c4
0 голосов
/ 14 декабря 2010
Sub a()
totalrows = 3
'searches matches in Col C against B
For Row = 2 To 2 + totalrows Step 1

    'MsgBox "cell :" & Cells(Row, 2).Value
    For c = 2 To 2 + totalrows Step 1
        MsgBox " cell B :" & Cells(c, 2).Value & " cell C:" & Cells(Row, 3).Value
        If Cells(c, 3).Value = Cells(Row, 2).Value Then
            'change b color to GREEN = found
            With Cells(c, 2).Interior
                .ColorIndex = 4
                .Pattern = xlSolid
            End With

        End If

    Next c
Next Row
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...