最近,我遇到了一个Excel
限制,并得知我们不能使用VBA
直接在单元格上写一个长度超过255个字符的数组公式。
我在网络上(包括在SO:here上)发现的此问题的解决方案是,将公式的一部分插入单元格后,对其进行替换。
这就是我想要做的:
Sub WriteFormulaArray()
'------
Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
'------
Dim StrF1 As String: StrF1 = "=IFERROR(""PART2""/""PART3"",""PART4"")"
Dim StrF2 As String: StrF2 = "SUMPRODUCT(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1)*('01 - Histórico'!R5C8:R101641C8>=R4C-0.125)*('01 - Histórico'!R5C8:R101641C8<R4C+0.125),'01 - Histórico'!R5C5:R101641C5),'01 - Histórico'!R5C10:R101641C10)"
Dim StrF3 As String: StrF3 = "SUM(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1)*('01 - Histórico'!R5C8:R101641C8>=R4C-0.125)*('01 - Histórico'!R5C8:R101641C8<R4C+0.125),'01 - Histórico'!R5C5:R101641C5))"
Dim StrF4 As String: StrF4 = "MIN(IF(('01 - Histórico'!R5C6:R101641C6>=RC1-1)*('01 - Histórico'!R5C6:R101641C6<RC1+1),'01 - Histórico'!R5C10:R101641C10))"
'------
SH.Cells(5, 2).FormulaArray = StrF1
SH.Cells(5, 2).Replace """PART2""", StrF2, LookAt:=xlPart
SH.Cells(5, 2).Replace """PART3""", StrF3, LookAt:=xlPart
SH.Cells(5, 2).Replace """PART4""", StrF4, LookAt:=xlPart
'------
End Sub
好,由于公式的长度和复杂性,以前的代码很难分析,但是例程不会进行任何替换,只是编写
{=IFERROR("PART2"/"PART3","PART4")}
在单元格B5
上(并正确返回"PART4"
)。
然后我尝试简化代码以查找问题:
Sub WriteFormulaArrayTest()
'------
Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
'------
SH.Cells(6, 2).FormulaArray = "=""TEST1"""
SH.Cells(6, 2).Replace """TEST1""", """TEST2""", LookAt:=xlPart
'------
End Sub
它工作正常。 但是当我写:
Sub WriteFormulaArrayTest()
'------
Dim SH As Worksheet: Set SH = ThisWorkbook.ActiveSheet
'------
SH.Cells(6, 2).FormulaArray = "=""TEST1"""
SH.Cells(6, 2).Replace """TEST1""", "SUM(R5C6:R5C7)", LookAt:=xlPart
'------
End Sub
替换不再起作用,我感觉这与第一个代码的问题相同。
请注意,例程不会出现任何错误。只是根本不做替换。
我在这里想念什么?谢谢。