【问题标题】:How to vlookup in a column in a Range of an other column's length using VBA?如何使用 VBA 在其他列长度范围内的列中查找?
【发布时间】:2019-12-04 22:10:14
【问题描述】:

我想在列中查找值,但只能在其他列长度的范围内。 (通过其他列长度,我的意思是它有多少个带有值的单元格)。 A 列有 ID,F 列有产品代码。在 I 列中,我想写下每个产品代码名称。 (我正在从另一张产品表中进行我的 vlookup)。如果 vlookup 失败,我将在特定行中写入 ERROR 而不是 #N/A。可能会发生用户在 A 列中输入 ID,但忘记输入产品代码,所以我想查找 F 列直到 A 列中的行数(输入的 ID)(这样用户可以看到错误,因为现有 ID 没有产品代码) 我应该如何覆盖下面的代码? 我知道我应该以某种方式覆盖这一行: 对于 Sheet1.range(ToLookup, range(columnName & Rows.Count).End(xlUp)) 中的每个 Acell

Sub Validation()
    Dim inputTemplate As Worksheet
    Set inputTemplate = Worksheets("Input template")
    Dim accounts As Worksheet
    Set accounts = Worksheets("Accounts")
    Dim products As Worksheet
    Set products = Worksheets("Products")

    Call Clear(inputTemplate)
    Call aValidation(inputTemplate, accounts, inputTemplate.range("F2"), accounts.range("A1:B45"), "F", 4, -5)
    Call aValidation(inputTemplate, products, inputTemplate.range("E2"), products.range("A1:C33"), "E", 4, -4)

End Sub

Sub aValidation(Sheet1 As Worksheet, Sheet2 As Worksheet, ToLookup As range, LookupTable As range, columnName As String, LookupPos As Integer, CIDPos As Integer)
    Dim Acell As range

    For Each Acell In Sheet1.range(ToLookup, range(columnName & Rows.Count).End(xlUp))

        Acell.Offset(0, LookupPos).HorizontalAlignment = xlLeft
        Acell.Offset(0, LookupPos).Formula = Application.VLookup(Acell, LookupTable, 2, False)
        Debug.Print (Acell.Offset(0, -4).Value)


        If Application.WorksheetFunction.IsNA(Acell.Offset(0, LookupPos).Value) And IsEmpty(Acell.Offset(0, CIDPos)) = False Then
            Acell.Offset(0, LookupPos).Interior.Color = RGB(255, 0, 0)
            Acell.Offset(0, LookupPos).Value = "ERROR"
            Acell.Offset(0, LookupPos).HorizontalAlignment = xlVAlignCenter
        End If
    Next Acell

End Sub

Sub Clear(Sheet1 As Worksheet)
    Sheet1.Columns("H:J").Rows("2:" & Rows.Count).ClearContents
    Sheet1.Columns("H:J").Rows("2:" & Rows.Count).ClearFormats
End Sub

【问题讨论】:

    标签: vba reference vlookup


    【解决方案1】:

    同时我得到了答案:

    For Each Acell In Sheet1.range(ToLookup, range(columnName & Sheet1.Columns("A").Cells.SpecialCells(xlCellTypeConstants).Count))
    

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多