我正在尝试从另一个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
答案 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