EXCEL VBA -Getting #NAME?

时间:2018-05-02 22:39:10

标签: excel-vba vlookup vba excel

我正在尝试从另一个excel文件获取用户ID。在主excel文件中,只有一列包含用户名。我写下面但它返回#Name?而不是id。

Dim i As Integer
Dim LastRow As Integer
Dim LastColumn As Integer
Dim Client_id As Variant
Dim user_id As String
Dim Contract_id As Variant


Sub TestAdd()
LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

'Next

For i = 2 To LastRow
user_id = "=VLOOKUP(Range(Cells(i, 3)),[RefUser.xlsx]Sheet1!$A:$B,2,FALSE)"
Range(Cells(i, 2), Cells(LastRow, 2)).Value = user_id
Next

End Sub

2 个答案:

答案 0 :(得分:1)

这不作为公式有效:

user_id = "=VLOOKUP(Range(Cells(i, 3)),[RefUser.xlsx]Sheet1!$A:$B,2,FALSE)"

这样的事情会起作用:

user_id = "=VLOOKUP(C" & i & ",[RefUser.xlsx]Sheet1!$A:$B,2,FALSE)"

然后使用.Formula而非.Value

进行设置

你可以一次性设置所有这些。试试这个:

Dim i As Integer
Dim LastRow As Integer

Sub TestAdd()

    With Worksheets("Sheet1")
        .Range("B2", .Cells(.Rows.Count, 1).End(xlUp).Offset(0,1)).Formula = _
             "=VLOOKUP(C2,[RefUser.xlsx]Sheet1!$A:$B,2,FALSE)"

    End With

End Sub

答案 1 :(得分:1)

要使用VLookup,您需要为该函数提供一些值。签名看起来像VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

  • lookup_value是您期望找到的值。
  • table_array是最左侧列中lookup_value的单元格范围。
  • col_index_num是包含您在找到匹配项时要返回的信息的列号。
  • range_lookup是您正在寻找的匹配项。 0可以用作False的简写。

假设lookup_value位于单元格C2中,与Cells(i,3)对应,因为我从2开始,而table_array位于Range("M1:N10")。您可以使用公式=VLOOKUP(C2,$M$1:$N$10,2,0)。通过省略$并将C2作为相对参考,您可以将其应用于您希望计算值的范围。这比通过循环并将相同的公式单独应用于每个单元格更有效。

Sub AddLookupFormula()
    Dim lastRow As Long
    lastRow = Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row

    Dim formulaRange As Range
    Set formulaRange = ActiveSheet.Range(ActiveSheet.Cells(2, "B"), ActiveSheet.Cells(lastRow, "B"))

    Dim firstLookupCell As String
    firstLookupCell = formulaRange.Cells(1, 1).Offset(ColumnOffset:=1).Address(False, False)

    Dim completedFormula As String
    completedFormula = "=VLOOKUP(" & firstLookupCell & ",$M$1:$N$10,2,0)"
    formulaRange.Formula = completedFormula
End Sub