无法使替换方法与数组公式一起使用 (VBA)
Can't make Replace method work with Array Formula (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
此数组公式从另一个 sheet 中获取值列表并适用于命名范围,但也适用于静态引用。问题是如果我想删除引用 sheet 上的行,静态引用将停止工作。我尝试对静态引用使用命名范围的解决方法,但这没有帮助(他们不断地重新安排引用的范围......无法说出原因)。这是静态引用是:ROW(BD_EV!R3C1)+1)
和ROWS(BD_EV!R2C1:R[-1]C[-2])
。
请帮忙!
谢谢!
这将替换字符串中的 reeplazar
,然后您所要做的就是确保在将其分配给单元格时将其分配为数组公式。我相信您的公式有效,因为我无法对其进行测试。
但此代码会为您完成替换
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]))),""""))"
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(plataforma<>""*"",ROW(rut_cliente)-ROW(BD_EV!$A)+1),ROWS(BD_EV!$A:A2))),""""),IFERROR(INDEX(rut_cliente,SMALL(IF(plataforma=$B,ROW(rut_cliente)-ROW(BD_EV!$A)+1),ROWS(BD_EV!$A:A2))),""""))"
cel = .Range("C3").FormulaArray
arrayFormula = Replace(cel, "reemplazar", parte1)
.Range("C3").FormulaArray = arrayFormula
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(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
此数组公式从另一个 sheet 中获取值列表并适用于命名范围,但也适用于静态引用。问题是如果我想删除引用 sheet 上的行,静态引用将停止工作。我尝试对静态引用使用命名范围的解决方法,但这没有帮助(他们不断地重新安排引用的范围......无法说出原因)。这是静态引用是:ROW(BD_EV!R3C1)+1)
和ROWS(BD_EV!R2C1:R[-1]C[-2])
。
请帮忙!
谢谢!
这将替换字符串中的 reeplazar
,然后您所要做的就是确保在将其分配给单元格时将其分配为数组公式。我相信您的公式有效,因为我无法对其进行测试。
但此代码会为您完成替换
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]))),""""))"
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(plataforma<>""*"",ROW(rut_cliente)-ROW(BD_EV!$A)+1),ROWS(BD_EV!$A:A2))),""""),IFERROR(INDEX(rut_cliente,SMALL(IF(plataforma=$B,ROW(rut_cliente)-ROW(BD_EV!$A)+1),ROWS(BD_EV!$A:A2))),""""))"
cel = .Range("C3").FormulaArray
arrayFormula = Replace(cel, "reemplazar", parte1)
.Range("C3").FormulaArray = arrayFormula
End With
End Sub