Причина вы получаете ошибки является ""
обеспечить двойные кавычки в формуле, необходимо использовать """"
вместо.
Затем нужно ввести формулу в L10 таким образом:
ActiveSheet.Range("L10").FormulaArray = "=IF(J10<>"""",INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(Home!J10=Data!E:E),0)),INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(K10=Data!F:F),0)))"
Затем, чтобы заполнить строки ниже использование Range.AutoFill
ActiveSheet.Range("L10").AutoFill .Range("L10:l100")
Где L10: L100 является диапазон, в котором формула должен быть размещен.
Итак:
Sub Check()
Dim lastrow As Long
Dim sht As Worksheet
Set sht = ActiveSheet
With sht
lastrow = .Cells(.Rows.Count, 10).End(xlUp).Row
.Range("L10").FormulaArray = "=IF(J10<>"""",INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(Home!J10=Data!E:E),0)),INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(K10=Data!F:F),0)))"
.Range("L10").AutoFill ActiveSheet.Range("L10:L" & lastrow)
End With
End Sub
ПРИМЕЧАНИЕ
Как указано в комментариях, все полные ссылки на столбцы для набора данных на данных должны также быть изменены для ссылки только данные.
Формулы массива будут перебирать и вычислять всю ссылку. Поэтому каждая Формула будет выполнять более 8 миллионов вычислений. Умножьте, сколько раз вводится формула, и вы можете видеть, как это повлияет на время вычислений и может даже привести к краху вашего excel.
Если вы хотите, чтобы люди воссоздавались, вы должны указать, какие листы указаны в вашей формуле. До сих пор я вижу «данные» и «дом». –