Microsoft Excel 2007 - 如何为Vlookup

时间:2016-02-25 15:13:45

标签: excel vba excel-vba dynamic vlookup

我不确定是否需要在特定的地方发布此问题,但现在就去了。

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

TL; DR - 主电子表格通过vlookup从“每周”电子表格中获取数据。每周都会发布一个新的电子表格。如何自动使vlookup每周从新电子表格中获取数据?

现在这是长版......

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

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

大。容易Peasy。

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

我希望主电子表格能够在每次存在新电子表格时指向新的每周数据。因此,人们会想到以某种方式使vlookup Table_Array 动态化。 我该如何做到这一点?

附加说明: - 我编写了一个PowerShell脚本来输出所有文件名&文件扩展名为.csv文件。然后我创建了一个宏来将.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]

尝试解决方案但失败了,因为我的excel / macro / VBA知识非常有限: -

  • 文件目的地不会改变。更改文件名的唯一部分是周数。每次将新文件添加到文件名列表时,我都会考虑将+ 1添加到周数。我不知道怎么做。

  • 我尝试了CONTCATENATE Table_Array 和文件名列表的想法。再一次,我不知道如何解决这个问题。浏览网页让我相信INDIRECT是前进的方向。

  • 我想到了通过VBA代码编写IF语句的想法。不知何故,可能会对vlookup中的文件名进行硬编码。再说一次,我不知道该怎么做。

请问有人可以解释一下我是怎么做到的吗?如果你能回答一个想法,我会尽力模仿它。在这一点上,我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

这样的事情 - 我假设你将永远不会超过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

您可以从主工作簿的Open事件中调用它。在ThisWorkbook模块中,添加:

Private Sub workbook_open
updateWorkbook
End Sub

答案 1 :(得分:0)

你能用吗

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

其中A1是您要从中导入数据的周数?