【问题标题】:Creating an If Statement within a Loop for a Vlookup在循环中为 Vlookup 创建 If 语句
【发布时间】:2020-08-09 14:22:49
【问题描述】:

尝试使用 if 语句创建一个循环,在其中我遍历列的每个名称,然后创建一个 IFERROR with VLOOKUP,它将在某个日期提取该名称的库存(在另一个工作簿中找到),如果该产品在该日期没有任何库存,它等于零。

由于某种原因,当我尝试编写 VLOOKUP formula 时,它给了我一个错误,任何帮助都会很棒。

在合并页面中,产品名称在 B 列,然后日期在 C 列,然后我想将值放在 K 列。

谢谢!

Sub IFTEST()


LR = ActiveSheet.Cells(Rows.Count, "M").End(xlUp).Row

Dim APPLE As Range
Dim GRAPE As Range
Dim RICE As Range
Dim BREAD As Range
Dim PASTA As Range
Dim INVENTORY As Range
Dim cell As Range


Set APPLE = Workbooks("APPLE.xls").Worksheets("APPLE").Range("K:N")
Set GRAPE = Workbooks("GRAPE.xls").Worksheets("GRAPE").Range("K:N")
Set RICE = Workbooks("RICE.xls").Worksheets("RICE").Range("K:N")
Set BREAD = Workbooks("BREAD.xls").Worksheets("BREAD").Range("K:N")
Set PASTA = Workbooks("PASTA.xls").Worksheets("PASTA").Range("K:N")
Set INVENTORY= Workbooks("INVENTORY.xlsm").Sheets("INVENTORY").Range("B2:B" & LR)

Application.ScreenUpdating = False


For Each cell In Inventory
    If cell.Value = "apple" Then

'here is where I get the error in the lookup

        cell.Offset(0, 12).Value = WorksheetFunction.IfError(WorksheetFunction.VLookup(cell.Offset(0, 1).Value, APPLE, 4, False), 0)

    ElseIf cell.Value = "grape" Then

        cell.Offset(0, 12).Value = WorksheetFunction.IfError(WorksheetFunction.VLookup(cell.Offset(0, 1).Value, GRAPE, 4, False), 0)

    ElseIf cell.Value = "rice" Then

        cell.Offset(0, 12).Value = WorksheetFunction.IfError(WorksheetFunction.VLookup(cell.Offset(0, 1).Value, RICE, 4, False), 0)

    ElseIf cell.Value = "bread" Then

        cell.Offset(0, 12).Value = WorksheetFunction.IfError(WorksheetFunction.VLookup(cell.Offset(0, 1).Value, BREAD, 4, False), 0)

    ElseIf cell.Value = "pasta" Then

        cell.Offset(0, 12).Value = WorksheetFunction.IfError(WorksheetFunction.VLookup(cell.Offset(0, 1).Value, PASTA, 4, False), 0)

    Else

         cell.Offset(0, 12).Value = 0



    End If


Next





End Sub

【问题讨论】:

  • 错误是什么?
  • 运行时错误“1004”:无法获取 WorksheetFunction 类的 VLookup 属性
  • 单元格 0,1 中有什么
  • 它是具有产品名称的单元格的下一列中的单元格
  • 尝试Application 而不是WorksheetFunction

标签: excel vba loops vlookup


【解决方案1】:

这里你有两种方法,一种避免嵌套工作表函数的方法,一种不占用多个 IF 空间的方法,或者用 Select ... Case 语句替换它们的更智能但缓慢的方法。

Sub IfTest()
    ' 012

    Dim Wbooks() As String
    Dim Inventory As Range
    Dim Target As Range
    Dim Cell As Range
    Dim Tmp As Variant
    Dim i As Integer

    Wbooks = Split("Apple,Grape,Rice,Bread,Pasta", ",")

    With Workbooks("Inventory.xlsm").Sheets("INVENTORY")
        Set Inventory = .Range(.Cells(2, "B"), .Cells(.Rows.Count, "B").End(xlUp))
    End With

    Application.ScreenUpdating = False
    For Each Cell In Inventory
        Tmp = Cell.Value
        For i = UBound(Wbooks) To 0 Step -1
            If StrComp(Wbooks(i), Tmp, vbTextCompare) = 0 Then
                ' I would reduce the size of this range
                Set Target = Workbooks(Tmp & ".xls").Worksheets(Tmp).Range("K:N")
            End If
        Next i

        If i Then
            On Error Resume Next
            Tmp = WorksheetFunction.VLookup(Cell.Offset(0, 1).Value, Target, 4, False)
            If Err Then Tmp = 0
            On Error GoTo 0
        Else
            Tmp = 0
        End If
        Cell.Offset(0, 12).Value = Tmp
    Next Cell
End Sub

我不敢假设目标工作簿中的 K:N 列长度相同,但这是避免让 Excel 140 万个单元格来搜索每个 VLookup 的一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2020-05-15
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多