ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [第26期]筛选不重复文本并连接(已小结)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-8-26 22:58 | 显示全部楼层
QUOTE:
以下是引用chrisfang在2007-8-25 10:48:31的发言:

采用2楼、7楼、17楼的解法,由于15位有效数字的限制,当不重复项超过7项时,公式就会失效。

此题在出题时没有对数据区域的扩展以及数据中不重复项可能出现的情况进行任何说明,因此我觉得采用五十步笑百步的评分方法并不太合适。

就目前来说,对于多字符串的连接,说实话并没有什么“特别”好的方法。


赞同

TA的精华主题

TA的得分主题

发表于 2007-8-27 18:43 | 显示全部楼层
QUOTE:
以下是引用jssy在2007-8-25 11:27:09的发言:

2楼、7楼、17楼的解法较其他方法应该说是有了新的突破,多加一分也在于此。

15位有效数字限制,是可以采用其他方法解决的。

多字字符串连接问题一直没有好的解决办法,现在出现了新的思路,应该予以加分。

QUOTE:
以下是引用chrisfang在2007-8-25 10:48:31的发言:

采用2楼、7楼、17楼的解法,由于15位有效数字的限制,当不重复项超过7项时,公式就会失效。

此题在出题时没有对数据区域的扩展以及数据中不重复项可能出现的情况进行任何说明,因此我觉得采用五十步笑百步的评分方法并不太合适。

就目前来说,对于多字符串的连接,说实话并没有什么“特别”好的方法。

而且数据行数超过99行也要出问题的,好象!!!!!

不知道楼主为什么不把自己的标准答案示人,该题的正确答案可得2分,好象所有已知答案都没有正确,因为得2分的都因为使用新思路而加分的。

楼主就莫要玩高深了吧,渴望ing你的正确答案!!!!!!!就让我们开开眼嘛

切!原来就是这个答案啊!搞不明白,即然和前面几个用了宏函数evaluate的答案差不多,为何又说:使用了新方法

[此贴子已经被作者于2007-8-29 12:52:02编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-8-29 00:32 | 显示全部楼层

小结:

本期竞赛题,有两大难点,一是筛选不重复值,二是文本合并,对于第一个问题已有很多比较成熟的解法,在这里就不重点分析了;二是文本合并,这是本题的难点。
  不用VBA,不借助辅助列实现文本合并连接是一件比较困难的事,困难在于可用于文本合并连接的方法非常少,只有concatenate函数和文本运算符&,这两种方法的问题最大问题是无法动态地控制需要合并连接的项数。本期出题也是抛砖引玉,期待在这一问题上有所突破。可喜的是已有willin2000、laoyebin、封州大少、dengyf、fjlhgs等五位朋友给出了新的思路,就是利用TEXT(数值,rept())函数组合动态构造并控制文本取值输出项,所以多加了一分,但未能突破7项的限制,所以只得2分。
  这一函数组合在论坛上早出现过,但未被用于文本合并连接上,也未深入研究过。借助本期竞赛总结,对这一问题进行一些介绍。
  要运用好text(数值,rept())这个函数组合,首选要了解text的用法,
  TEXT(value,format_text),Value为数值、计算结果为数字值的公式,或对包含数字值的单元格的引用,Format_text为“单元格格式”对话框中“数字”选项卡上“分类”框中的文本形式的数字格式。基本思路就利用文本形式的数字格式构建所需要的取数函数,并由rept函数输出重复次数,最后根据数值用text予以赋值。实现这一功能大体可用三种方法,为了便于使用,可先将其定义为名称,如link1,如需要增加分隔符,可再定义k=";"。
  1、TEXT(数值,REPT("\b00&k\,",SUM(n(line>0))))),实用于对单元格取值;
  2、TEXT(数值,REPT("i!n!d!ex(!aa,00)&k,",SUM(n(line)>0)))),实用于内存数组取值;
   3、TEXT(数值,TEXT("&\b00&k",REPT("@",SUM(n(line)>0))),两次text嵌套,这一种方法以是方法1的变形,列出来是为了让大家多一点了解text丰富的变化。
  利用TEXT(数值,rept())函数组合生成需要重复项后,又可用两种方法构建最终公式:
  1、=SUBSTITUTE(EVALUATE(link1),";","",SUM(N(line>0))),直接用文本运算符&连接。
    2、=SUBSTITUTE(EVALUATE("concatenate("&link1&")"),";","",SUM(N(line>0))),用运concatenate函数连接。

因为concatenate函数有30个参数的限制,所以建议使用&连接,一可以避参数数量限制,二可以使公式简洁些。最后用宏表函数EVALUATE生成最后的公式,得到结果。
  这里要特别说明的两个限制的难点:一是text函数的第一个参数有15位限制,二是EVALUATE函数参数总长不能超过256个字符(包括用函数生成的结果),且参数值不能为空。
   为了突破这些限制,可借鉴sum((),(),())结构突破sum函数30个参数限制的思路,对数值进行分组,因为要至少要考虑10项以上的输出需求,就需要两位数数字格式结构,要满足小于15位限制的大偶数为14,因此一次分组最大项数只能是7项,经过多次分组可以突破7项的限制,目前已完成了99项文本合并连接。
  当然实际运用中,一般没必要用到100以上或更多项,在20以内基本可以满足需要,因此本例中只给出了最大20项的结果,需要了解99项的合并连接的朋友可以去看看:http://club.excelhome.net/viewthread.php?tid=262026&px=0
  因为时间问题,有些公式未进行深入推敲,可能未实现最优化,请大家多参与研究,提出更好的思路,优化公式,谢谢大家。


  

TA的精华主题

TA的得分主题

发表于 2010-3-10 14:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太棒了。学习了。

TA的精华主题

TA的得分主题

发表于 2013-11-23 18:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-1-13 20:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-2 12:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-6 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
精彩小结,学习了

TA的精华主题

TA的得分主题

发表于 2016-12-8 08:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-2-28 16:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 19:02 , Processed in 0.060644 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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