之前给大家分享了如何使用函数制作模糊匹配的下拉菜单,但函数那家伙的特点是小巧灵,数据量稍大,效率就比较差了。众所周知,在Excel里,高效率解决复杂问题,还是得靠又傻又愣的VBA。今天就再给大家分享一下,如何使用VBA制作更好用的动态模糊匹配下拉菜单。

完成后的效果演示如下:

如上图所示,点击A列单元格,Excel会自动跳出一个文本输入框和一个列表框。当在文本框中输入数据时,列表框的数据会随之动态更新。

1 丨 制作步骤

选中目标工作表,在【开发工具】→【插入】→【ActiveX控件】,先后插入一个文本框和一个列表框。控件的大小和存放的位置都随意,反正这事你说了也不算,后面代码会自己做调整。

需要注意的是,如果你不会调整VBA代码,那么此处文本框的名字必须为TextBox1,列表框的名字必须为ListBox1——正常而言,这俩名字也都是系统默认的。

保持目标工作表选中状态不变,按快捷键<Alt+F11>打开VBE编辑器,将以下代码粘贴到当前工作表的代码窗口。

代码解析见注释

代码看不全可以左右拖动..▼

'设置文本框和列表框的大小及位置Private Sub Worksheet_SelectionChange(ByVal Target As Range)    Dim b As Boolean, arr    If Target.Column <> 1 Or Target.Row < 2 Then b = True '如果用户选择的单元格不是第1列或者属于第1行    If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then b = True '如果用户选择的单元格数量大于1    If b Then        ListBox1.Visible = False '不可见        TextBox1.Visible = False '不可见        Exit Sub '退出程序    End If    With Worksheets("示例") '下拉列表来源内容的所在工作表        arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源    End With    With TextBox1        .Value = ""        .Visible = True '可见        .Top = Target.Top '文本框顶部位置        .Left = Target.Left '文本框左侧位置        .Height = Target.Height '文本框高度        .Width = Target.Width '文本框宽度        .Activate '激活文本框    End With    With ListBox1        .Visible = True '可        .Top = Target.Offset(0, 1).Top        .Left = Target.Offset(0, 1).Left        .Height = Target.Height * 5        .Width = Target.Width        .List = arr '写入数据源数据    End WithEnd Sub
'根据文本框的输入值动态匹配数据Private Sub TextBox1_Change()    Dim arr, brr, i&, k&    With Worksheets("示例") '下拉列表来源内容的所在工作表        arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源    End With    If TextBox1.Text = "" Then ListBox1.List = arr: Exit Sub    ReDim brr(1 To UBound(arr))    For i = 1 To UBound(arr)        If InStr(1, arr(i, 1), TextBox1.Text, vbTextCompare) Then  '忽略字母大小写            k = k + 1            brr(k) = arr(i, 1)        End If    Next    ListBox1.List = brr '写入匹配后的数据End Sub
'如果双击列表框的内容则写入活动单元格Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)    ActiveCell = ListBox1.Text    With ListBox1        .Clear '清空列表框        .Visible = False    End With    With TextBox1        .Value = ""        .Visible = False    End WithEnd Sub

最后关闭VBE,将当前工作簿另存为xlsm文件即可。

2 丨 其它

如果你不懂VBA,按以上步骤操作后,需要将代码中的"示例"替换为下拉列表 数据源 所在的工作表名,将"d2:d" & .Cells(Rows.Count, "d")部分,替换为实际数据源所在列。

With Worksheets("示例") '下拉列表来源内容的所在工作表    arr = .Range("d2:d" & .Cells(Rows.Count, "d").End(3).Row) '数据源End With
之前给大家分享了如何使用函数制作模糊匹配的下拉菜单,但函数那家伙的特点是小巧灵,数据量稍大,效率就比较差了。众所周知,在Excel里,高效率解决复杂问题,还是得靠又傻又愣的VBA。今天就再给大家分享一下,如何使用VBA制作更好用的动态模糊匹配下拉菜单。完成后的效果演示如下:如上图所示,点击A列单元格,Excel会自动跳出一个文本输入框和一个列表框。当在文本框中输入数据时,列表框的数据会随之动态更新。1 丨 制作步骤选中目标工作表,在【开发工具】→【插入】→【ActiveX控件】,先后插入一个文本框和一个列表  在 Excel 2007中,Microsoft重写了15年来未曾更新的图表引擎,但如果选择的图表类型不正确,将无助于传递要表达的信息。鉴于此,本书将介绍 Excel 2007中全新的图表 制作 界面,更重要的是,将引导读者选择正确的图表类型并创建引人入胜的图表。通过阅读本书,读者将迅速创建出让观众发出惊叹的图表,并有效地表达信息。   全书分为14章和一个附录,包括如下内容:学习使用 Excel 2007图表 制作 界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用 Excel 无法创建的图表,使用数据透视图汇总数百万行数据,在不使用图表的情况下以图形方式显示数据,使用SmartArt图形绘制流程图和关系图,使用VBA创建图表,将数据绘制到地图中,将图表导出到网页或PowerPoint中,找出图表背后的谎言等。   本书语言简明清晰,内容实用,实例丰富,适合需要使用 Excel 制作 图表的人员阅读。 第1章 Excel 2007图表简介 1 1.1 Excel 2007中的新图表特性 1 1.2 新的图表工具和菜单 2 1.2.1 使用“插入”选项卡来插入图表 3 1.2.2 使用“展开”图标来访问所有图表类型图库 3 1.2.3 理解图表缩略图图标 4 1.2.4 使用图库控件 6 1.3 创建图表 7 1.3.1 选择连续的数据到图表中 7 1.3.2 选择非连续的数据到图表中 7 1.3.3 使用“插入选项卡”图标创建图表 8 1.3.4 使用一次击键创建图表 9 1.4 使用图表 9 1.4.1 在当前工作表中移动图表 9 1.4.2 反转图表的系列(series)与类别(category) 11 1.4.3 使用“选择数据”来改变数据顺序 12 1.4.4 将左上角单元格留空 13 1.4.5 将图表移到另一个工作表中 14 1.5 使用“设计”选项卡自定义图表 15 1.5.1 选择图表布局 16 1.5.2 选择颜色方案 16 1.5.3 通过改变主题来修改颜色方案 17 1.6 创建自己的主题 18 1.6.1 从已有的主题中选择自定义主题的效果 18 1.6.2 理解RGB颜色码 19 1.6.3 将十六进制转换为RGB 20 1.6.4 查找互补色 20 1.6.5 指定主题的颜色 21 1.6.6 指定主题的字体 22 1.6.7 保存自定义的主题 22 1.6.8 在新文档中使用自定义的主题 23 1.6.9 与他人共享主题 23 1.7 下一步 24 第2章 定制图表 25 2.1 使用 设置 元素格式的工具 25 2.2 识别图表元素 26 2.2.1 图表标签与坐标轴 26 2.2.2 三维图表中的特殊元素 27 2.2.3 分析元素 28 2.3 设置 图表元素格式 29 2.3.1 设置 图表标题格式 29 2.3.2 设置 坐标轴标题格式 31 2.3.3 设置 图例格式 32 2.3.4 在图表中添加数据标签 34 2.3.5 在图表中添加数据表 36 2.3.6 设置 坐标轴格式 37 2.3.7 网格线的显示与格式 设置 43 2.3.8 设置 绘图区格式 45 2.3.9 设置 三维图表中的背景墙与基底的格式 48 2.3.10 控制三维图表的三维旋转 49 2.3.11 使用趋势线进行预测 51 2.3.12 在折线图或面积图中添加垂直线 53 2.3.13 添加涨/跌柱线到图表中 54 2.3.14 使用误差线显示可接受的偏差 55 2.4 设置 数据系列的格式 55 2.5 使用“格式”选项卡 56 2.5.1 将文本转换为艺术字 56 2.5.2 使用形状样式图库 57 2.5.3 使用形状填充与形状效果 57 2.5.4 使用预设形状效果 58 2.6 使用剪贴画或形状替换数据标记 59 2.6.1 使用剪贴画作为数据标记 59 2.6.2 使用形状替换数据标记 60 2.7 下一步 61 第3章 创建显示趋势的图表 62 3.1 选择图表类型 62 3.2 理解基于日期的坐标轴与基于类别的坐标轴 65 3.2.1 将文本日期转换为日期 66 3.2.2 不被识别为日期的日期:数字年份 71 3.2.3 不被识别为日期的日期:1900年之前的日期 72 3.2.4 使用其他方法显示使用时间刻度的坐标轴 76 3.2.5 将日期转换为文本以添加装饰性图表元素 78 3.3 使用图表进行有效交流 81 3.3.1 使用有意义的长标题解释图表的含义 82 3.3.2 突出一列 85 3.3.3 用箭头取代柱形 86 3.3.4 添加另一个序列来突出图表的一部分 87 3.3.5 中途改变折线类型 88 3.4 在图表中添加自动趋势线 89 3.5 显示月销量及当年累积销量的趋势 90 3.6 理解堆积柱形图的缺点 91 3.7 在单个图表中显示很多趋势线的缺点 93 3.8 使用散点图显示趋势 94 3.9 下一步 95 第4章 创建显示差异的图表 96 4.1 比较实体 96 4.2 使用条形图比较数据项 96 4.2.1 增加另一列来显示时间的比较 98 4.2.2 分割条形以突出组分 99 4.3 比较组分 100 4.3.1 使用饼图 101 4.3.2 切换到百分比堆积柱形图 106 4.3.3 使用圆环图来比较两个饼图 107 4.3.4 处理饼图中的数据表示问题 108 4.4 使用瀑布图(waterfall)分解组分 114 4.5 下一步 116 第5章 创建显示关系的图表 117 5.1 在图表中比较两个变量 117 5.2 使用XY散点图绘制成对的数据点 118 5.2.1 在散点图中添加趋势线 118 5.2.2 在散点图中添加标签 120 5.2.3 用折线连接散点图中的点 121 5.2.4 在散点图中添加第二个系列 122 5.2.5 用散点图画图 123 5.3 使用图表来显示关系 123 5.3.1 使用散点图来测试相关性 124 5.3.2 使用成对的条形图来显示关系 126 5.3.3 使用成对的 匹配 图表 132 5.3.4 使用气泡图添加第三维 135 5.3.5 使用频数分布将成千上万的点分类 136 5.3.6 使用雷达图评估绩效 138 5.3.7 来自Gene Zelazny的一个图表 142 5.4 使用曲面图 145 5.4.1 使用竖坐标轴 146 5.4.2 通过三维旋转控制曲面图 146 5.5 下一步 147 第6章 创建股票分析图 148 6.1 股价图概述 148 6.1.1 折线图 148 6.1.2 OHLC图 149 6.1.3 烛柱(candlestick)图 149 6.2 获取股价数据 150 6.2.1 重排下载数据中的列 151 6.2.2 使用“调整后的收盘价”列来处理分股 151 6.3 创建折线图来显示收盘价 153 6.4 创建OHLC图 156 6.4.1 创建盘高-盘低-收盘图 156 6.4.2 创建OHLC图 159 6.4.3 在盘高-盘低-收盘图表中添加成交量 161 6.5 创建烛柱图 165 6.5.1 改变烛柱图的颜色 166 6.5.2 在烛柱图中添加成交量 166 6.5.3 手工创建包含成交量的烛柱图 167 6.6 使用Web连接创建实时图表 171 6.7 创建用于Dashboard的小图表 174 6.8 下一步 175 第7章 高级图表技巧 176 7.1 高级图表技巧工具箱 176 7.1.1 在单个图表中使用两种图表类型 176 7.1.2 将图表从一个工作表移到另一个工作表 177 7.1.3 使用形状来注释图表 178 7.1.4 使柱形与条形悬浮 180 7.1.5 使用虚构的xy系列给纵坐标轴加上标签 182 7.1.6 使用虚构的XY系列将几个图表显示在单个图表中 187 7.1.7 使用多个XY系列创建网格图(trellis chart) 191 7.2 创建 动态 图表 195 7.2.1 使用OFFSET函数指定特定区域 195 7.2.2 使用VLOOKUP或MATCH在表格中查找值 196 7.2.3 结合使用INDEX和MATCH函数 198 7.2.4 使用“有效性”下拉列表创建 动态 图表 199 7.2.5 在图表中使用 动态 区域 201 7.2.6 创建滚动图表 204 7.2.7 修改滚动条示例显示最近12个月 206 7.3 创建高级图表 206 7.3.1 温度计图表 206 7.3.2 基准图 207 7.3.3 增量图(delta chart) 208 7.4 使用 Excel 创建奇妙的图表 209 7.5 下一步 211 第8章 创建和使用数据透视图 212 8.1 Excel 2007数据透视表的新特性 212 8.2 决定先使用哪一个:表格还是图表 213 8.3 准备底层透视数据的规则 213 8.4 创建第一个数据透视图 214 8.4.1 更改图表类型及 设置 图表格式 216 8.4.2 在数据透视图中添加系列 216 8.5 通过数据透视表执行高级操作 217 8.6 筛选数据透视表 219 8.6.1 使用“报表筛选”进行筛选 219 8.6.2 将 Excel 2007筛选条件用于轴字段和图例字段 220 8.7 为每个顾客创建图表 221 8.8 下一步 223 第9章 不使用图表的数据可视化表示法 224 9.1 在工作表单元格中创建图表 224 9.2 使用数据条创建单元格内的条形图 225 9.2.1 定制数据条 225 9.2.2 控制最小/最大数据条的长度 226 9.2.3 在部分单元格中显示数据条 228 9.3 使用色阶来突出极值 230 9.3.1 转换为单色数据条 230 9.3.2 排除色阶问题 231 9.4 使用图标集区分数据 232 9.4.1 建立图标集 232 9.4.2 让数字靠近图标 233 9.5 使用条件格式在工作表单元格中创建图表 234 9.6 使用REPT函数创建图表 237 9.7 使用滚动条控件创建图表 238 9.8 创建“茎叶”图表 240 9.8.1 创建将X作为叶的“茎叶”图表 241 9.8.2 使用长公式创建以数字作为叶的“茎叶”图表 242 9.8.3 使用排序和公式创建以数字作为叶的“茎叶”图表 243 9.9 下一步 244 第10章 使用Microsoft MapPoint将 Excel 数据显示在地图中 245 10.1 绘制地理数据 245 10.2 在 Excel 中创建地图 246 10.3 在地图上使用图表 249 10.4 使用其他地图样式来显示数据 251 10.5 下一步 253 第11章 使用SmartArt图形和形状 254 11.1 理解SmartArt图形和形状 254 11.2 使用SmartArt 255 11.2.1 大多数SmartArt都有的元素 256 11.2.2 SmartArt类别简介 256 11.2.3 插入SmartArt 257 11.2.4 对SmartArt元素进行微观控制 260 11.2.5 在文本窗格中控制SmartArt形状 262 11.2.6 添加图像到SmartArt中 264 11.2.7 使用组织图时需要特别考虑的因素 265 11.2.8 使用受限制的SmartArt 267 11.3 为信息选择正确的布局 268 11.4 探索使用SmartArt图形的商业图表 268 11.4.1 使用“平衡”图来显示正/反决策 269 11.4.2 使用“向上箭头”来显示增长 269 11.4.3 使用“基本循环”布局显示重复的过程 269 11.4.4 使用“分离射线”图示显示公司与外部实体的关系 270 11.4.5 使用“表格列表”图示显示公司的部门 270 11.4.6 调整维恩图来显示关系 271 11.4.7 理解“标记的层次结构”图 272 11.4.8 使用其他SmartArt布局 273 11.5 使用形状显示单元格内容 273 11.5.1 处理形状 274 11.5.2 使用“任意多边形”形状创建自定义形状 275 11.6 使用艺术字显示有趣的标题 275 11.7 下一步 278 第12章 导出图表以便在 Excel 外部使用 279 12.1 在PowerPoint或Word中显示 Excel 图表 279 12.1.1 将图表复制为链接到原工作簿链接的 动态 图表 280 12.1.2 将图表复制为与原工作簿拷贝链接的 动态 图表 281 12.1.3 将图表复制为图形 282 12.1.4 将图表粘贴为链接对象 283 12.1.5 在PowerPoint中创建图表,从 Excel 中复制数据 284 12.2 在网上展示图表 285 12.3 将图表导出为图形 286 12.3.1 使用VBA将图表导出为图像 286 12.3.2 使用Snag-it或OneNote捕获图表 286 12.3.3 将XPS转换为PDF 287 12.4 下一步 287 第13章 使用VBA创建图表 288 13.1 VBA简介 288 13.1.1 在 Excel 中启用VBA 289 13.1.2 在 Excel 中“开发工具”选项卡 289 13.1.3 Visual Basic编辑器 289 13.1.4 Visual Basic工具 290 13.1.5 宏录制器 291 13.1.6 理解面向对象的代码 291 13.2 学习VBA编程技巧 291 13.2.1 编写代码来处理任意大小的数据区域 292 13.2.2 使用超级变量(super-variable):对象变量 293 13.2.3 在引用对象时使用With和End With 294 13.2.4 续行 294 13.2.5 在代码中添加注释 294 13.3 针对 Excel 2007的新图表特性进行编程 295 13.4 在VBA代码中引用图表和图表对象 295 13.5 创建图表 296 13.5.1 指定图表的大小和位置 296 13.5.2 引用特定的图表 297 13.6 录制“布局”和“设计”选项卡中的命令 299 13.6.1 指定内置的图表类型 299 13.6.2 指定模板图表类型 301 13.6.3 更改图表的布局或样式 301 13.7 使用SetElement模拟“布局”选项卡中的 设置 303 13.8 使用VBA修改图表标题 308 13.9 模拟“格式”选项卡中的 设置 308 13.10 自动化“ 设置 数据系列格式”对话框中的 设置 322 13.10.1 控制柱形图和条形图的系列间距和类别间距 323 13.10.2 将系列移到次要坐标轴上 324 13.10.3 旋转和分离圆形图表 325 13.10.4 控制复合饼图和复合条饼图 327 13.10.5 控制雷达图和曲面图 332 13.11 使用“监视”窗口查看对象的 设置 333 13.12 将图表导出为图形 335 13.13 创建数据透视图 337 13.14 下一步 341 第14章 找出图表背后的谎言 342 14.1 使用透视进行欺骗 342 14.2 使用缩小的图表进行欺骗 343 14.3 使用刻度进行欺骗 344 14.4 由于 Excel 不配合导致的欺骗 344 14.5 通过 模糊 数据进行欺骗 345 14.6 有意使用图表进行欺骗 346 14.7 下一步 348 附录A 图表资源 349 A.1 其他图表资源 349 A.2 Gene Zelazny:商业图表 制作 大师 349 A.3 PowerFramework.com 349 A.4 Edward Tufte的书籍 350 A.5 图表 制作 教程网站 351 A.6 交互式培训 351 A.7 现场培训 352 A.8 有关图表 制作 的博客 352 A.9 视觉设计书店 352 A.10 专业图表设计师 353 A.11 图表 制作 工具和产品 353 使用 Excel 或WPS的原生功能,创建一个支持关键字 模糊 查找的下拉选择列表。示例: https://www.aliyundrive.com/s/J9xYWJDxhon 在处理电子表格时,重复填写的文字,做成选择题,这样做既快又准。 Excel 中,调用数据验证(数据有效性)功能,里边有一个定义序列的选项,可将重复录入的文字做成一个下拉列表。 即使做了下拉列表,但是百里挑一也不轻松。 用过数据验证的同学知道,那个下拉列表是... 在来源中输入公式:=OFFSET(国籍地区!$A$1,MATCH(船舶基本资料!$F2&"*",国籍地区!$A$2:$A$246,0),,COUNTIF(国籍地区!$A$2:$A$246,船舶基本资料!$F2&"*"),) 其中“国籍地区”为一个sheet,ru如下图所示: 其内容如下: 而船舶基本资料为下拉...