ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [第104期]男女搭配(已总结)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-16 08:55 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 丢丢表格 于 2014-4-21 21:51 编辑

俗话说: 男女搭配,干活不累 !你现在是总队长, 你要把 C:L 列中的男女给搭配起来.

规则:
以男组女,(单数代表男性,双数表示女性)
每行为一队,组对时,只在行中组. (每行是 0 至 9 的 10 个整数,没有空值和负数)
从C列往右找第一个出现的单数后,再向后找最先出现的双数作配对.
接着再在这个双数后面找到单数后再向后找双数,如此循环……
组对时,必须男大于女。

要求:
纯函数题,不允许使用自定义名称或VBA ,不允许辅助列
若队内无任何一组男女组对成功,则显示空白 如 12 行 所示
O2公式下拉完成(多单元格数组公式亦可),不限OFFICE版本
结果如 P 列所示(显示效果一致即可):组与组之间留一空值就行 ,只有一组的, 前或后带个空值都没有关系.

评分标准 :.精彩答案(至少<220字符)  3分
<270字符  2分
<330字符  1分                     

提示:
题材出自数据的奇偶组合.



总结在14楼
http://club.excelhome.net/forum.php?mod=viewthread&tid=1112937&page=2&extra=#pid7590172






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

竞赛日期:2014-4-16至2014-5-10  发表于 2014-4-16 09:02

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-16 09:15 | 显示全部楼层
本帖最后由 delete_007 于 2014-4-19 21:00 编辑

211字符:
  1. =SUBSTITUTE(TEXT(SUM(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2<>-1^C2:L2,COLUMN(A:J)*10+C2:L2,909),ROW($1:$5)*2-{1,0}),10),{10;1}),"[<"&REPLACE(COLUMN(A:I)*1011,3,,"]!0;[<")&"];!0")*10^{8;6;4;2;0}),REPT(" 00",5))," 00",)
复制代码
TEXT的第二参数有几种变化:
214字符:
=SUBSTITUTE(TEXT(SUM(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2<>-1^C2:L2,COLUMN(A:J)*10+C2:L2,909),ROW($1:$5)*2-{1,0}),10),{10;1}),"[>="&COLUMN(A:J)*11&"]!0;[>="&COLUMN(A:J)*10&"];!0")*10^{8;6;4;2;0}),REPT(" 00",5))," 00",)
213字符:
=SUBSTITUTE(TEXT(SUM(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2<>-1^C2:L2,COLUMN(A:J)*10+C2:L2,909),ROW($1:$5)*2-{1,0}),10),{10;1}),"[<"&TEXT(COLUMN(A:I)*1011,"00""]!0;[<""00")&"];!0")*10^{8;6;4;2;0}),REPT(" 00",5))," 00",)
暂时还没有其它思路。
换个思路,179字符:
  1. =SUBSTITUTE(TEXT(SUM(MOD(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2=-1^C2:L2,909,COLUMN(A:J)*10+C2:L2),{11,12}-A$2:A$6*2),10),{110;-99}),"[>99];!0"),100)*100^A$2:A$6),REPT(" 00",6))," 00",)
复制代码

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-16 12:53 | 显示全部楼层
本帖最后由 wangg913 于 2014-4-18 10:48 编辑

最近时间不多,有时间再简化。2014-4-16
  1. =TRIM(SUBSTITUTE(TEXT(SUM(RIGHT(TEXT(MMULT(IFERROR(N(OFFSET(B2,,SMALL(IF(-1^B2:K2<>-1^C2:L2,COLUMN(A:J)),11-A$2:A$6*2+{1,0,1,0}))),100),{1;10;-100;100}),"0;\0"),2)*100^A$2:A$6),REPT(" 00",6)),0&0,))
复制代码
简化一下,2014-4-17
  1. =TRIM(SUBSTITUTE(TEXT(SUM(RIGHT(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2--1^C2:L2,COLUMN(A:J)/1%%+C2:L2,380^2),{12,11}-A$2:A$6*2),10^3),{-99;110}),"0;\0"),2)*100^A$2:A$6),REPT(" 00",6)),0&0,))
复制代码
再减,如果仅仅看起来像。2014-4-18
  1. =SUBSTITUTE(TEXT(SUM(RIGHT(TEXT(MMULT(MOD(SMALL(IF(-1^B2:K2--1^C2:L2,COLUMN(A:J)/1%+C2:L2,13.2^3),{12,11}-A$2:A$6*2),100),{-99;110}),"0;\0"),2)*100^A$2:A$6),REPT(" 00",6))," 00",)
复制代码


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

第二种办法,比较繁琐。
  1. =TRIM(SUBSTITUTE(TEXT(SUM(TEXT(RIGHT(SMALL(MOD(LARGE((-1^TRANSPOSE(C2:L2)>-1^C2:L2)*(A$2:A$11>COLUMN(A:J))*(-1^B2:K2<>-1^C2:L2)*(10-A$2:A$11&N(TRANSPOSE(C2:L2)>C2:L2)&C2:L2&TRANSPOSE(C2:L2))+COLUMN(A:J)/1%%,A$2:A$11*10-9),10^4),A$7:A$11),3),"[>99]!0")*100^A$2:A$6)%,REPT(" 00",5)),0&0,))
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-16 18:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 aoe1981 于 2014-4-16 18:36 编辑

不好意思,我没有搞清楚题意:感觉第1队应当是 52 50 ;第7队应当是 76 ;第11队应当是 54 10 呀?哦,明白了似乎,真的不好意思,不能删帖呀……双数也是要找第一个出现的,对吧?

TA的精华主题

TA的得分主题

发表于 2014-4-16 22:44 | 显示全部楼层
每一行重复值怎么弄
第一行应该是 52 50 吧  难道第2个5能取?

TA的精华主题

TA的得分主题

发表于 2014-4-17 12:29 | 显示全部楼层
本帖最后由 delete_007 于 2014-4-21 22:28 编辑

几经折腾,终于捣鼓出一个
1. 268字符,高版本中的IFERROR确实好用,省了好多字符
  1. =SUBSTITUTE(TEXT(SUM(IFERROR(RIGHT(TEXT(MMULT(MMULT(INDEX(C2:L2,,N(IF(1,SMALL(IF(MOD(C2:L2-B2:K2,2),COLUMN(A:J),10),ROW(INDIRECT("1:"&FLOOR(SUM(MOD(C2:L2-B2:K2,2)),2)/2))*2+COLUMN(A:B)-2)))),{1,10;-1,1}),{100;1}),"#;\0"),2)*100^(5-ROW($1:$5)),)),REPT("00 ",5)),"00 ",)
复制代码

你的思路容错的位置和方法有漏洞,要稍加修改才能满足要求,如下(217字符):
=SUBSTITUTE(TEXT(SUM(RIGHT(TEXT(MMULT(INDEX(C2:M2,,N(IF(1,LARGE(IF(MOD(C2:L2-B2:K2,2),COLUMN(A:J),10),A$2:A$6*2-{0,1})))),{110;-99}),"0;\0"),2)/1%^A$2:A$6*(A$2:A$6+SUM(MOD(C2:L2+B2:K2,2))/2>=6)),REPT("00 ",6)),"00 ",)

          ——delete_007

点评

离成功已近在咫尺,希望下次竞赛能看到你的正确答案。  发表于 2014-4-22 08:56

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-18 20:18 | 显示全部楼层
本帖最后由 huahua2005 于 2014-4-18 20:24 编辑

O2单元格输入公式,三键下拉完成,251字符
  1. =TEXT(SUM(RIGHT(SMALL((MMULT(-RIGHT(SMALL(IF(MOD(B2:K2+C2:L2,2),C2:L2+COLUMN(A:J)*10,999),ROW($1:$5)*2+{-1,0})),{-1;1})>0)*SMALL(IF(MOD(B2:K2+C2:L2,2),C2:L2+COLUMN(A:J)*10,999),ROW($1:$5)*2+{-1,0}),ROW($1:$10)))*10^(10-ROW($1:$10))),"## ## ## ## 00;;")
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-19 20:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 qy1219no2 于 2014-4-19 20:20 编辑

按照楼主释义,题目中第一个结果就有问题吧,应该是52 50

TA的精华主题

TA的得分主题

发表于 2014-4-20 09:47 | 显示全部楼层
本帖最后由 jsxjd 于 2014-4-21 16:03 编辑

数组公式,下拉。188 Chars
  1. =TRIM(SUBSTITUTE(TEXT(SUM(MOD(TEXT(MMULT(MOD(SMALL(IF(MOD(C2:L2-B2:K2,2),C2:L2+COLUMN(A:J)*10,999),{1;3;5;7;9}+{0,1}),10),{110;-99}),"[<100]\0"),100)*10^{8;6;4;2;0}),REPT(" 00",5)),"00",))
复制代码
数组公式,下拉。177 Chars
  1. =SUBSTITUTE(TEXT(SUM(MOD(TEXT(MMULT(MOD(LARGE(IF(MOD(C2:L2-B2:K2,2),C2:L2+COLUMN(A:J)*10,999),A$2:A$6*2-{0,1}),10),{110;-99}),"[<100]\0"),100)/1%^A$2:A$6),REPT(" 00",9))," 00",)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-21 17:12 | 显示全部楼层
252
=SUBSTITUTE(TEXT(SUM(RIGHT((MMULT(-RIGHT(SMALL(IF(MOD(B2:K2+C2:L2,2),COLUMN(A:J)*10+C2:L2,999),ROW($1:$5)*2+{-1,0})),{-1;1})>0)*SMALL(IF(MOD(B2:K2+C2:L2,2),COLUMN(A:J)*10+C2:L2,999),ROW($1:$5)*2+{-1,0}))*10^{9,8;7,6;5,4;3,2;1,0}),REPT("00 ",5)),"00 ",)
数组下拉

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 14:13 , Processed in 0.047782 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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