Сравните 2 столбца динамического диапазона в Excel VBA нажатием кнопки - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь сравнить 2 (B и C) столбца и написать в столбце D совпадение или отсутствие совпадения нажатием кнопки в Excel, но я новичок в VBA.

Вот некоторые из моих попыток нуби.Я знаю, что это не динамично, но я застрял, и я не могу понять это.Так что терпите меня.Любая помощь очень ценится

Private Sub CommandButton1_Click()
Dim bothcolumns As Range, i As Integer


   Set bothcolumns = [B2:B3000, C2:C3000]
   With bothcolumns
    For i = 1 To .Rows.Count
    If Not StrComp(.Cells(i, 1), .Cells(i, 2), vbBinaryCompare) = 0 Then
    With Value
           For i = 1 To .Rows.Count
        Range(.Cells(i, 5)).Value = "NoMatch"

        Range(.Cells(i, 1), .Cells(i, 2)).Interior.ColorIndex = 3
        Range("E1:E300").Value = "NoMatch"
        ElseIf Not StrComp(.Cells(i, 1), .Cells(i, 2), vbBinaryCompare) = 1 Then
        Range("E1:E300").Value = "Match"
    End If

    Next i

    End With
End Sub

Ответы [ 3 ]

0 голосов
/ 06 июня 2019

Это будет выполнять итерацию по всем используемым строкам на листе, а затем сравнивать значения ячеек столбцов 'B' и 'C'.

Попробуйте этот код:

 Private Sub CommandButton1_Click()

    Dim rowsMax As Long
    Dim i As Long

    'This gets the total of used rows in the Worksheet
    rowsMax = ThisWorkbook.ActiveSheet.UsedRange.Rows.Count

    For i = 2 To rowsMax
        If ThisWorkbook.ActiveSheet.Cells(i, 2).Value = ThisWorkbook.ActiveSheet.Cells(i, 3).Value Then
            ThisWorkbook.ActiveSheet.Cells(i, 4).Value = "Match"
        Else
            ThisWorkbook.ActiveSheet.Cells(i, 4).Value = "No Match"
        End If
    Next
End Sub
0 голосов
/ 06 июня 2019

Несколько советов:

  1. i и Value не объявлены. Из моего опыта i должен объявить As Long и Value должен объявить As Worskheet
  2. With Value и второй For i = 1 To .Rows.Count не закрываются с Next i и End with соответственно.
  3. Для i лучше использовать As Long, чтобы избежать ошибок при работе с большими размерами данных.
  4. Вы используете .Cells НО вы не используете . до Range, поэтому диапазон, который вы не включили в верхний With.
  5. bothcolumns объявлено As Range, НО вы используете [], что неправильно. Также вы устанавливаете диапазон, НО вы пропускаете имя листа (например, Set bothcolumns = ThisWorkbook.Worksheets("Sheet1").Range(...). На мой взгляд, лучший набор - Set bothcolumns = ThisWorkbook.Worksheets("Sheet1").Range("B2:C3000")
0 голосов
/ 06 июня 2019

Я не знаю, почему вы ошиблись, но у вас есть два цикла для и только один Next i. Кроме того, ваши два цикла имеют одинаковую переменную отступа i.

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