2017-06-05 43 views
-3

我一直在試圖對填充基於IE的Visual Basic在Excel下拉基於列表填充的關鍵

ws1------------------------------- 
|numbers|dropdowns    | 
|123 |->123 associations list |  
|456 |->456 associations list |  
---------------------------------- 

ws2---------------------- 
|123 | tttttt | 9000 | 
|123 | kkkkkk | 8000 | 
|123 | hhhhhh | 7000 | 
|456 | yyyyyy | 6000 | 
|456 | uuuuuu | 5000 | 
------------------------- 

在不同的單元格中錄入工作表上創建一個下拉列表因此當123或456被輸入到數字單元格中時,從ws2中的關聯單元格填充下拉列表,即

「由用戶鍵入」| 「自動填充列表」
| 456 | yyyyyy-6000 |
- uuuuuu-5000

然後用戶可以選擇yyyyyy或uuuuuu,並且該單元格將填充來自列表選擇的字符單元格值。

+1

這可能會幫助:http://www.excel-easy.com/examples/dependent-drop-down-lists.html –

+0

指教@ScottHoltzman那就是數據庫IM與工作是什麼即時尋找,而是大而且數據已經垂直定向,這種方法需要我製作50個以上的範圍並複製幾千個數據點。以及擊敗程序的可擴展性。你把我的希望寄託在斯科特身上! –

+0

我已經得到了使用上變化事件用於片材,以檢測在所述第一選擇列表的變化的類似的程序,然後動態填充是用於第二選擇列表的源等的範圍內(3深)。選擇列表的範圍位於其中一個工作表的未使用區域中。我可以成爲一張隱藏的表格。這是你想到的嗎? – Hrothgar

回答

0

作爲在第二列需要找到與來自拳頭i列使用此功能的單重複值相關聯的多個值

=INDEX(ASP!$D2:$D$2048,SMALL _ 
(INDEX((Sheet1!AH$2=ASP!$A2:$A$2048)* 
(MATCH(ROW(ASP!$A2:$A$2048),ROW(ASP!$A2:$A$2048)))+ _ 
(Sheet1!AH$2<>ASP!$A2:$A$2048)*2048,0,0),ROW($A1)))  

和拖下來用於基於所述節目的限制行的合理量。這是一個令人討厭的功能,可能需要幾秒鐘才能完成,這取決於所查看單元格的範圍。
也就是說,如果您只是使用「ASP!A:A」而不是「ASP!A2:A2028」,這會導致運行n^2索引調用,並且會一直持續。

然後我用

=VLOOKUP(AI2,ASP!$D:$G,4,0) 

填充下一組基於列的是什麼,第一組發現

然後我用

=IFERROR(CONCATENATE(AI2,"|",AJ2),"") 

把第二和第三列在一起以便在使用列表下拉列表時使用這兩個數據點。

之後,我只是使用數據驗證列表並使用最後一列中的值填充它們,使用IFERROR使列表中的單元格沒有與它們相關的任何數據點出現空白。我使用on_change事件來檢查列表列中當前更改的值以拆分concat,並僅填充期望值的單元格。

這樣做的目的是爲了讓用戶不必瀏覽excel工作簿的多個頁面來選擇適當的數據點來填寫提交頁面,他們只需鍵入最初所需的類別,然後列表將顯示可用的選項和這些選項存在的金額。

0

這是我的選擇列表應用程序的一個版本。

在工作表更改事件

在其中輸入數字:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Me.Range("A5")) Is Nothing Then Fill_X_list (Me.Range("A5")) 
End Sub 

在代碼模塊:

Sub Fill_X_list(myX As String) 
Dim locx As Long, YBottom As Long 
Dim listcounter As Long 
Application.EnableEvents = False 
Application.ScreenUpdating = False 
listcounter = 2 
Sheets("Lists").Range("A:Z").ClearContents 
Sheets("Lists").Range("A1") = myX 
Sheets("WS1").Range("C5") = "All Values" 
YBottom = Sheets("WS2").Cells(Rows.Count, 1).End(xlUp).Row 

For locx = 1 To YBottom 
    If Sheets("WS2").Cells(locx, 1) = myX Then 
     Sheets("lists").Cells(listcounter, 1) = Sheets("WS2").Cells(locx, 2) & "-" & Sheets("WS2").Cells(locx, 3) 
     listcounter = listcounter + 1 
    End If 
Next locx 

Sheets("Lists").Range("A2:A" & Sheets("lists").Cells(Rows.Count, 1).End(xlUp).Row).Name = "YList" 
Application.EnableEvents = True 
Application.ScreenUpdating = True 
End Sub 

在其中輸入「123」應該在範圍內的單元格開啓變化事件(即A5)。範圍表(「列表」)單元格(「A2:A3」)應該命名爲「YList」。當子運行時,範圍的大小將會改變。

細胞,其中的選擇列表是,應該有驗證「列表」與源= YList。

我認爲這是它。如果我錯過了任何事情,請告訴我。我有一個工作的例子。