2016-12-21 4 views
0

Я пытаюсь вставить формулу массива вниз столбец из строки 10 и далее:vba insert array formula от диапазона до конца строки?

Sub Check() 
ActiveSheet.Range("L10").End(xlUp).Row.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)))" 
End Sub 

По какой-то причине это не работает, и я получаю объект требуется ошибка. Я также хочу, чтобы каждая ячейка ссылалась на каждую строку. Я новичок в vba, так что извиняюсь, если мой код невелик, но если кто-то мог бы направить меня в правильном направлении, я бы очень это оценил?

Благодаря

+0

Если вы хотите, чтобы люди воссоздавались, вы должны указать, какие листы указаны в вашей формуле. До сих пор я вижу «данные» и «дом». –

ответ

0

Причина вы получаете ошибки является "" обеспечить двойные кавычки в формуле, необходимо использовать """" вместо.

Затем нужно ввести формулу в 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.

+0

Мне нужна эта формула, которая будет вставлена ​​в более чем 100 строк. Мне нужно, чтобы это было вставлено по всему столбцу L –

+0

@ Bing.Wong вы столкнетесь с Excel. То, что многие формулы массива, которые ссылаются на полные ссылки на столбцы, как у вас, вызовут огромные задержки в вычислениях. Вы должны ограничить все ссылки и количество записей только тем, что находится в наборе данных, на которые ссылаются данные, и фактическим числом точек данных в столбце J. –

+0

. Есть ли способ, которым я могу вставить эти формулы до последней используемой строки, пожалуйста? НАПРИМЕР. Последняя используемая строка из столбца A, например. –

Смежные вопросы