Excel如何抓取符合条件的数据?
发布网友
发布时间:2022-02-27 11:58
我来回答
共4个回答
热心网友
时间:2022-02-27 13:27
首先两个问题:
例子中第一张表的B2是否应该是2012/7/6?
6个月是否为180天? 1年是否为360天? 即: 半年和一年是什么标准?
暂时写如下公式, 具体条件再修改:
第一张表E2公式
=INDEX(Sheet2!B:G,MATCH(B2,Sheet2!B:B,),LOOKUP(D2,{0,180,360,1080,1800},{2,3,4,5,6}))&""
追问谢谢,能稍稍简单讲解一下公式么?
利率计算一年是360天,半年是180天。
追答
用INDEX()按条件提取SHEET2的B列到G列的数据, 它的两个参数如下:
MATCH(B2,Sheet2!B:B,) 返回值告诉INDEX()提取B:G的哪一行;
LOOKUP(D2,{0,180,360,1080,1800},{2,3,4,5,6}) 返回值告诉INDEX()提取B:G的哪一列.
MATCH() 返回B2("2012-7-6")在SHEET2!B列中的位置, 即确定了哪一行;
LOOKUP() 判断D2("82")在{0,180,360,1080,1800} 的哪个区域内, 82在0-180之间, 所以, 取LOOKUP第二个参数相应的第一个值, 即 {2,3,4,5,6} 中的第一个值 2, 最终LOOKUP()返回值为2, 即确定了第二列.
涂黑公式中的某一部分, 按F9可以即时查看当段公式的计算结果, 一段一段来, 有助于对整个公式的理解.
热心网友
时间:2022-02-27 14:45
在E2填写
=IF(DATEDIF(B2,C2,"y")<5,IF(DATEDIF(B2,C2,"y")<3,IF(DATEDIF(B2,C2,"y")<1,IF(DATEDIF(B2,C2,"m")<6,INDIRECT("sheet2!C"&IF(MAX(IF(Sheet2!B$4:B$18<B3,Sheet2!B$4:B$18)),ROW(Sheet2!B$4:B$18),0)),INDIRECT("sheet2!D"&MAX(IF(Sheet2!B$4:B$18<B3,ROW(Sheet2!B$4:B$18))))),INDIRECT("sheet2!E"&MAX(IF(Sheet2!B$4:B$18<B3,ROW(Sheet2!B$4:B$18))))),INDIRECT("sheet2!F"&MAX(IF(Sheet2!B$4:B$18<B3,ROW(Sheet2!B$4:B$18))))),INDIRECT("sheet2!G"&MAX(IF(Sheet2!B$4:B$18<B3,ROW(Sheet2B$4:B$18)))))
输入后按Crrl+Shift+Enter
基本函数说明:
1:DATEIF 是计算两个日期的差距(y表示年的差距,m表示月的差距)
2:INDIRCEC 是从给定的地址读取数据
3:MAX是返回在数组中查找最大值
4:ROW是返回列号
上面公示的主要意思是 首先对比年份差距是多少,如果小于1,计算月的差距,确定利率列
然后根据暂至日期与列表对比,读取利率的行。
这个公示比较繁琐 优点是可以自动算出间隔日期,不必用每月30天估算
缺点只能填完数据向下拉出公式,不能自动出来,而且如果表1中B或C列的日期变化的话,必须双点单元格,重新按Crrl+Shift+Enter
热心网友
时间:2022-02-27 16:20
把问题作为内容(邮件主题一定要包含“excel”,本人以此为依据辨别非垃圾邮件,以免误删)、excel样表文件(请特别注意:要03版的(如果是03以后的,把文件“另存为”一下,类型框可以选择03的),把现状和目标效果表示出来)作为附件发来看下 yqch134@163.com
热心网友
时间:2022-02-27 18:11
本人亲自测试,要两个步骤:
1、将sheet2中的数据按照日期升序排列,也就是说2012/7/6会调整到数据表最下边。如果不重新排序,则会影响match函数的模糊查找。
2、在sheet1中E2单元格输入以下函数:
=INDEX(Sheet2!$C$4:$G$23,MATCH(B2,Sheet2!$B$4:$B$23,1),LOOKUP(D2,{0,180,365,1095,1825},{1,2,3,4,5}))
如是向下填充就能得到所需要的利率了。
本人亲自测试正确无误,请楼主试试。
P.S. yaong_3网友的思路完全正确,只是忽略了match函数的一个参数及其要求。