将一个单元格与A列进行比较,如果B列匹配则写X

时间:2018-10-15 17:57:29

标签: excel vba excel-vba

我一直在寻找可以帮助我上网但没有运气的东西。我正在尝试将A列中的值与单元格E1中的值进行比较,如果匹配,我想在B列中的匹配项旁边的X列中放置一个X。

这是我到目前为止的代码:

     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

感谢您的提前帮助 丹

2 个答案:

答案 0 :(得分:2)

这里有几件事值得一提。当您要使用.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

答案 1 :(得分:1)

我有点不同的方法。这将在A列中找到最后一行。 如果您想按通配符进行匹配,即也想在645中找到45,我也将其包括在内。

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