Vba для Vlookup с переменной SheetName

Следующая часть кода должна выполнять Vlookup с именем листа переменной. Однако vlookup возвращает только 0, а не желаемое значение из диапазона поиска, учитывая, что диапазон поиска имеет одинаковую структуру на этих нескольких листах с именем переменной, поэтому любой совет.

Dim SheetName As Variant: SheetName = DestinationWs.Name

Dim OldRemainingHoursLastRowFirst As Variant
OldRemainingHoursLastRowFirst = DestinationWs.Range("W3").End(xlDown).Row

DestinationWs.Range("L4").FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],""'" & StringVal & "'!R4C12:R" & OldRemainingHoursLastRowFirst & "C14"",2,0),0)"

После выполнения следующего кода это снимок из строки формул

Не большой пользователь R1C1, поэтому можете ли вы выразить эту формулу в нотации A1? У меня проблемы с пониманием того, зачем вам нужен ДВССЫЛ...

Tim Williams 20.02.2023 18:44

Косвенная проблема была решена после обновления команды до DestinationWs.Range("L4").FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],INDIRECT(""'" & StringVal & "'!R[4]C[12) ]:R[" & OldRemainingHoursLastRowFirst & "]C[14]"",0),2,0),0)". Но результаты vlookup всегда равны 0. Я использую косвенное значение vlookup через имя листа переменной на основе входного значения

Mostafa Nabil 20.02.2023 19:47

Но вам здесь не нужен INDIRECT()? Вы подставляете имя листа непосредственно в формулу, поэтому indirect не требуется. Есть ли у каждого месячного листа таблица поиска в одном и том же диапазоне?

Tim Williams 20.02.2023 22:55

Таким образом, вы можете сказать, что я могу напрямую вставить имя листа переменной в функцию vlookup без косвенного fn! .. что касается второго пункта, да, все листы других месяцев имеют одну и ту же таблицу поиска в том же диапазоне, но с другими данными. Итак, что вы посоветуете.

Mostafa Nabil 20.02.2023 23:20

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

Tim Williams 20.02.2023 23:35

Пост обновлен и отредактирован сейчас, после того, как приму во внимание ваш совет.

Mostafa Nabil 21.02.2023 00:21

Ваша формула смешивает обозначения R1C1 и A1?

Tim Williams 21.02.2023 00:39
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
7
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Слишком много цитат?

Dim SheetName As Variant
SheetName= DestinationWs.Name

DestinationWs.Range("L4").FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],INDIRECT('" & _
             SheetName & "'!R[" & OldRemainingLastRowFirst & "]C[12]:R[" & _
             OldRemainingLastRowFirst & "]C[12]), 2, 0)"

После обновления поста:

    Dim srIndex, sMonth, destinationWs As Worksheet, lRow As Long
    Dim wsMonth As Worksheet, wsPrevMonth As Worksheet
    Dim selMonth, prevMonth, lRow As Longo
    
    '...
    
    selMonth = MonthResultRg.Cells(Application.match(CLng(InputValue), IndexRange, 0))
    prevMonth = MonthResultRg.Cells(Application.match(CLng(InputValue) - 1, IndexRange, 0))
    
    'reference selected and previous months' sheets
    Set wsMonth = FindSheet(ThisWorkbook, selMonth)
    Set wsPrevMonth = FindSheet(ThisWorkbook, prevMonth)
    lRow = wsPrevMonth.Range("W3").End(xlDown).Row
    
    wsMonth.Range("L4").Formula = _
      "=IFERROR(VLOOKUP(J4,'" & wsPrevMonth.Name & "'!L4:N" & lRow & ",2,0),0)"

FindSheet Функция:

'return the first sheet in `wb` whose name contains `txt`
Function FindSheet(wb As Workbook, txt) As Worksheet
    Dim ws As Worksheet
    For Each ws In wb.Worksheets
        If InStr(1, ws.Name, txt, vbTextCompare) > 0 Then
            Set FindSheet = ws
            Exit Function
        End If
    Next ws
End Function

Ошибка времени выполнения «1004»: ошибка, определяемая приложением или объектом.

Mostafa Nabil 20.02.2023 10:39
Debug.Print формулу и вставьте ее в ячейку. Excel сообщит вам, если есть проблема
Tim Williams 20.02.2023 17:48

Прежде всего, большое спасибо за вашу помощь, наконец-то это сработало. Пожалуйста, примите мои плохие знания. и еще раз большое спасибо.

Mostafa Nabil 21.02.2023 10:05

Нет проблем - приятно слышать, что у вас все получилось.

Tim Williams 21.02.2023 17:16

Другие вопросы по теме