繁体   English   中英

Excel VBA 根据范围检查值列表并在另一列中返回设定值

[英]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 的新手,并且已经参考这个网站几个月来回答我的大部分问题,但这个问题让我很难过。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM