使用Range.Replace的Excel 2010 Range.FormulaArray
我正在尝试自动化一些日常工作,我使用INDEX()+ MATCH()数组公式将一些数据从不同的工作簿中获取到一个“主”工作簿中。手动按预期工作,但现在我想自动执行此过程。 我已经触及Range.FormulaArray属性的255个字符限制,并试图通过使用此处提供的技巧来规避它,但没有运气。 运行此代码时,公式的p1部分将插入范围,但不会执行2 .Replace。 我尝试了.Replace函数的“What”部分的不同变体,“X_X_X()”和“{0}”以及其他很多没有运气的部分。 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim p1, p2, p3 As String p1 = "=IF(G2<>"""",INDEX('C:\path\to\[document.xlsx]Sheet1'!$P:$P,MATCH(1,({0})*({1}),0)),"""")" p2 = "B2='C:\path\to\[document.xlsx]Sheet1'!$B:$B" p3 = "C2='C:\path\to\[document.xlsx]Sheet1'!$C:$C" With ws.Range("R2") .FormulaArray = "=IF(G2<>"""",INDEX('C:\path\to\[document.xlsx]Sheet1'!$P:$P,MATCH(1,({0})*({1}),0)),"""")" .Replace "{0}", p2 .Replace "{1}", p3 End With 我手动粘贴的公式是: =IF(G2<>"";INDEX('C:\path\to\[document.xlsx]Sheet1'!$P:$P;MATCH(1;(B2='C:\path\to\[document.xlsx]Sheet1'!$B:$B)*(C2='C:\path\to\[document.xlsx]Sheet1'!$C:$C);0));"")