EXCEL VBA -Получить #NAME? - PullRequest
       19

EXCEL VBA -Получить #NAME?

0 голосов
/ 03 мая 2018

Я пытаюсь получить идентификатор пользователя для другого файла Excel. В главном файле Excel есть только один столбец с именем пользователя. Я написал ниже, но он возвращает #Name? вместо идентификатора.

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 голосов
/ 03 мая 2018

Чтобы использовать 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
0 голосов
/ 03 мая 2018

Это недопустимо в качестве формулы:

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
...