ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: gouweicao78

[推荐] [答疑解惑]函数公式解释专用帖

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-24 19:40 | 显示全部楼层
本帖已被收录到知识树中,索引项:公式基础

to  方兄:嘻嘻,我只是烧了把火,然后你们就得到处捡柴禾了,众人拾柴火焰高!

一开始开这个帖的时候,我犹豫过很久的,那时候我的水平还很菜,发现在解释的时候不敢轻易下笔,只好逼着自己再看前辈们的帖子加强理解,于是又有了一段时间的函数以及文字表达能力的进步。

可惜的是由于工作原因,无法再继续这份让我开心的事情(不,按Apolloh的话来说,如果愿意,可以把它当作事业)。

新的工作环境,遇到了许多新的同事和朋友,我渐渐用Excel函数公式(我还是没学VBA)公式编一些实用的小东西来让他们更轻松地应付工作,然后在他们惊诧Excel功能之后煽风点火,再把EH的网址给他们,虽然大多数人不见得会上来看,但至少,我可以感觉自己身上有了动力,就像依旧与朋友们在一起捡柴禾一般。

写书,这个念头很好,希望能看到并得到EH老友们的书,我会好好收藏的。

另:方兄的确够耐心了,呵呵。在解释过程我一般会偷懒,给出一些已有解释的链接。比如yingdsss的两个问题,我会给参考:1、Lookup内存数组,请参看 [第12期_2] 看看你的“内存”有多大及相关帖子,主要是理解gvntw版主Lookup在内存数组应用的“定式”,如[原创]LOOKUP()在处理内存数组中的应用

2、本帖43楼SUMif三维引用的经典用法已讲解。

[此贴子已经被作者于2006-9-25 0:11:18编辑过]

TA的精华主题

TA的得分主题

发表于 2006-10-23 14:54 | 显示全部楼层

我有一组数据中某些项是0,但想从这一组数据中找出非0的最小值,如何运用MIN函数呢?

TA的精华主题

TA的得分主题

发表于 2006-10-23 16:08 | 显示全部楼层

大于0的最小值

普通公式:

=LARGE(A:A,COUNTIF(A:A,">0"))

数组公式:

=MIN(IF(A1:A10>0,A1:A10))

按Ctrl+Shift+Enter结束。

TA的精华主题

TA的得分主题

发表于 2006-11-4 15:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

请帮忙解读一下这公式。

=LOOKUP(MATCH(A2,SMALL($A$2:$A$24,ROW($A$2:$A$24)-1),),SUBTOTAL(9,OFFSET($K$1,,,ROW($1:$6)))+1,{"1批";"2批";"3批";"4批";"5批";"6批"})

原贴处:http://club.excelhome.net/viewthread.php?tid=197750&extra=&page=1#581435

谢谢

TA的精华主题

TA的得分主题

发表于 2006-11-4 19:15 | 显示全部楼层

SMALL($A$2:$A$24,ROW($A$2:$A$24)-1) 是将数组进行升序排列,这是LOOKUP函数所必需的.

MATCH(A2,SMALL($A$2:$A$24,ROW($A$2:$A$24)-1),) 是指A2在上述数组中的位置

SUBTOTAL(9,OFFSET($K$1,,,ROW($1:$6)))+1 得到的也是一个数组,是一个6*1的数组

{"1批";"2批";"3批";"4批";"5批";"6批"} 这也是一个6*1的数组

上面两个数组合成一个6*2的数组

其它就可以看LOOKUP函数的解释了.

不知这样理解对不对?

TA的精华主题

TA的得分主题

发表于 2006-11-9 14:37 | 显示全部楼层

请高人解释一下这个公式

JYXDEAqF.rar (4.79 KB, 下载次数: 98)

谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-9 21:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用chury11在2006-11-9 14:37:34的发言:

谢谢

找个单元格,按下F3,粘贴列表,可以看见定义了3个名称

_1  =MID(Sheet1!$A$1,ROW(INDIRECT("1:"&LEN(Sheet1!$A$1))),1)(其他2个意思一样)

其中Sheet1!是自动加上去的,$是绝对引用符,为方便看,去掉之后就是:

=MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)——取得A1单元格的每一个字,比如A1有5个字,则Len(A1)=5

ROW(Indirect("1:5"))——>Row(1:5)产生{1;2;3;4;5}数组,MID取得的就是分别从第1、2……5个字起的1个字符

即:{"王";"陈";"蔡";"李";"林"}——暂称为A1数组

其他2个名称分别得到A2、A3单元格的每个字组成的数组。

{"王";"张";"蔡";"李";"杨}——暂称为A2数组

{"张";"蔡";"沈";"陈";"杨"}——暂称为A3数组

=LOOKUP(TRUE,ISNUMBER(MATCH(_1,_2,)*MATCH(_1,_3,)),_1)

Match(_1,_2,0)在A2数组中精确查找A1数组,如果找不到返回#N/A错误,找得到就返回代表位置的数值——得到{1;#N/A;3;4;#N/A}——即A1的王在A2中排第1位,A1的蔡在A2排第3位,A1的李在A2排第4位,其他2个字找不到

Match(_1,_3,0)在A3数组中精确查找A1数组,如果找不到返回#N/A错误,找得到就返回代表位置的数值——得到{#N/A;4;2;#N/A;#N/A}——即A1的陈在A3排第4位,A1的蔡在A3排第2位,其他3个字找不到

两组数相乘,若都是数值,ISnumber(数值)就返回True了,否则返回False。——得到{FALSE;FALSE;TRUE;FALSE;FALSE}

最后用Lookup在True和False中查找True的位置(第3个),并由该位置确定A1数组中第3个位置的字——“蔡”字。

以上过程,可以用本帖首页的“独孤九剑”看到。

[此贴子已经被作者于2006-11-9 21:34:22编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-11-13 12:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

LOOKUP(2,1/(A1:A20<>""),A1:A20)-----返回非空单元格
=LOOKUP(2,1/(A1:A20<>""),ROW(A1:A20))---返回行号
=LOOKUP(2,1/(A1:A20<>0),A1:A20)------返回非零单元格
=LOOKUP(2,1/(A1:A20<>0),ROW(A1:A20))---返回行号
=LOOKUP(2,1/(A1:A20="a"),A1:A20)-----返回指定文本单元格
=LOOKUP(2,1/(A1:A20="a"),ROW(A1:A20))---返回行号
=LOOKUP(2,1/(1-ISBLANK(A1:A20)),A1:A20)--返回非空单元格
=LOOKUP(2,1/(1-ISBLANK(A1:A20)),ROW(A1:A20))--返回行号
=LOOKUP(2,1/((A1:A20<>0)*ISNUMBER(A1:A20)),A1:A20)--返回不为零非空单元格
=LOOKUP(2,1/((A1:A20<>0)*ISNUMBER(A1:A20)),ROW(A1:A20))--返回行号

 这几个公式不明白,请解释一下!谢谢!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-13 21:14 | 显示全部楼层
QUOTE:
to   chury11:关于Lookup的阅读建议

建议:关于Lookup,懂了一个就可以懂其他这些了

1、先看看Lookup的帮助文件,了解其2种语法(数组与向量)

2、本帖有关于Lookup的解释,但不是很长篇大论,因为有这样的专帖:

[讨论]有VLOOKUP何需LOOKUP?——将Lookup对照Vlookup的用法进行公式改编

[函数用法讨论系列10] LOOKUP的查找策略!该帖主要内容有:

QUOTE:

Lookup二分法之芝麻开门

——二分法猜想篇   by  Onkey    8楼、15楼

 《Lookup二分法之茅台瓶碎

——Onkey流程图修正篇——瓶子碎了  by  gouweicao78   30楼

——二分法流程修正、论证及模拟篇——酒香飘飞   by  gouweicao78   47楼

《Lookup二分法之惑起萧墙

——第2参数非单一类型的二分法疑问  by  gouweicao78   72楼

[此贴子已经被作者于2007-5-12 2:01:32编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-24 20:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

gvntw版主的只用函数实现分表合并与总表拆分。 公式解释:

应用实例:同一文件夹下多个Excel工作簿分类汇总的汇总,见[求助]原材料汇总表的函数汇总公式 第6楼。)

    一、根据各个分表的记录个数给各个分表标上一个记录指针

Num_1=COUNTIF(INDIRECT(sh&"!A3:A100"),">0")——意在取得sh(={1;2;3})三个分表中A3:A100区域>0(即有编号)的记录个数。得到3行1列的数组(与sh同),在本例中结果为{5;4;3}

Num_2=MMULT(N(ROW(INDIRECT("1:"&ROWS(Num_1)))>COLUMN(INDIRECT("C1:C"&ROWS(Num_1),0))),Num_1)

——意在取得以0开头的Num_1({5;4;3})的累加数组,即0、0+5、0+5+4,由此给每个分表标上一个记录指针

其中:

ROWS(Num_1)——取得Num_1的行数,实际上也就是分表的个数,可以改为Rows(sh),本例中为3行,

则Row(Indirect("1:3"))===得到Row(1:3),即{1;2;3}——3行1列

Column(Indirect("C1:C3",0))===相当于得到Column(A:C),即{1,2,3}——1行3列。

ROW>COLUMN==={1;2;3}>{1,2,3}===得到3行3列的数组:

{FALSE,FALSE,FALSE;TRUE,FALSE,FALSE;TRUE,TRUE,FALSE}

N()函数将True和False转换为1和0,也可以用--、*1、/1等方法转化。得到{0,0,0;1,0,0;1,1,0}。

MMULT(array1,array2)返回两数组的矩阵乘积。结果矩阵的行数与 array1 的行数相同,矩阵的列数与 array2 的列数相同。

MMULT({0,0,0;1,0,0;1,1,0},{5;4;3})==这两个矩阵相乘,得到Num_2:  {0;5;9}——事实上,这个就是Num_1的累积求和,即第一张表5个记录,第2个表4个记录,第3个表3个记录——0~4对应第一张表的5个记录,5~9对应第2张表的4个记录(5+4),超过9之后就是第3张表的记录。

    二、利用Lookup通过记录指针来查找对应的表格名称

Lookup(Row(1:1)-1,Num_2,sh)——

当公式在第1行时Row(1:1)-1=0,即:Lookup(0,{0;5;9},{1;2;3}),得到1,即表1

当公式在第6行时Row(6:6)-1=5,即:Lookup(5,{0;5;9},{1;2;3})得到2,即表2

……这就实现了根据各个分表的记录个数来自动选择引用的表格的功能。

=IF(ROW(1:1)>SUM(Num_1),"",OFFSET(INDIRECT(LOOKUP(ROW(1:1)-1,Num_2,sh)&"!A2"),ROW(1:1)-LOOKUP(ROW(1:1)-1,Num_2),COLUMN()-1))

所以,Offset()的第一个参数引用位置为与公式所在行数对应的分表的A2单元格。

ROW(1:1)-LOOKUP(ROW(1:1)-1,Num_2)即偏移的行数,同理,Lookup查到的是应该扣去的行数。

比如:第1张表5个记录,那么在第6行的时候(即Row(6:6))引用第2张表则应该从2!A2偏移1行而不是6行,Row(6:6)-Lookup(Row(6:6)-1,{0;5;9})得到6-5=1。即记录重新开始算个数。

最后Row(1:1)>Sum(Num_1)就是当公式拉下来的行数已经超过所有分表的记录个数之和,显示为空。

[此贴子已经被作者于2006-11-25 11:46:19编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-20 18:56 , Processed in 0.041517 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表