我一直在尝试在工作表上创建一个下拉列表,该列表根据不同单元格中的条目填充,即
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,单元格将填充列表选择中的字符单元格值。
答案 0 :(得分:0)
由于第二列需要找到与第一列中的单个重复值相关联的多个值,我使用此函数
=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工作簿的多个页面来选择适当的数据点来填写他们只能在最初所需的类别中键入的提交页面,然后列表将显示可用选项以及这些选项的数量。
答案 1 :(得分: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
您输入&#39; 123&#39;的单元格。应该是变更事件中的范围(即A5)。范围表(&#34;列表&#34;。)单元格(&#34; A2:A3&#34;)应命名为&#34; YList。&#34;当子运行时,范围的大小将改变。
选择列表所在的单元格应该有验证&#34; list&#34; with source = YList。
我认为是这样的。如果我错过了什么让我知道。我有一个有效的例子。