2015-03-25 8 views
0

Я пытаюсь выполнить VLOOKUP некоторое значение в 2 листах, и если значение найдено, то я помещаю гиперссылку на ячейку Листа 1, чтобы указать ее на ячейку листа 2.Выполнить формулу excel через VBA

Я написал формулу Excel для того же, и она работает нормально. Но я не могу преобразовать его в формулу VBA. Что я делаю не так?

формула Excel: =IF(ISERROR(VLOOKUP(RC[7],Sheet2!R1C1:R20C1,1,FALSE)),RC[7],HYPERLINK(CELL("address",INDEX(Sheet2!R1C1:R20C1,MATCH(RC[7],Sheet2!R1C1:R20C1,0))),RC[7]))

VBA формула, которую я попробовал:

Sheets(4).Formula = "= IF(ISERROR(VLOOKUP(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,1,FALSE)),RC[7],HYPERLINK(CELL(" & """address""" & ",INDEX(Sheet2!R4C2:" & "R" & Lrow2 & "C2,MATCH(RC[7],Sheet2!R4C2:" & "R" & Lrow2 & "C2,0))),RC[7]))" 

P.S .: Не беспокойтесь о строк и столбцов индексов. Я написал формулу для тестового файла и написал vba для главного файла.

+0

Рассмотрите вопрос «Возвращаясь к основам». Чего вы хотите достичь здесь? Ваша формула excel и поддерживающая vba * чрезвычайно хрупкие. – Bathsheba

+0

Просто попробовал формулу VBA, добавив «Ячейки (1,1)», и это сработало. Примечание. Для целей тестирования я изменил индекс рабочего листа на 1. 'Таблицы (1) .Келлы (1,1) .Formula = _ " = IF (ISERROR (VLOOKUP (RC [7], Sheet2! R4C2: R "и Lrow2 &" C2,1, FALSE)), RC [ 7], HYPERLINK (CELL ("&" "" адрес "" "&", INDEX (Sheet2! R4C2: "&" R "и Lrow2 &" C2, MATCH (RC [7], Sheet2! R4C2: "&" R "& Lrow2 &" C2,0))), RC [7])) "' –

+0

@ BranislavKollár Спасибо. Формула теперь работает. «Таблицы (1) .Келлы (Lrow3, 3) .FormulaR1C1 =« = IF (ISERROR (VLOOKUP (Sheet4! R »и Lrow3 и« C9, Sheet2! R4C2: R »и Lrow2 и« C2,1, FALSE)) , Sheet4! R "& Lrow3 &" C9, HYPERLINK (CELL ("&" "" адрес "" "&", INDEX (Sheet2! R4C2: "&" R "& Lrow2 &" C2, MATCH (Sheet4! R " & Lrow3 & "C9, Sheet2! R4C2:" & "R" и Lrow2 & "C2,0))), Sheet4! R" & Lrow3 & "C9))" Но я попал в другую проблему. Когда я запускаю весь свой код, всплывающее окно отображается 2 раза (1 для Sheet4, а другое для Sheet2), запрашивая имена файлов. Что-то не так с "" "адресом" ""? –

ответ

1

Только небольшая ошибка, которую вы совершили.

Sheets(4).Formula = "" представляет собой формулу, применяемую на листе. Литература 4 имеет почти миллион строк. Где будет сидеть формула?

Sheet(4).cells(row, column).Formula = "" 

Вот один пример я только написал несколько минут назад на SUMIF

shPivotAdjustmentsIRSPV.Cells(NumRows, NumColumns + 1).Formula = 
"=Sum(" & shPivotAdjustmentsIRSPV.Cells(3, NumColumns + 1).Address & 
":" & shPivotAdjustmentsIRSPV.Cells(NumRows - 2, NumColumns + 
1).Address & ")" 
+0

Я пробовал ваше предложение, но я все еще получаю ошибку во время выполнения. Вот то, что я пробовал: для строк 1 = 6 To Lrow1 Листы (4). Целлы (строки 1, 3) .Formula = "= IF (ISERROR (VLOOKUP (RC [7], Sheet2! R4C2: R" и Lrow2 & «C2,1, FALSE)), RC [7], HYPERLINK (CELL (« & »« «адрес», «&», INDEX (Sheet2! R4C2: «&« R »& Lrow2 &« C2, MATCH (RC [7], Sheet2! R4C2: "&" R "& Lrow2 &" C2,0))), RC [7])) " Next Rows1 –

+1

Да. Попробуйте использовать .FormulaR1C1, если вы укажете rows & columnss.Adding к нему я мог найти одну ошибку в приведенном выше коде «Коды» (4) .Келлы (строки 1, 3). Корень, где тег ** bold ** Строки1 недействительны. Просто используйте «code' Sheets (4) .Cells (1, 3). Чтобы проверить, видите ли формулу, показанную в строке 1, столбце 3, после выполнения кода. –

+0

Спасибо. @Manivannan KG –

0

В дополнение к ряду, вам нужно использовать .FormulaR1C1 свойство, если вы собираетесь использовать ссылки R1C1:

Sheets(4).Range("A7").FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,1,FALSE)),RC[7],HYPERLINK(CELL(""address"",INDEX(Sheet2!R4C2:R" & Lrow2 & "C2,MATCH(RC[7],Sheet2!R4C2:R" & Lrow2 & "C2,0))),RC[7]))" 
Смежные вопросы