2016-02-25 42 views
0

我不確定是否需要在特定位置發佈此問題,但這裏有提到。Microsoft Excel 2007 - 如何爲Vlookup編寫一個動態Table_Array

警告:牆上的文字。我需要完全解釋我的情況,因爲這似乎是一個獨特的問題,沒有多少解決方案。

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_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 /宏/ VBA的知識是非常有限的: -

  • 文件目標不會改變。文件名中唯一改變的部分是星期數。每當一個新文件被添加到文件名單中時,我已經考慮了+ 1到星期編號的想法。我不知道如何做到這一點。

  • 我已經試過的CONTCATENATE想法與Table_Array中和文件名列表。再次,我不知道如何解決這個問題。瀏覽網絡導致我相信INDIRECT是前進的方向。

  • 想到通過VBA代碼編寫IF語句的想法已經浮現在腦海。莫名其妙地對vlookup中的文件名進行硬編碼。再次,我不知道該怎麼做。

請任何人都可以談談我如何做到這一點?如果你可以回答一個想法,我會盡我所能去效仿它。在這一點上,我會感激任何事情。

謝謝。

+0

難道你們就不能只是創建一個額外的工作簿是最新的文件,然後簡單地將新的一週的文件複製過頂每次你得到一個新的一週的數據的時間?這樣公式就不需要改變。 – Rory

+0

你可以發佈你放在一起的代碼嗎?有幾種方法可以實現這一點,但是如果沒有看到如何嘗試使用它,很難提供與當前代碼儘可能無縫匹配的內容。 –

+0

@Rory實際上是一個好主意。然而,自動化是這裏的關鍵。用戶的手工工作越少越好。 - 說我的老闆。 – agentfl

回答

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 
+0

我調整了代碼以適合我的文件夾路徑。我在哪裏放置代碼?在Sheet1模塊或ThisWorkbook模塊中創建一個新的VB'Module'?是。我在這是一個小菜。 – agentfl

+0

在新的模塊中,它出現在宏列表中。 – Rory

+0

我會這麼想的。什麼是觸發器?我如何執行代碼?當我在'updateWorkbook'下的宏列表中找到宏時,它在我運行它時什麼也不做。 – agentfl

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是要從導入數據的週數?

+0

INDIRECT要求源工作簿處於打開狀態。 – Rory

+0

我一定會放棄這一點。謝謝。我會回報。 – agentfl

+0

@Rory是的。我已閱讀有關此。這就是爲什麼我覺得使用它的原因。但我會試着看看它的表現如何。 – agentfl