2016-12-13 2 views
0

Я искал решение для ввода формулы длинного массива, но метод замены не работает. это мой код:Невозможно выполнить операцию замещения с помощью формулы массива (VBA)

Sub code() 
Dim parte1, parte2 As String 
With ThisWorkbook.Sheets("RESUMEN E. CRITICOS") 
    ''RUT 
     parte1 = "IFERROR(INDEX(rut_cliente,SMALL(IF(plataforma=R1C2,ROW(rut_cliente)-ROW(BD_EV!R3C1)+1),ROWS(BD_EV!R2C1:R[-1]C[-2]))),"""")" 
     With .Range("C3") 
      .FormulaArray = "=IF(R1C2=""Todas"",IFERROR(INDEX(rut_cliente,SMALL(IF(plataforma<>""*"",ROW(rut_cliente)-ROW(BD_EV!R3C1)+1),ROWS(BD_EV!R2C1:R[-1]C[-2]))),""""),reemplazar)" 
      .Replace "reemplazar", parte1, xlPart 
     End With 
End With 
End Sub 

Эта формула массива приводит список значений из другого листа и работе с именованными диапазонами, но и со статическими ссылками. Проблема в том, что если я хочу удалить строки на ссылочном листе, статические ссылки перестанут работать. Я попытался использовать обходной путь с именованными диапазонами для статических ссылок, но это не помогло (они постоянно реорганизуют ссылочный диапазон ... не могу сказать почему). Это статические ссылки: ROW(BD_EV!R3C1)+1) и ROWS(BD_EV!R2C1:R[-1]C[-2]). Пожалуйста, помогите! Спасибо!

ответ

0

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

Но этот код будет сделать замену для вас

Sub code() 
Dim parte1, parte2 As String 
With ThisWorkbook.Sheets("RESUMEN E. CRITICOS") 
    ''RUT 

     parte1 = "IFERROR(INDEX(r‌​ut_cliente,SMALL(IF(‌​plataforma=R1C2,ROW(‌​rut_cliente)-ROW(BD_‌​EV!R3C1)+1),ROWS(BD_‌​EV!R2C1:R[-1]C[-2]))‌​),""""))" 

     rep = "=IF(R1C2=""Todas"",IFERROR(INDEX(rut_cliente,SMALL(IF(plataforma<>""*"",ROW(rut_cliente)-ROW(BD_EV!R3C1)+1),ROWS(BD_EV!R2C1:R[-1]C[-2]))),""""),reemplazar)" 
     arrayFormula = Replace(rep, "reemplazar", parte1) 
     With .Range("C3") 
      .FormulaArray = arrayFormula 
     End With 
End With 
End Sub 

Или, если вы хотите, чтобы получить значение из самой клетки,

Sub code() 
Dim parte1, parte2 As String 
With ThisWorkbook.Sheets("RESUMEN E. CRITICOS") 
    ''RUT 

     parte1 = "IFERROR(INDEX(rut_cliente,SMALL(IF(plata‌​forma<>""*"",ROW(rut‌​_cliente)-ROW(BD_EV!‌​$A$3)+1),ROWS(BD_EV!‌​$A$2:A2))),""""),IFE‌​RROR(INDEX(rut_clien‌​te,SMALL(IF(platafor‌​ma=$B$1,ROW(rut_clie‌​nte)-ROW(BD_EV!$A$3)‌​+1),ROWS(BD_EV!$A$2:‌​A2))),""""))" 
     cel = .Range("C3").FormulaArray 

     arrayFormula = Replace(cel, "reemplazar", parte1) 
     .Range("C3").FormulaArray = arrayFormula 

End With 
End Sub 
+2

Благодаря Kylo ... любил свою роль в The Force будит. Должен ли я сгладить «arrayFormula»? если да, должно ли оно быть как строка? спасибо –

+0

Спасибо, забудьте о том, что я получил мою прикладом, взбитой девушкой, да, я сделал ОК. И да, сделайте это «string» – KyloRen

+0

Kylo, ​​попробовал свое первое решение, так как я хочу поместить формулу в ячейку, а не в значение. он разбился на '.FormulaArray = arrayFormula' с ошибкой 1004: не могу присвоить свойство formulaarray класса range. –