|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
[第122期]补齐缺数答案汇总及总结
本帖最后由 LSL1128xgw 于 2018-5-19 09:34 编辑
各位坛友:
由于大头版主比较忙,我代总结及评分,如果有异议的地方可以及时回复。
总结:
此题解法总体上来说有两种,一种是加权法,一种是众数法,大部分思路为众数法
众数法处理比较好的是:LSL1128xgw,象山海鲜,梦幻小丑均在70以内。opqazxc 众数排序法用的比较新颖值得学习。丢丢老师内存数组公式也是值得学习借鉴的思路。
象山海鲜 公式:=MOD(MODE(COUNTIF($A2:E2,$A2:E2+{1;-11})%+$A2:E2,(F$1=0)*E2),12)+1
此题关键点:
1.循环判断,因为要借用前面一个单元格所以需要处理e2单元格在第一个出值的情况下从左到右进行判断,第二个值至最后一个值,前一个单元格都必须先做判断再判断前面已有的数据。特殊处理方式:(F$1=0)*E2 和S2%+E2 如果没有模拟结果借用L列也是正确的。
2.循环判断的结构有两种,一种countif,另外一种是sumif。
3.循环判断中唯有海鲜老师在第二参数处理的超乎所有人预料,这里的 +{1;-11} 用得很好 ,即省下了一个 MOD 、也为 后面的补上 E2 这个数 提供了条件 。 +{1;-11} 处理的关键点在11和12这两个数类似互补的关系,11处理后为:12;0一个判断一个不判断,12处理后为13;1也是一个判断一个不判断。-11此数与1的巧妙结合生出了如此神奇的公式。countif判断循环数据后把存在的数据加个%加上原来数据避免干扰其他数据,没有的值为0加原来的值还是为原来的数据,加个mode取最先等同概率的值。最后套用mod套路。
思路2:LSL1128xgw
公式1:=MOD(MODE(SUMIF($A2:E2,MOD($A2:E2,12)+1)*{0;9}+$A2:E2,S2%+E2),12)+1
公式2:=MOD(MODE(SUMIF($A2:E2,MOD($A2:E2,12)+{99;1})%+$A2:E2,S2%+E2),12)+1 此思路同为67字符,未上传至论坛,供坛友借鉴。
梦幻小丑
=MOD(MODE(COUNTIF($A2:E2,MOD($A2:E2,{12;0})+1)%+$A2:E2,E2+S2%),12)+1
循环结构用sumif,参数2的构造也是通用构造,处理在sumif后*{0;9} 一个为了mode得到第一个众数,一个为了得出的值与原来数据相加不造成影响乘以了一个9;mode借用判断和梦幻老师想到一块去了用s2%+e2来做处理。
思路3:opqazxc =MODE(MOD(N(OFFSET(E2,,MOD(COLUMN($F:J),1-COLUMN())))+ROW($12:$22),12)+1)
此思路排序方法很精妙,构造出offset第三参数,f2单元格公式中引用本身序列a:e,偏移后把得出结果先调至最前,利用row(12:22) 做众数处理
补充说明:row(12:22) 11个数是为了错位减少比他前面的数,已达到不能成为众数,只取达到成为总数的数。
丢丢老师加权处理方式在总结报告中有解析说明。
结合海鲜老师,我,和梦幻思路此题最简公式为:=MOD(MODE(sumif($A2:E2,$A2:E2+{1;-11})%+$A2:E2,s2%+E2),12)+1 60字符!
函数是常见函数但是处理确是千变万化。希望各位坛友在函数道路上尽量做到大道至简!
由于第一次做总结,有些不足之处望各位坛友见谅!
在此重新说明下:引用s列算是一种引用模拟数据列算是取巧的思路,如果没有模拟列引用L列会造成循环,此题按照正规写法s列不能引用,引用f$1.感谢丢丢老师,海鲜老师提醒。以后答题也会注意,不引用模拟结果,即使借用也不行。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
12
查看全部评分
-
|