Сравните ячейку со столбцом A и напишите X, если совпадает в столбце B - PullRequest
0 голосов
/ 15 октября 2018

Я пытался найти что-то, что может помочь мне в Интернете, но не повезло.Я пытаюсь сравнить значение в столбце A со значением в ячейке E1, и при совпадении я хочу поставить X в столбце B рядом с соответствием в столбце A.

вот мой код, который я дошел до:

     Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim a As Integer
Dim i As Integer
Dim x As Range
Dim y As Range

a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
i = Worksheets("Sheet1").Range("E1")
x = Worksheets("Sheet1").Range("B1:a")
y = Worksheets("Sheet1").Range("A1:a")

'For Each cell In y
    'if y = i then
        'print "X" in column B next to the value              


   'MsgBox (i)
End Sub

спасибо за вашу помощь заранее Dan

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я немного другой подход.Это найти последнюю строку в столбце А. Я также включил, если вы хотите сопоставить по шаблону, то есть вы хотите найти 45 в 645.

Sub Worksheet_SelectionChange()
Dim lrow As Integer
Dim a As Integer
Dim i As String
Dim Val As String

lrow = Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'Find last row
i = Worksheets("Sheet1").Range("E1") 'Set cell where compare value is

For a = 1 To lrow 'Loop from row 1 to last row in column A
    Val = Cells(a, "A").Value 'Set value to compare in Column A
    'If Val Like "*" & i & "*" Then 'Use this if you want to find 45 in 645, so wildcard
        If Val = i Then 'Exact match
            Cells(a, "B").Value = "X" 'Put X in column B
        End If
Next a
MsgBox "Match Criteria: " & (i)
End Sub
0 голосов
/ 15 октября 2018

Здесь есть несколько вещей, которые стоит упомянуть.Если вы хотите указать диапазон с помощью .Range, вы должны указать столбцы с обеих сторон :;кроме того, он принимает строку.Это означает, что вы передаете "B1:a", что не имеет смысла для компьютера, потому что он не знает, что вы хотите, чтобы он использовал значение a вместо буквы.Вам нужно передать "B1:B" & a на .Range.Это объединяет значение, которое вы нашли в переменной a, со строкой, чтобы оно выглядело как одна строка для компьютера.

Лично я считаю, что проще взять все значения как вектор столбца, а не затемнитьx как range, потому что это делает итерацию немного проще.Вместо того, чтобы отслеживать, в какой строке я нахожусь, Counter всегда будет сообщать мне, где я нахожусь, так как я просто двигаюсь вниз на один столбец.В качестве дополнительного бонуса это сокращает время доступа к рабочему листу, что помогает ускорить ваш макрос.

Несмотря на то, что он закомментирован, стоит отметить, что цикл в нижней части сабвуфера не будет работать, поскольку у вас нетне правильно закрыли if или for.

Я не уверен, для чего ты это задумал, но никогда не плохая идея использовать значимые имена, чтобы ты мог оглянуться на свой код и разобраться в нем.без особых усилий.Например, я переименовал вашу переменную a в lastrow, которая с первого взгляда описывает, какое значение она хранит.

Ниже вашего кода, который я изменил

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim lastrow As Long
Dim Criteria As Long
Dim x() As Variant
Dim Counter As Long

lastrow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Criteria = Worksheets("Sheet1").Range("E1").Value
x = Worksheets("Sheet1").Range("B1:B" & lastrow).value

For Counter = 1 To UBound(x)
    If x(Counter,1) = Criteria Then
        Worksheets("Sheet1").Cells(Counter, "B").Value = "X"
    End If
Next Counter
MsgBox (Criteria)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...