Vlookup 类型不匹配

问题描述

我正在尝试在 VBA 中执行 vlookup,但代码似乎没有正确获取单元格值。变量 rowrng 和 colrng 被返回为 #N/A

  Sub DosiDo()

'Declare Variables
Dim colnum As Long
Dim rownum As Long
Dim i As Integer
Dim rowrng As Variant
Dim colrng As Variant

'Set worksheets
Dim wb As Workbook
Dim ws As Worksheet
Dim newWs As Worksheet
Dim table1 As Range
Dim ws1 As String

Set wb = ActiveWorkbook
Set newWs = wb.Worksheets.Add
newWs.Name = "DosiDo"

    
    With Workbooks("210721-LeaveRecords.xlsm").Sheets("Sheet1")
            Set table1 = .Range(.Cells(2,2),.Cells(7,9))
    End With

    wsl = "AS Darwin"

    rowrng = Application.VLookup(ws1,table1,7,False)
    colrng = Application.VLookup(ws1,8,False)
    
    newWs.Cells(i + 1,4).Value = rowrng
    newWs.Cells(i + 1,5).Value = colrng

End Sub

解决方法

你调暗了 ws1 错了。

ws1 改为 wsl

  Sub DosiDo()

'Declare Variables
Dim colnum As Long
Dim rownum As Long
Dim i As Integer
Dim rowrng As Variant
Dim colrng As Variant

'Set worksheets
Dim wb As Workbook
Dim ws As Worksheet
Dim newWs As Worksheet
Dim table1 As Range
Dim wsl As String

Set wb = ActiveWorkbook
Set newWs = wb.Worksheets.Add
newWs.Name = "DosiDo"

    
    With Workbooks("210721-LeaveRecords.xlsm").Sheets("Sheet1")
            Set table1 = .Range(.Cells(2,2),.Cells(7,9))
    End With

    wsl = "AS Darwin"

    rowrng = Application.VLookup(ws1,table1,7,False)
    colrng = Application.VLookup(ws1,8,False)
    
    newWs.Cells(i + 1,4).Value = rowrng
    newWs.Cells(i + 1,5).Value = colrng

End Sub
,

当 VLOOKUP 在最后一个参数为“FALSE”时提供的范围的第一列中找不到键值时,结果为 N/A。也许这就是问题所在??

表 1 地址为 $B$2:$I$7。您的 VLOOKUP 函数分别从 $H$2:$H$7 和 $I$2:$I$7 中为 $B$2:$B$7 中具有“AS Darwin”的行查找值。这就是你追求的吗?

如果是这样,也许您可​​以尝试使用自动过滤器?

With table1
    .AutoFilter Field:=1,Criteria1:=ws1,Operator:=xlAnd
    .SpecialCells(xlCellTypeVisible).Areas(2).Resize(1,2).Offset(,5).Copy NewWS.Cells(i + 1,4)
    .AutoFilter 'turns autofilter off
End With

如果 table1 的格式不是 Excel 表格(VBA“ListObject”),并且匹配的行不是标题之后的第一行(第 3 行),则需要 .Areas(2)。此外,.Resize(1,2) 仅返回匹配项第一行的两列,并从表格左侧的第 6 列开始(在本例中,.Offset(,0) = 列 B)。

对于过滤器后没有可见行的情况(例如,If .SpecialCells(xlCellTypeVisible).Rows.Count > 1 or .SpecialCells(xlCellTypeVisible).Areas.Count > 1 Then ...),您需要进行陷印

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...