![](/img/trans.png)
[英]Excel VBA Check value of cell (first 3 characters) against a list on another sheet
[英]Excel VBA to check a list of values against a range and return a set value in another column
如果列 P 的值与集合列表中的任何值匹配,我试图在列 V 中输入“是”值。
“过滤器”表包含 P 列中的值列表。
“编译数据”表是我希望对照列表检查 P 列的地方,然后在 V 列中为同一行输入“是”。
我尝试了一个索引/匹配函数和一个 For/with 函数,但也许我没有完全掌握这些函数中的每个动作,或者需要将它们组合起来。 我是 VBA 的新手,并且已经参考这个网站几个月来回答我的大部分问题,但这个问题让我很难过。
电子表格
请注意,这也可以使用单元格V2
的以下 Excel 公式来处理:
=IF(ISNUMBER(MATCH(P2,Filters!P:P,0)),"Yes","")
VBA
Option Explicit
Sub VBALookup()
' Destination
Const dstName As String = "Compiled Data"
Const dFirst As Long = 2
Const dLookup As String = "P"
Const dResult As String = "V"
Const dString As String = "Yes"
' Source
Const srcName As String = "Filters"
Const sFirst As Long = 2
Const sLookup As String = "P"
' Workbook
Dim wb As Workbook
Set wb = ThisWorkbook
' Declare Last Row for both worksheets.
Dim LastRow As Long
' Source
Dim src As Worksheet
Set src = wb.Worksheets(srcName)
LastRow = src.Cells(src.Rows.Count, sLookup).End(xlUp).Row
Dim sRng As Range
Set sRng = src.Cells(sFirst, sLookup).Resize(LastRow - sFirst + 1)
' Destination
Dim dst As Worksheet
Set dst = wb.Worksheets(dstName)
LastRow = dst.Cells(dst.Rows.Count, dLookup).End(xlUp).Row
Dim dRng As Range
Set dRng = dst.Cells(dFirst, dLookup).Resize(LastRow - dFirst + 1)
Dim ColumnOffset As Long
ColumnOffset = dst.Columns(dResult).Column - dst.Columns(dLookup).Column
' Write Result String ('dString') to Destination Result Range.
Dim cel As Range
For Each cel In dRng.Cells
If Not IsError(Application.Match(cel.Value, sRng, 0)) Then
cel.Offset(, ColumnOffset).Value = dString
End If
Next cel
' Inform user.
MsgBox "Lookup finished successfully.", vbInformation, "Success"
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.