excel 表格lookup 的操作
这个实现语句如下,(写在2行然后向下拖动)(2007或以上版本):
=
IF(OR($D2<>,ISBLANK($H2),$G2=""),
"",
IF(OR($G2="",$G2=""),
IF($H2>,,-)*SUMIFS(INDIRECT("E"&IFERROR(LOOKUP(,/(($H$:INDIRECT("H"&ROW()-)<>"")*($G$:INDIRECT("G"&ROW()-)=$G2)),ROW($:))+,ROW($:$))):$E2,INDIRECT("A"&IFERROR(LOOKUP(,/(($H$:INDIRECT("H"&ROW()-)<>"")*($G$:INDIRECT("G"&ROW()-)=$G2)),ROW($:))+,ROW($:$))):$A2,$A2,INDIRECT("B"&IFERROR(LOOKUP(,/(($H$:INDIRECT("H"&ROW()-)<>"")*($G$:INDIRECT("G"&ROW()-)=$G2)),ROW($:))+,ROW($:$))):$B2,$B2,INDIRECT("D"&IFERROR(LOOKUP(,/(($H$:INDIRECT("H"&ROW()-)<>"")*($G$:INDIRECT("G"&ROW()-)=$G2)),ROW($:))+,ROW($:$))):$D2,,INDIRECT("G"&IFERROR(LOOKUP(,/(($H$:INDIRECT("H"&ROW()-)<>"")*($G$:INDIRECT("G"&ROW()-)=$G2)),ROW($:))+,ROW($:$))):$G2,$G2) - $H2,
IF(OR($G2="",$G2=""),
IF($H2>,,-)*SUMIFS($E:$E,$B:$B,$B2,$G:$G,$G2,$A:$A,$A2,$D:$D,) - $H2,
"ERROR"
)
)
)
主要复杂的是:
INDIRECT("E"&IFERROR(LOOKUP(1,0/(($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)),ROW($1:2))+1,ROW($1:$1)))
其作用就是返回:H列中存在空值,假设第i行有数据,从i行向上查找直到遇到另一个数据位置,返回查找到的空值的最小行号,如下面表格,i=2返回1,i=9返回5,当然还有符合一定筛选条件。
| 1 | |
| 2 | num |
| 3 | |
| 4 | num |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | num |
语句逐步才开看indirect,作用是将字符串“” 转换成有效代码,INDIRECT(“E”&1)= E1
- IFERROR()
为了解决向上查找时候没有遇到空值的情况,例如上表中的第一行若为标签,i =2 时候向上查找并未遇到空,所以用这个语句返回ROW($1:$1),E和1 前面带 $ 意义是excel 中拖动时候不变。
- ROW() 返回选中单元格的行号。
下面是需要慢慢讲的查找语句,先通过简单版来讲原理。
- LOOKUP(1,0/($H$1:INDIRECT("H"&ROW()-1)<>""),ROW($1:2))
一个数据的上面最靠近的 非 空值可以通过上面语句来返回行号。原理:
INDIRECT($H$1:INDIRECT("H"&ROW()-1)<>"")
表示该列 从第一行到数据上一行的 是数值是否为空的判断,结果是 一列的true 、false
0/(...)
用0 除以后变成一列 0 和 div/0,需要括起全部数据,后者是excel 的一个错误标记{0;0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0}
然后在该列 中查找1 ,必须大于0(利用了excel 的机制,baidu会有更清楚的解释:lookup 会默认第二个参数是已经sort(从小到大),忽略error,然后用二分查找),结果就会选中列中最后一个0,最后返回第三个参数 的对应数值,这里是行号。如果 查找的指匹配到了,lookup 的机制是返回匹配中最后一个,返回第一个好像是match。 剩下的加减 1是自己调整的。
- ($H$1:INDIRECT("H"&ROW()-1)<>"")*($G$1:INDIRECT("G"&ROW()-1)=$G2)
通过上面0/(...) 的解释,可以加入条件选择,避免了数组公式所以使用*号,这是一个且运算,并没有找到或运算的,1*n 数列 且 1*n 数列 = 1*n 数列。
把使用方法也附上吧
1.对原始数据添加首行,第一行,需要注意的是列A,B,D,E,G,H 必须正确对应
次码 主码 有效号 计算值 选择类型 处理选择
2.对添加首行后的数据排序,方法:
ctrl+A 后选择 开始->排序和筛选->自定义排序,
勾选 数据包含标题,
列:主码,排序依据:数值,次序:升序
点击添加条件,
列:次码,排序依据:数值,次序:升序
3.在某一列的第二行,必须第二行,复制上面的公式
4.最后是一拖到底(其中有空行不影响,向下拖,另向右拖不影响结果)
excel 表格lookup 的操作的更多相关文章
- [python]使用xlrd对Excel表格进行读写操作
2.1 导入模块 import xlrd 2.2 打开Excel文件读取数据 data = xlrd.open_workbook("excelFile.xls") 2.3 使用技巧 ...
- jfinal中excel表格导出
今天工作中遇到了excel表格导出的操作,还好有写好的模板,不然我也是焦头烂额,下面记录一下excel表格导出的操作步骤,同时用来给正在学习jfinal的小伙伴一些参考和学习. 首先我们需要把表格查询 ...
- VS2010 C++ 操作Excel表格的编程实现
转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...
- qt 操作excel表格
自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...
- Python操作excel表格
用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...
- php操作excel表格的导入和导出
前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...
- python对Excel表格操作
操作场景,给一个Excel表格随机生成10万个手机号码 python中常见的对Excel操作模块 xlwt module 将数据写入Excel表 xlrd module 读取Excel表格 xlsxw ...
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
随机推荐
- 01_3Java Application初步
01_3Java Application初步 l Java源文件以“java”为扩展名.源文件的基本组成部分是类(class),如本例中的HelloWorld类. l 一个源文件中最多只有一个publ ...
- NOIP模拟赛 czy的后宫5
描述 czy要召集他的妹子,但是由于条件有限,可能每个妹子不能都去,但每个妹子都有一个美丽值,czy希望来的妹子们的美丽值总和最大(虽然……). czy有一个周密的电话通知网络,它其实就是一棵树,根结 ...
- NOIP模拟赛 机器人
[题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的命令进行移动,命令包括‘E’.‘S’.‘W’.‘N’四种,分别 ...
- Voyager的数据库操作与Bread Builder,解决国内打开网速超级慢的问题
Products表的创建: Bread Builder 伟大的XX封了谷哥,所以有关网站实在是打不开,正准备放弃的时候,突然发现问题了,对就是这个网站ajax.googleapis.com,由于调用的 ...
- vue渲染函数&JSX
Vue推荐在绝大多数情况下使用template来创建你的HTML.然而在一些场景中,你真的需要JavaScript的完全编程能力,这时你可以使用render函数,它比template跟接近编译器. 虚 ...
- vscode 实时预览 编辑markdown 插件 Markdown Preview Enhanced
说明地址: https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/?id=markdown-preview-enhanced
- Java技术——多态的实现原理
.方法表与方法调用 如有类定义 Person, Girl, Boy class Person { public String toString(){ return "I'm a person ...
- py文件转exe时包含paramiko模块出错解决方法
问题描述:python代码中包含paramiko模块的远程登录ssh,在用pyInstaller转为exe时报错, 报错提示为“No handlers could be found for logge ...
- UVa 11795 状压DP Mega Man's Mission
kill[S]表示消灭机器人的集合为S,剩下的所能杀死的机器人集合. 设d(S)表示杀死机器人集合为S的方法数,答案为d((1<<n) - 1). d(S)可以由d(S')转移过来,其中S ...
- 异常 ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang.test.MyView
发现自定义view时出现ndroid.view.InflateException: Binary XML file line #8: Error inflating class com.ouyang. ...