1

我只循环通过 ResultsTable 的 A 列。ResultsTable 的 A 列包含 FirstNames 列表。如果 ResultsTable 的 A 列中的行具有值,则将 XLOOKUP 公式应用于 ResultsTable 的 B 列,该公式将 ResultsTable 中的 FirstName 与 LookupTable 中的 FirstName 匹配。如果ResultsTable 中的FirstName 与LookupTable 中的FirstName 匹配,则从LookupTable 中获取与FirstName 关联的LastName,并将LastName 放入ResultsTable 的B 列中。仅当在 ResultsTable 的 A 列中找到 FirstName 时才应执行此操作(即,如果“A2”具有 FirstName 值,则应用公式将 LastName 从 LookupTable 放入 ResultsTable 的单元格“B2”)。因此,下面的代码有效,但是当 ResultsTable 的 A 列中的行中没有 FirstName 时,公式将应用于 ResultsTable 的 B 列中的行(即下面的代码将公式应用于“B50”,即使“A50”为空白)。在 ResultsTable 中包含 FirstName 的列 A 中的行数将是一个动态范围。仅当 ResultsTable 的 A 列具有 FirstName 值时,如何将下面的代码获取到 ResultsTable 的 B 列中的 XLOOKUP 公式?代码如下所示:仅当 ResultsTable 的 A 列具有 FirstName 值时,如何将下面的代码获取到 ResultsTable 的 B 列中的 XLOOKUP 公式?代码如下所示:仅当 ResultsTable 的 A 列具有 FirstName 值时,如何将下面的代码获取到 ResultsTable 的 B 列中的 XLOOKUP 公式?代码如下所示:

Sub Test()
    'Declare variables
    Dim wbk As Workbook, wsLookupTable As Worksheet, wsResultsTable As Worksheet 
    Dim rng As Range, FirstNames As Variant, i As Long
    'Set variables
    Set wbk = ThisWorkbook
    Set wsLookupTable = wbk.Worksheets("LookupTable")
    Set wsResultsTable = wbk.Worksheets("ResultsTable")
    'Activate the ResultsTable
    wsResultsTable.Activate
    With wsResultsTable
        'Set the Range to the UsedRange of Column A of the ResultsTable
        Set rng = wsResultsTable.UsedRange.Columns("A")
        'Set the FirstNames array to the Range of Column A of the ResultsTable
        FirstNames = rng
        'Use a For loop to search the Range in the ResultsTable
        For i = LBound(FirstNames, 1) To UBound(FirstNames, 1)
            'If FirstName in Column A has a value (i.e. not empty)
            If FirstNames(i, 1) <> "" Then
                'Use a XLOOKUP formula to match FirstName of ResultsTable
                'To the FirstName of the LookupTable
                'Put value of the LastName that matches the FirstName in the LookupTable
                'Into Column B of the ResultsTable
                rng(i, 2).FormulaR1C1 = _
                "=XLOOKUP([@FirstName],LookupTable[FirstName],LookupTable[LastName])"
            End If
        Next i
    End With
End Sub

非常感谢。

4

1 回答 1

0

在公式中添加一条IF语句以检查 FirstName 是否为空。如果为空,则写入一个空字符串。如果它不是空白,则执行 XLOOKUP。

我的语法可能是错误的,所以请相应地调整。

rng(i, 2).FormulaR1C1 = "=IF([@FirstName] = """", """", XLOOKUP([@FirstName],LookupTable[FirstName],LookupTable[LastName]))"
于 2022-01-02T22:52:27.697 回答