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, )
rowCounts = UBound(arr) searchArrCount = UBound(searchArr)
ReDim brr( To UBound(arr), To columnCount)
ReDim checkedRow( To rowCounts)
Range("A9:V" & Rows.Count).ClearContents
startRowNum =
For i = startRowNum To rowCounts
If (checkedRow(i) <> ) Then ' 因为当搜索到结果后会把整行显示出来,因此只要搜索到一行后,后续就可以不再搜索该行了,避免重复,也提升效率
For iColumnNum = To columnCount
findStr =
For iSearchNum = To searchArrCount
If arr(i, iColumnNum) Like "*" & searchArr(iSearchNum) & "*" Then
m = m +
checkedRow(i) =
findStr =
Exit For
End If
Next
If findStr = Then
For j = To columnCount -
brr(m, j) = arr(i, j + ) '按行进行数据填充
Next
End If
Next
End If
Next
maxRow = Sheets("搜索记录").Range("A65536").End(xlUp).Row + ' 查找最大行数
If m > Then
cc = UBound(brr, )
cc2 = UBound(brr, )
Sheets("搜索").Range("A9").Resize(m, columnCount) = brr
Sheets("搜索记录").Cells(maxRow - , ) = "本次搜索:" & searchStr & " 搜索时间:" & Now()
Sheets("搜索记录").Range("A" & maxRow).Resize(m, columnCount) = brr
Else
Sheets("搜索记录").Cells(maxRow - , ) = "本次搜索:" & searchStr & " 搜索时间:" & Now()
Sheets("搜索记录").Cells(maxRow, ) = "没有搜索到结果"
End If '不管有无结果都需要记录操作
End Sub
注意的点: 使用office2013编辑生成了vba程序后,保存为2013的格式,下次打开后,该宏代码就丢失了,这是残酷的事实。解决办法为:保存为2003格式就可以了。
vb作为脚本脚本语言,有其一定的特点,但是做一些小功能还是可以派上用场的。
excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史的更多相关文章
- 原生js封装ajax:传json,str,excel文件上传表单提交
由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...
- AngularJS 表单提交后显示验证信息与失焦后显示验证信息
虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...
- Ladda 应用提交表单的时候显示loading载入中 包含不同位置,不同效果
Ladda 应用提交表单的时候显示loading载入中 包含不同位置,不同效果 不同大小.位置,效果,进度条等 演示 XML/HTML Code <article class="exa ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 01 UIPath抓取网页数据并导出Excel(非Table表单)
上次转载了一篇<UIPath抓取网页数据并导出Excel>的文章,因为那个导出的是table标签中的数据,所以相对比较简单.现实的网页中,有许多不是通过table标签展示的,那又该如何处理 ...
- submit()提交表单时,显示警示框
我同事在实现submit()提交表单时,想要页面弹出警示框. 但是折腾了几小时后发现,submit()始终不执行. 她的代码如下: $(document).ready(function(){ $(&q ...
- 前端 HTML form表单标签 textarea标签 多行文本
<textarea></textarea>作用:允许用户录入多行数据到表单控件中 <!DOCTYPE html> <html lang="en&qu ...
- SQL: 从一个表随机读取一行或几行记录的问题
比如ms sql 2000,随机读取了一行记录: SELECT TOP 1 * FROM [tablename] ORDER BY NEWID() 遇到的问题是,如果这个表记录不多,比如几十或几百.几 ...
随机推荐
- Mvc自定义验证
假设我们书店需要录入一本书,为了简单的体现我们的自定义验证,我们的实体定义的非常简单,就两个属性,一个名称Name,一个出版社Publisher. public class BookInfo { pu ...
- java复习(6)---异常处理
JAVA异常处理知识点及可运行实例 接着复习java知识点,异常处理是工程中非常重要的. 1.处理异常语句: try{ .... }catch(Exception e){ ..... } finall ...
- App启动页倒计时功能
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6753418.html 示例代码采用 RxJava + RxLifecycle + Data-Binding ...
- C#Execl
using System.IO; using System.Text; namespace iLIS.Common { /// <summary> /// 生成Excel文档内容 /// ...
- SpringMVC4+MyBatis+SQL Server2014 基于SqlSession实现读写分离(也可以实现主从分离)
前言 上篇文章我觉的使用拦截器虽然方便快捷,但是在使用读串还是写串上你无法控制,我更希望我们像jdbc那样可以手动控制我使用读写串,那么这篇则在sqlsession的基础上实现读写分离, 这种方式则需 ...
- Vim安装YouCompletMe插件。
1.Centos7.0自带含有支持python2.x的vim.(:version 后看python+则支持,python-则不支持)若不支持,卸载vim后源码编译安装. yum install pyt ...
- 蓝桥杯-猜字母-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- Python魔法方法总结及注意事项
1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...
- 今天打补丁出问题了,害得我组长被扣了1k奖金。
今天是第三次给mxdw打补丁和打包,外加公司高管说有一个东西必须要今天之内搞定外放. 我当时问策划为什么这么着急?策划说大佬决定的(这种做事方式真的很不习惯).我等屁民加班加点的搞事情,把功能搞出去了 ...
- druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索
最近项目中有个定时任务的需求,定时检查mysql数据与etcd数据的一致性,具体实现细节就不说了,今天要说的就是实现过程中遇到了druid抛出的异常,以及解决的过程 异常 异常详细信息 五月 05, ...