Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4351|回复: 15

[已解决]有效性如何突破字符限制

[复制链接]
发表于 2014-10-24 09:12 | 显示全部楼层 |阅读模式
数据有效性二级联动菜单,因为字符多,不能全部显示,请求帮助。
限制在B4和C4中
二级有效性下拉菜单—求助.rar (32.18 KB, 下载次数: 12)
发表于 2014-10-24 09:36 | 显示全部楼层
如果一级菜单少的话,直接设置一下就好了,多的话就用宏

二级有效性下拉菜单—求助.rar

34.7 KB, 下载次数: 10

回复

使用道具 举报

发表于 2014-10-24 10:13 | 显示全部楼层
本帖最后由 缔造者 于 2014-10-24 13:42 编辑

“查询”工作表代码:
此代码有错误
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Count > 1 Then Exit Sub
  3. If Target.Address <> "$B$3" And Target.Address <> "$C$3" Then Exit Sub
  4. Dim arr, k
  5. Dim i As Long
  6. Dim d As Object, dic As Object
  7. Set d = CreateObject("scripting.dictionary")
  8. Set dic = CreateObject("scripting.dictionary")
  9. arr = Worksheets("数据").Range("a3").CurrentRegion
  10. For i = 3 To UBound(arr) - 1
  11. If Not d.exists(arr(i, 1)) Then
  12. d(arr(i, 1)) = arr(i, 1)
  13. dic(arr(i, 1)) = arr(i, 2)
  14. Else
  15. dic(arr(i, 1)) = dic(arr(i, 1)) & "," & arr(i, 2)
  16. End If
  17. Next i
  18. If Target.Address = "$B$3" Then
  19. Range("c3").Validation.Delete
  20. Range("c3").ClearContents

  21. With Range("b3").Validation
  22.         .Delete
  23.         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
  24.         Operator:=xlBetween, Formula1:=Join(d.keys, ",")
  25.     End With
  26. ElseIf Target.Address = "$C$3" Then
  27. If dic.exists(Range("b3").Value) Then k = dic(Range("b3").Value)
  28. With Range("c3").Validation
  29.         .Delete
  30.         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
  31.         Operator:=xlBetween, Formula1:=k
  32.     End With
  33. End If
  34. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-24 10:14 | 显示全部楼层
本帖最后由 缔造者 于 2014-10-24 13:41 编辑

参见附件:
此附件有错误
二级有效性下拉菜单—求助.rar (36.86 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2014-10-24 10:20 | 显示全部楼层
本帖最后由 zjdh 于 2014-10-24 10:25 编辑

2楼  不先排序就建立名称,会遗漏项目的!
4楼  不适合项目较多的情况,选择上海后,点C3就出错啦!

点评

额。。。我就是做个大概给他看一下  发表于 2014-10-24 11:51
回复

使用道具 举报

 楼主| 发表于 2014-10-24 10:56 | 显示全部楼层
缔造者 发表于 2014-10-24 10:14
参见附件:

首先感谢,不过错误1004呀
主要用上海测试,其他的没增加,也会很多,超过字符限制。
回复

使用道具 举报

发表于 2014-10-24 10:59 | 显示全部楼层
本帖最后由 zjdh 于 2014-10-24 12:53 编辑

若不允许改变数据页排序,可用辅助列解决。
二级有效性下拉菜单(辅助列).rar (48.66 KB, 下载次数: 5)
回复

使用道具 举报

发表于 2014-10-24 13:10 | 显示全部楼层
数据多时,前一个代码运行错误,现更正如下:
利用辅助列:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Target.Count > 1 Then Exit Sub
  3.     If Target.Address <> "$B$3" And Target.Address <> "$C$3" Then Exit Sub
  4.     Dim arr, k
  5.     Dim i As Long
  6.     Dim d As Object, dic As Object
  7.     Set d = CreateObject("scripting.dictionary")
  8.     Set dic = CreateObject("scripting.dictionary")
  9.     arr = Worksheets("数据").Range("a3").CurrentRegion
  10.     If Target.Address = "$B$3" Then
  11.         Range("c3").Validation.Delete
  12.         Range("c3").ClearContents
  13.     For i = 3 To UBound(arr) - 1
  14.         If Not d.exists(arr(i, 1)) Then
  15.           d(arr(i, 1)) = ""
  16.         End If
  17.     Next i
  18.         With Range("b3").Validation
  19.             .Delete
  20.             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
  21.                  Operator:=xlBetween, Formula1:=Join(d.keys, ",")
  22.         End With
  23.     ElseIf Target.Address = "$C$3" Then
  24.     Range("iv1").Resize(65536).ClearContents
  25.     For i = 3 To UBound(arr) - 1
  26.     If arr(i, 1) = Range("b3") Then If Not dic.exists(arr(i, 2)) Then dic(arr(i, 2)) = ""
  27.     Next i
  28.       k = dic.keys
  29.     Range("iv1").Resize(dic.Count) = Application.Transpose(k)

  30.         With Range("c3").Validation
  31.             .Delete
  32.             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
  33.                  Operator:=xlBetween, Formula1:="=$iv$1:$iv$" & dic.Count 'cp"
  34.         End With
  35.     End If
  36.     Set d = Nothing
  37.     Set dic = Nothing
  38. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-24 13:11 | 显示全部楼层
利用辅助列:
二级有效性下拉菜单—求助-更正错误.rar (38.98 KB, 下载次数: 7)

评分

参与人数 1 +1 收起 理由
hgdzhh + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-10-24 13:23 | 显示全部楼层
zjdh 发表于 2014-10-24 10:59
若不允许改变数据页排序,可用辅助列解决。

如果B列有重复项时,二级菜单中也出现该重复项。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-23 19:06 , Processed in 0.425670 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表