内容简介:excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史
前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来?
我想了想,用vba实现肯定可以啊,但是我又在想,有没有可能excel自身的功能就可以实现了呢,但是后来没有发现excel自带这种功能。于是思考自己用vba给实现吧。
于是我打开我的电脑,结果发现我的office版本是wps,根本就没有vba功能,网上说的使用vba模块安装,但是始终没有安装成功。最后放弃了,自己下载一个office2013, 自带vba功能。
其实搜索功能实现思路相当简单,无非就几个循环,把关键词分割出来循环,按行搜索循环,按列搜索循环,然后得到结果后,填充结果,对于历史记录,则需要得到最后一行的行号等。
附件已上传,可点击去下载: 跨表单搜索示例-2003.zip
http://files.cnblogs.com/files/yougewe/%E8%B7%A8%E8%A1%A8%E5%8D%95%E6%90%9C%E7%B4%A2%E7%A4%BA%E4%BE%8B-2003.zip
关键功能代码提示:
Sheets("原始数据").Range("A6").CurrentRegion '获取选择区域数据 searchArr = Split(searchStr, "~") ' 分割关键词 Range("A9:V" & Rows.Count).ClearContents ' 清空原有数据 Sheets("搜索记录").Range("A65536").End(xlUp).Row '获取最大行的行号 Sheets("搜索记录").Range("A" & maxRow).Resize(m, columnCount) = brr '数据填充
实现代码如下:
Sub 点击搜索原始数据() Dim i&, j&, m&, c%, t$, columnCount Dim arr, brr(), searchArr() As String, checkedRow() searchStr = InputBox("请输入要搜索的关键词,多个关键词以~分隔", "搜索数据选项", "云~餐") If searchStr = "" Then MsgBox ("no search str ...") Exit Sub End If searchArr = Split(searchStr, "~") arr = Sheets("原始数据").Range("A6").CurrentRegion columnCount = UBound(arr, 2) rowCounts = UBound(arr) searchArrCount = UBound(searchArr) ReDim brr(1 To UBound(arr), 0 To columnCount) ReDim checkedRow(1 To rowCounts) Range("A9:V" & Rows.Count).ClearContents startRowNum = 6 For i = startRowNum To rowCounts If (checkedRow(i) <> 1) Then ' 因为当搜索到结果后会把整行显示出来,因此只要搜索到一行后,后续就可以不再搜索该行了,避免重复,也提升效率 For iColumnNum = 1 To columnCount findStr = 0 For iSearchNum = 0 To searchArrCount If arr(i, iColumnNum) Like "*" & searchArr(iSearchNum) & "*" Then m = m + 1 checkedRow(i) = 1 findStr = 1 Exit For End If Next If findStr = 1 Then For j = 0 To columnCount - 1 brr(m, j) = arr(i, j + 1) '按行进行数据填充 Next End If Next End If Next maxRow = Sheets("搜索记录").Range("A65536").End(xlUp).Row + 3 ' 查找最大行数 If m > 0 Then cc = UBound(brr, 1) cc2 = UBound(brr, 2) Sheets("搜索").Range("A9").Resize(m, columnCount) = brr Sheets("搜索记录").Cells(maxRow - 1, 1) = "本次搜索:" & searchStr & " 搜索时间:" & Now() Sheets("搜索记录").Range("A" & maxRow).Resize(m, columnCount) = brr Else Sheets("搜索记录").Cells(maxRow - 1, 1) = "本次搜索:" & searchStr & " 搜索时间:" & Now() Sheets("搜索记录").Cells(maxRow, 1) = "没有搜索到结果" End If '不管有无结果都需要记录操作 End Sub
注意的点: 使用office2013编辑生成了vba程序后,保存为2013的格式,下次打开后,该宏代码就丢失了,这是残酷的事实。解决办法为:保存为2003格式就可以了。
vb作为脚本脚本语言,有其一定的特点,但是做一些小功能还是可以派上用场的。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 表单 – 避免Symfony强制显示表单字段
- 细说 Angular 2+ 的表单(二):响应式表单
- 8款最新CSS3表单 环形表单很酷
- 动态表单 form-create 2.5 版本来啦,帮你轻松搞定表单
- 开源 | vue-form-making:基于 Vue 的表单设计器,让表单开发简单而高效
- 表单验证(AngularJs)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机算法设计与分析
王晓东 / 电子工业出版社 / 2007-5 / 29.50元
《计算机算法设计与分析(第3版)》为普通高等教育“十一五”国家级规划教材,是计算机专业核心课程“算法设计与分析”教材。全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、随机化算法、线性规划与网络流、NP完全性理论与近似算法等。书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。 为突出......一起来看看 《计算机算法设计与分析》 这本书的介绍吧!