数据匹配:不用字典,如何查找日期相同、数值相近的数据?

文摘   教育   2024-10-04 19:42   江苏  

点【关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • 查找符合条件的记录
大家好,我是冷水泡茶,昨天在论坛上看到一个求助贴:[求助] 按日期寻找接近条件的数据填充?
具体需求:

问题: 

在Sheet2找同一日期并小于原数的数(接近数)?填充到D列。接近数条件是:原数减接近数的差不能大于原数的1%

感觉跟我们刚分享的案例【查询时间最近的记录】有点类似。
我们先看一下数据表格,
1、Sheet1工作表:
2、Sheet2工作表,有两列数据(我真是有点搞不懂,这个表格为什么要吊在半空 
需求分析:

1、查找近似数,有一个工作表函数LookUp,能不能用在这里呢?我也不知道,我也不去想了,我们还是专注于VBA吧。

2、我们可以通过循环遍历的方式,在Sheet2中查找日期相同,且数值小于当前值1%以内的记录。

3、如果存在多个与原值相差在1%以内的数,我们可以取首次查找到的数,也可以取差额最小也就是与原值最接近的数。

4、我们可以扩展一下取数条件,可以分为三种情况:

(1)大于原数,在1%以内的;

(2)小于(等于)原数,在1%以内的;

(3)与原数上下相差在1%以内的。

基本思路:

1、把Sheet1、Sheet2数据区域分别赋值给Range对象rng1、rng2;设置变量matchType,分别对应“大于”、“小于”、“所有”

2、循环rng1的第一列(日期),循环rng2的第一列(日期);

3、如果日期相等,则判断与原数相差在1%以内,根据matchType,确定当前数是否符合取数条件;

4、如果符合取数条件,则将当前数据写入rng1对应的单元格(首次直接写入,后续选择已写入数与当前数跟原数相差更小的)。

补充:

后来,需求又有进一步明确:要保留原表中已有的数据。这本身没有什么问题,我们只要在循环rng1的时候,判断一下D列是否有数据,可以跳过已有数据的行,但是问题是,这个过程那就只能执行一次,有点想不通(我是把D列所有数据先置空)。如何解决这个问题,想来想去,干脆做一个自定义函数吧(sLookUp),可以在D列空白处输入公式:

=sLookUp(B3,C3,1%,Sheet2!$E$2:$F$50)

示例代码详见当天另一条推文。

后记

1、今天我们“偷个懒”,直接操作单元格区域,没有用数组,对于数据量不大的情况没什么影响,还省去了读取数据到数组,再把数组回写到工作表的操作。

2、在查找符合条件的数据时,我们经常会使用字典,但是今天的情况似乎没有必要。我们只需要提取一个数,在数组或者单元格里,都可以暂存一个数,就用不着字典啦。

好,今天就到这里,我们下期再会!


~~~~~~End~~~~~~

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

案例文件分享说明

  • 案例文件可免费分享,但需符合以下要求:

  • 关注点赞点在看点...留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!

  • 请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章