我一直在寻找可以帮助我上网但没有运气的东西。我正在尝试将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
感谢您的提前帮助 丹
答案 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