2016-01-14 326 views
-1

我有兩個從數據庫查詢動態創建的表;第一個表格是下拉列表的來源,第二個表格是我將通過數據驗證應用下拉列表的表格。第一個表:Excel動態下拉列表

enter image description here

,第二個表:

enter image description here

我所需要的,最好是通過只Excel公式,是智能設計的下拉列表只顯示相關的尺寸值到有關的維度。

因此,在單元格B3:B10中,下拉菜單將顯示a,b,c。在單元格C3:C10中,下拉菜單顯示爲1,2,3。在單元格D3:D10中,下拉列表將顯示x,y,z。等等

我需要這是動態的,從現在開始的一個星期我的數據庫查詢可能會返回第四個維度,需要遵循相同的方法。

不知道這是否甚至可能不寫一些VBA,但我想我會看看是否有人有任何創意。乾杯!

+0

這是可能的,並不那麼複雜。我有步驟做到這一點,但由於一些緊急工作,我現在無法回答。我會稍後回答。 – harun24hr

+0

謝謝 - 非常感謝! – eembir

+0

根據您需要的靈活性,這是可能的,但可能很複雜。第一個表格中的類別總是在一起嗎?他們可以檢索排序?第二個表的列是否動態創建?請注意,您需要將一些技術列添加到工作簿中。 – dePatinkin

回答

-1

你必須使用Name Manager=INDIRECT()公式來實現。
首先下載示例文件。 Sample File

看到這個提示(由我)。它會幫助你逐步看到屏幕截圖。 Link is here

現在,您的數據的情況下,你必須使用一些公式來自動過濾新數據時的數據。這樣新的數據可以組織爲動態組合框。如果你無法做到這一點,我也可以爲你做。然後與我分享您的示例工作簿。

+0

抱歉,遲到回答。這是週末。 – harun24hr

0

這是非常可能的,但並不簡單。有幾種方法可以實現這一點,具體取決於您的要求,它需要的動態性以及數據的預期結構(正如我在評論中提到的那樣)。

我會給出一個可能的解決方案,即大部分是動態的,並且是最簡單的解釋。您可以使用類似的邏輯使其全部動態。

該解決方案將根據維名稱檢索表#1中的數據(假定它未排序),並按照它們在表中給出的順序返回值。

對於一些範圍,我爲簡單起見創建名稱,有些是必需的。爲了遵循公式邏輯,您需要我使用的命名範圍。

  1. 創建表#1的命名範圍:(通過使用名稱框或使用該名稱管理器按Ctrl + F3):

    • 對於列維度的數據:DimName = B3:B11
    • 對於柱Dimenstion值:DimValue = C3:C11
  2. 創建維度值列出了一個新的工作表:

    • 在B2 ="Customer"把維度名稱。 (可用的維度名稱也可以動態創建,但我爲了簡單起見跳過了這部分)。 (陣列公式 - Ctrl + Shift + Enter)=IFERROR(INDEX(DimVal,SMALL(IF(DimName=B$2,ROW(DimName)-ROW(INDEX(DimName,1))+1),ROWS(B$3:B3)),1),"")。該公式返回「客戶」維度的第k個值。
    • 將B3複製到您認爲需要的行數。比方說B4:B10,所以B3:B10會有數組公式。由於IFERROR功能,第一個單元格將具有可用值並且其餘單元格將爲空。
    • 在B1中,我們將使用公式=SUMPRODUCT(--(B3:B10<>"")來計算可用值。
    • 執行相同的 「產品」 和 「地理」 列C和D.
  3. 創建列表動態指定範圍:(使用名稱管理器按Ctrl + F3)

    • 對於列表數據DimLists = B3:D10。
    • 對於列表'標題DimListHeaders = B2:D2。
    • 對於列表的計數DimListCounts = B1:D1。
    • *這些名稱對於數據驗證在另一張表中工作是強制性的。
  4. 設置表#2的數據驗證列表來源:

    • 選擇B3:B10表2#。
    • 轉到數據>數據驗證,然後選擇允許:列表
    • 在來源中輸入以下公式:=OFFSET(INDEX(DimLists,,MATCH(B$2,DimListHeaders,0)),,,INDEX(DimListCount,,MATCH(B$2,DimListHeaders,0)))。此公式根據表#2中的列標題找到DimLists中的正確列表,並根據列表計數設置返回的範圍高度。

希望這有助於。