ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [开_107]字符串末尾连续个数

[复制链接]

TA的精华主题

TA的得分主题

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

=LOOKUP(1,0/(MID(A1,ROW(INDIRECT("1:"&LEN(A1)-1)),1)<>MID(A1,ROW(INDIRECT("2:"&LEN(A1))),1)),LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))))

可能已经有人发了

QUOTE:

当字符串中只有一种字符时结果错误.

公式长度超过90个字符, 不能得分. -willin2000

[此贴子已经被willin2000于2007-10-4 10:51:59编辑过]

TA的精华主题

TA的得分主题

发表于 2007-10-4 11:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用xcd在2007-10-3 1:17:25的发言:

呵,仔细解读了版主以上的两段见解,我还是持不同意见。

我的原公式是:{=LOOKUP(LEN(A2),FREQUENCY(ROW($1:$98),IF(MID(A2,ROW($1:$98),1)<>MID(A2,ROW($2:$99),1),ROW($1:$98))))},公式中的行数98,可以将它想象为有限大的X值,但X值必须比LEN(A2)的值大,这点很重要,它将关系到公式的正确与否。

各抒已见而已,还望版主见谅!

QUOTE:
XCD兄,如果用下面的字符串(长度66))结果就不是4:

"EHH从从EHH从从EHH从从EHH从从EHH从从从从从从从从从从从从EHH从从EHH从从EHH从从000000开始 到340000"

不一样的原因和我减少虚拟长度是一个原理, 都是使查找过程放生了变化, 这也就是在无序是LOOUKP结果不确定的原因

理解了版主所举的特列情况,但可以有效规避使LOOKUP准确求值,将X值设为2049(所以上面说的“X值必须比LEN(A2)的值大”这句应改为“X值>2倍LEN值”,单元格最大字符数1024),通用公式如下:

{=LOOKUP(LEN(A2),FREQUENCY(ROW($1:$2049),IF(MID(A2,ROW($1:$2049),1)<>MID(A2,ROW($2:$2050),1),ROW($1:$2049))))}

[此贴子已经被作者于2007-10-4 20:33:52编辑过]

TA的精华主题

TA的得分主题

发表于 2007-10-4 11:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

=IF(LEN(A9)=1,1,LOOKUP(1,0/(MID(A9,ROW(INDIRECT("1:"&LEN(A9)-1)),1)<>MID(A9,ROW(INDIRECT("2:"&LEN(A9))),1)),LEN(A9)-ROW(INDIRECT("1:"&LEN(A9)))))

我觉得写函数不能单凭字符数来决定吧.主要看思路是否新颖,函数性质运用是否巧妙吧.如果是弯路导致的字符多当然是要排除的.但我觉得主要从思路上讲还是比较巧妙的.

这里运用了LOOKUP函数的特性,LOOKUP(参数1,参数2,参数3)中的参数2是0或者错误值,这样利用查找不到时返回最后一个0的特性.我是觉得比较巧妙的.昨天刚看到的.

汗,我是不是太贪心了,哈哈

QUOTE:
这里的"贪心"不是坏事, 而是一种钻研的态度. 希望大家多多"贪心" 呵呵.

字符串是"旺旺旺旺旺旺旺旺旺"时结果错误.

公式长度确实不是来决定思路是否新颖的依据, 限制的目的是排除:同一个思路,而只是把求解过程再复杂化的方法.

其实这是从右到左求第一个不相同的思路, 而26楼红金鱼已经用过了,变化的只是求最小值,而求最小值的方法上不是本题的考量目的,否则除了多种LOOKUP可以求得,至少还有10种以上. -willin2000

[此贴子已经被willin2000于2007-10-5 10:36:07编辑过]

TA的精华主题

TA的得分主题

发表于 2007-10-4 12:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

不知道有没有得分的机会了

=99-MAX((LEFT(RIGHT(" "&A2,ROW($1:$100)))<>RIGHT(A2))*(100-ROW($1:$100)))

QUOTE:

和楼上一样的原因,思路还是26楼, 所以除非求得位置的方法比26楼有优化才能得1分, 而99-MAX只是不同, 而不比MIN 优化.

就像我前面提到的,如果思路不一样, 即使没有优化也能得分,

请大家还是要把握住本题的考点, 反过来就是说,如果你的公式和前面相比的变化, 已经和本题无关,那通常不能得分. -willin2000

[此贴子已经被willin2000于2007-10-4 14:29:35编辑过]

TA的精华主题

TA的得分主题

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

第一类公式:方向查找与最后一个字符组成的字符串最大匹配法.

用RIGHT(A2,ROW($1:$10))得到一个字符数逐渐增多的字符串,REPT(RIGHT(A2),ROW($1:$10))产生一个只有最后一个字符的字符串,然后来求,后面的求解方法可以有几十种,本贴中规定使用类似思路(即属本类方法的)除非后面的求解方法有改进才能得分,如
2楼wdnn:           =MAX(IF(RIGHT(A2,ROW($1:$10))=REPT(RIGHT(A2),ROW($1:$10)),ROW($1:$10)))
5楼山菊花:         =COUNT(0/(RIGHT(A3,ROW($1:$1000))=REPT(RIGHT(A3),ROW($1:$1000))))

第二类公式:正向查找第一个和最后一个字符不匹配的位置.
如4楼yoka:        =LEN(A2)-MAX(IF(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)<>RIGHT(A2),ROW(INDIRECT("1:"&LEN(A2))))
如9楼northwolves: =LEN(A2)-MAX((MID(A2,ROW(OFFSET($A$1,,,LEN(A2))),1)<>RIGHT(A2))*ROW(OFFSET($A$1,,,LEN(A2))))
如34楼aichong   : =LEN(" "&A2)-MATCH(2,1/(MID(" "&A2,ROW(INDIRECT("1:"&LEN(A2))),1)<>RIGHT(A2))) (当然所加字符" "要避开可能的情况,如有全多空,则可以别的比如"猣".

第三类公式:错位比较最后一个字符不匹配的位置.
有31楼xcd:     {=MMULT(LARGE((MID(A2,ROW($1:$98),1)<>MID(A2,ROW($2:$99),1))*ROW($1:$98),{1,2}),{1;-1})}

第四类公式:长度比较法之一,在原字符串中去除最后一个字符后和原来的字符串(减去最后一个字符)比较.
如18楼胡剑0227:   =SUM(N(LEFT(A2,LEN(A2)-1)=SUBSTITUTE(A2,RIGHT(A2),,ROW($1:$99))))
如38楼胡剑0227:   =SUM(N(A1&RIGHT(A1)=SUBSTITUTE(A1,RIGHT(A1),REPT(RIGHT(A1),2),ROW(INDIRECT("1:"&LEN(A1))))))

第五类公式:计算去除最后一个字符的字符串为空的个数
35楼aichong:      =SUM(--(SUBSTITUTE(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2)))),RIGHT(A2),)=""))
36楼aichong:      =SUM(--(SUBSTITUTE(RIGHT(" "&A2,ROW($1:$999)),RIGHT(A2),)=""))

本期精彩答案是:

37楼aichong:      =MATCH("",SUBSTITUTE(RIGHT(" "&A2,ROW($1:$999)),RIGHT(A2),))

本期最具新意答案是:

31楼XCD{=MMULT(LARGE((MID(A2,ROW($1:$98),1)<>MID(A2,ROW($2:$99),1))*ROW($1:$98),{1,2}),{1;-1})}

由于本版规定一题最多得5分,所以不能再为两位加分了哦.

当然这是国庆送分题,所以打分时比较松,有些答案用了类似的思路,在下一步的求解过程中虽无明显改进,但如果求解方法有一定参考价值也有给分的.

[此贴子已经被作者于2007-10-24 11:56:25编辑过]

TA的精华主题

TA的得分主题

发表于 2012-6-4 19:39 | 显示全部楼层
  1. =MATCH(1=1,LEFT(RIGHT("丂"&A2,ROW($1:$99)))<>RIGHT("丂"&A2),)-1
复制代码
请版主检查。

48函数 字符串尾连续个数willin2000.zip

4.51 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2012-6-5 06:57 | 显示全部楼层
swl4561255 发表于 2012-6-4 19:39
请版主检查。
  1. =MATCH(,0/(REPT(RIGHT(A2),ROW($1:$99))=RIGHT(A2,ROW($1:$99))))
复制代码

TA的精华主题

TA的得分主题

发表于 2012-6-10 08:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-27 21:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. =MAP(A2:A17,LAMBDA(s,LET(_a,RIGHT(s,SEQUENCE(LEN(s))),_b,MAP(_a,LAMBDA(x,ROWS(UNIQUE(MID(x,SEQUENCE(LEN(x)),1))))),MATCH(1,_b))))
复制代码
image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-15 01:25 , Processed in 0.037857 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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