ฉันกำลังพยายามทำงานประจำวันโดยอัตโนมัติที่ฉันใช้สูตรอาร์เรย์ INDEX () + MATCH () เพื่อดึงข้อมูลบางอย่างจากสมุดงานที่แตกต่างกันเป็นสมุดงาน 'ต้นแบบ' หนึ่งเล่ม สิ่งนี้ทำงานได้ด้วยตนเอง แต่ตอนนี้ฉันต้องการทำให้กระบวนการนี้เป็นแบบอัตโนมัติ
ฉันใช้ขีด จำกัด 255 ตัวอักษรของคุณสมบัติ Range.FormulaArray และพยายามที่จะหลีกเลี่ยงมันโดยใช้ลูกเล่นที่จัดเตรียมไว้ที่นี่แต่ไม่มีโชค
เมื่อเรียกใช้รหัสนี้ส่วน p1 ของสูตรจะถูกแทรกลงในช่วง แต่จะไม่ถูกเรียกใช้งาน 2. แทนที่
ฉันลองใช้ชุดส่วน "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));"")
C:\
หรือไม่? ดังนั้นC:\path\to\[The_Document_Here.xls]
จะกลายเป็นC:\thedoc.xls