我正在尝试自动化一些日常工作,我使用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));"")
你需要公式还是结果?
—
Raystafarian 2016年
@Raystafarian我不确定你的意思,但我需要在范围内有正确的公式(提供的代码只是整个脚本的一部分)。我用它来将某些文本的翻译合并到一个文档中。所有这些都需要重复100个工作簿:D
—
bwedel 2016年
我的意思是你可以在幕后使用公式并将结果放在单元格中吗?
—
Raystafarian 2016年
究竟是什么问题?你收到任何错误信息吗?
—
MátéJuhász2016年
C:\
吗?因此C:\path\to\[The_Document_Here.xls]
转向C:\thedoc.xls