ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

出一道函数题,给大家练练--特殊序号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-6-2 16:58 | 显示全部楼层
QUOTE:
以下是引用xcd在2008-6-2 16:47:47的发言:

草版:

=MATCH(0,{#DIV/0!;#DIV/0!;0;#DIV/0!;0})  得3

=MATCH(0,{#DIV/0!;#DIV/0!;0;0;0})   得5

这该如何理解才是对的?

二分法,可以查找一下《lookup的查找算法》这个帖子,帖子名字差不多是这个。

TA的精华主题

TA的得分主题

发表于 2008-6-2 17:03 | 显示全部楼层

to 方兄:

Lookup函数帮助说明:如果函数 LOOKUP 找不到 lookup_value,则查找 lookup_vector 中小于或等于 lookup_value 的最大数值。

我明白我们理解的分歧了,呵呵。Lookup函数这个说明没错,我举的特例也是符合这个说明的。即我们MATCH(6,最后找到的也是6的位置,但不一定是“最后一个”6的位置。

而此处,我认为的“原理”应该归类于LOOKUP(1,0/的用法。当然,这个例子永远不会有2个6。

to 许版:

你可参考

【函数用法讨论系列10】LOOKUP的查找策略
[此贴子已经被作者于2008-6-2 17:08:17编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-2 17:07 | 显示全部楼层
QUOTE:
以下是引用chrisfang在2008-6-2 16:58:35的发言:

二分法,可以查找一下《lookup的查找算法》这个帖子,帖子名字差不多是这个。

那贴我看过,只不过当中(好像)没有提到我举的这个例子

=MATCH({0,1},{#DIV/0!;#DIV/0!;0;#DIV/0!;0})    得{3,5}

=MATCH({0,1},{#DIV/0!;#DIV/0!;0;0;0})     得{5,5}

也就是当MATCH(1,)时,两者结果都是5,这好理解

但当MATCH(0,)时,却出现两个不同结果,一个为3,另一个为5。

TA的精华主题

TA的得分主题

发表于 2008-6-2 17:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-6-2 17:26 | 显示全部楼层
QUOTE:
以下是引用gouweicao78在2008-6-2 17:03:32的发言:

to 方兄:

QUOTE:
Lookup函数帮助说明:如果函数 LOOKUP 找不到 lookup_value,则查找 lookup_vector 中小于或等于 lookup_value 的最大数值。

QUOTE:
Lookup函数帮助说明:如果函数 LOOKUP 找不到 lookup_value,则查找 lookup_vector 中小于或等于 lookup_value 的最大数值。

我明白我们理解的分歧了,呵呵。Lookup函数这个说明没错,我举的特例也是符合这个说明的。即我们MATCH(6,最后找到的也是6的位置,但不一定是“最后一个”6的位置。

我知道你说的意思了,我前面以为你指的是否能查找到6的问题,后来经你解释才知道是多个6的情况下是否可以查找到准确位置的问题。

其实多个6的情况如你所分析的,是不可能出现了。

我虽然没有去考虑是否可以找到准确的6的位置,但是我考虑到的是,find*find的结果中的最大值必定对应了一对差值为5的数字。虽然在这个例子中,这种组合的情况只能存在最多一个,也就是最大值只有1个。但假设可能存在多组差值为5的情况下(大于3个数字,例如24389),此时使用最大值去match至少也能找到一种满足条件的组合情况,所以match查找到哪个位置其实不是我关心的东西,只要找到了,必定对应了一对符合条件的2位数。

TA的精华主题

TA的得分主题

发表于 2008-6-2 17:35 | 显示全部楼层
QUOTE:
以下是引用xcd在2008-6-2 17:07:10的发言:

那贴我看过,只不过当中(好像)没有提到我举的这个例子

=MATCH({0,1},{#DIV/0!;#DIV/0!;0;#DIV/0!;0})    得{3,5}

=MATCH({0,1},{#DIV/0!;#DIV/0!;0;0;0})     得{5,5}

也就是当MATCH(1,)时,两者结果都是5,这好理解

但当MATCH(0,)时,却出现两个不同结果,一个为3,另一个为5。


对照你的第一个公式,posi=3,x=0,right=5。数组第三个元素为0,0=x且3<5,就开始比较第4个元素是否与查找值相等,结果是不相等,于是直接返回当前的posi=3。

第二个公式,虽然0=x且3<5,但第四个元素与查找值相同,因此posi=posi+1,继续开始比对。

出一道函数题,给大家练练--特殊序号

出一道函数题,给大家练练--特殊序号

TA的精华主题

TA的得分主题

发表于 2008-6-2 17:36 | 显示全部楼层

是的,方兄。呵呵。

to 许兄:用二分法那个帖子的流程图走走看就明白了,【答疑解惑】也有一层“再说二分法”的,可参考。

方兄:56楼的流程图是原先错误的图吧,左上角的Yes、No对调。

[此贴子已经被作者于2008-6-2 17:41:26编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-2 17:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

再看看贴,再说谢谢两位版主

TA的精华主题

TA的得分主题

发表于 2008-6-2 23:30 | 显示全部楼层

39楼的总结贴内的K列的公式不太对呀?和其它列的答案对不上。

比如K14,K17,K20等等。

----------------------------------------------------------------------------------------------------

谢谢您的指正,K列公式在编辑中漏了一个逗号

正确公式如下:

=CHOOSE(MATCH(0,0/(FIND({0;1;2;3;4;""},A2)*FIND({5;6;7;8;9;""},A2)),),"05","16","27","38","49",N(B1)+1)

                                                                                                             --xcd

[此贴子已经被xcd于2008-6-3 8:34:22编辑过]

TA的精华主题

TA的得分主题

发表于 2008-6-3 20:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 15:22 , Processed in 0.032060 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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