Microsoft Excel 2007 – 如何为Vlookup编写一个dynamic的Table_Array

我不确定是否需要在特定的地方发布这个问题,但是这里就是这样。

警告:墙上的文字。 我需要完全解释我的情况,因为这似乎是一个独特的问题,没有多less解决scheme。

TL; DR – Master电子表格通过vlookups从“每周”电子表格中抓取数据。 每周发布一个新的电子表格。 如何自动执行vlookup以每周从新电子表格抓取数据?

现在这里是长版本…

我有一个主电子表格,使用指向另一个电子表格的vlookups。 示例代码如下:

=VLOOKUP(A2,'...OTC\2016\Reports Sent\[SALES BY SKU STORE wk 3 (retail) (2).xls]SKU'!$D$1:$G$65536,4,FALSE)

大。 十分简单。

主电子表格当前指向“第3周”的数据。 因此,[销售SKU STORE wk3 (零售)(2).xls]。 目前在电子表格所在的文件目录中,第3周的电子表格是最新的。 每个星期,一个新的电子表格将被保存在同一个文件夹,但被称为[销售SKU商店wk4 (零售)(2).xls]。 现在得到这个想法..?

我希望主电子表格能够指向新的每周数据,每次有新的电子表格存在。 所以人们会认为以某种方式使vlookup Table_Arraydynamic。 我如何做到这一点?

附加说明: – 我已经写了一个PowerShell脚本来输出所有的文件名和文件扩展名为.csv文件。 然后我创build了一个macros来将.csv数据导入到主文件中的一个单独的表单中。 我做了一个潜在的查找表。 下面的示例数据,我们将其称为“文件名单”:

[SALES BY SKU STORE wk1 (retail)(2).xls]

[SALES BY SKU STORE wk2 (retail)(2).xls]

[SALES BY SKU STORE wk3 (retail)(2).xls]

解决scheme尝试但失败,因为我的Excel /macros/ VBA的知识是非常有限的: –

  • 文件目的地不会更改。 文件名中唯一改变的部分是星期数。 每当一个新文件被添加到文件名单中时,我已经考虑了+ 1到星期编号的想法。 我不知道如何做到这一点。

  • 我已经尝试了与Table_Array和文件名单的CONTCATENATE的想法。 再次,我不知道如何解决这个问题。 浏览networking导致我相信“ INDIRECT是前进的方向。

  • 想到了通过VBA编写IF语句的想法。 在某种程度上可能在vlookup中对文件名进行硬编码。 再次,我不知道如何做到这一点。

请任何人都可以告诉我如何做到这一点? 如果你能回答一个想法,我会尽我所能去模仿它。 在这一点上我会很感激。

谢谢。

就像这样 – 我认为你将永远不会超过53个财政周:

 Sub updateWorkbook() Dim n As Long Const csFOLDER_PATH As String = "C:\your path\" For n = 53 To 1 Step -1 If Dir(csFOLDER_PATH & "SALES BY SKU STORE wk" & n & " (retail)(2).xls") <> vbNullString Then FileCopy csFOLDER_PATH & "SALES BY SKU STORE wk" & n & " (retail)(2).xls", csFOLDER_PATH & "SALES BY SKU STORE CURRENT (retail)(2).xls" Exit For End If Next n End Sub 

您可以从主工作簿的“打开”事件中调用此方法。 在ThisWorkbook模块中,添加:

 Private Sub workbook_open updateWorkbook End Sub 

你可以用吗?

 =VLOOKUP(A2,INDIRECT("'...OTC\2016\Reports Sent\[SALES BY SKU STORE wk " & A1 & " (retail) (2).xls]SKU'!$D$1:$G$65536"),4,FALSE) 

A1是你想要从中导入数据的周数?