ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 函数与公式] [第114期]根据需要提取字符.

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-27 15:54 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 willin2000 于 2016-1-2 19:01 编辑


竞赛结束时间:正确答案满5人并且时间到2016/1/1. 或者时间到2016/3/1.


特别奖励:80字符以下03版公式得5分!!!


本帖子中包含更多资源

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

x

评分

11

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-11-28 16:17 | 显示全部楼层
本帖最后由 象山海鲜 于 2015-11-30 14:37 编辑

没有好办法,凑个不是办法的办法
开启迭代计算100次
C1
  1. =MOD(C1,100)+1
复制代码


C2 144字符
  1. =IF(OR(MATCH(C2,{0,"","0","a","吖"})=B2*{1;0}+2),C2&MID(A2,SMALL((MATCH(MID(A2,ROW(A:A),1),{"","0","a","吖"})-1<>B2)/1%+ROW(A:A),LEN(C2)+1),1),"")
复制代码
A列数据改变有错误~ 此方案再考虑!!

答案暂定为:
开启迭代计算100次
C1
  1. =MOD(C1,100)+1
复制代码
C2
  1. =IF(C$1<2,,C2)&MID(A2,C$1,MATCH(MID(A2,C$1,1),{"","a","吖"})=B2)
复制代码


{:soso_e157:}{:soso_e152:}
{:soso_e163:}{:soso_e163:}{:soso_e163:}{:soso_e163:}


评分

11

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-11-28 22:32 | 显示全部楼层
本帖最后由 丢丢表格 于 2015-12-4 08:18 编辑
  1. C2=IF(C$1<2,,C2)&MID(A2,C$1,MATCH(MID(A2,C$1,1),{"","a","吖"})=B2)
复制代码
       C1 =(C1<100)*C1+1           启用迭代 100 次计算

    (附件就不再上传了)








评分

10

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-11-29 16:57 | 显示全部楼层
本帖最后由 看见星光 于 2015-11-29 19:24 编辑

2015年的尾巴了。。。迭代计算2015下。
C1开关公式:
  1. =IF(C1+1>2015,0.1,C1+1)
复制代码

C2等:
  1. =IF(C$1<1,"",C2&IF(MMULT(1*(MID(A2,C$1,1)>={"0","a","吖"}),{1;1;1})=B2,MID(A2,C$1,1),""))
复制代码
或:
  1. =IF(C$1<1,"",C2&IF(MATCH(MID(A2,C$1,1),{"";"0";"a";"吖"})-1=B2,MID(A2,C$1,1),""))
复制代码
80字符了,我还能减什么,感觉有点奇怪,之前居然套了SUM。。郁闷。。。
再减些70:
  1. =IF(C$1<1,"",C2&MID(A2,C$1,MATCH(MID(A2,C$1,1),{"";"0";"a";"吖"})-1=B2))
复制代码





本帖子中包含更多资源

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

x

评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-1 10:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 cmxxccxx 于 2015-12-2 11:30 编辑

不知道这样算不算达成题目要求:(附件结果测试是可以的)
文件选项--公式---启用迭代计算,次数50,C1做为辅助,输入
  1. =MOD(C1,50)+1
复制代码


C2输入公式,下拉
  1. =IF(C$1>1,C2,)&IF(1+SUM(N(MID(A2,C$1,1)>{"9","Z"}))=B2,MID(A2,C$1,1),)
复制代码
  1. C2公式字符数70
复制代码
得到最后所有要求的结果, 改变参数也是可以变更答案


本帖子中包含更多资源

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

x

评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-1 16:19 | 显示全部楼层
C2=IF(LEN(C$1)*LEN(A2),T(C2)&IF(MATCH(MID(A2,LEN(C2)+1,1),{"","0","A","吖"})-1=B2,MID(A2,LEN(C2)+1,1),CHAR(9)),"")
开迭代计算,50(最大字数)次+。
C1为控制,平时为空,需要计算时,C1数组公式:
=SUM(LEN(C2:C31))
(这样C1才能在C2以下重算时重算,以便使C2以下再重算,形成多次迭代,要不一次就停了)

然后是BUG:
1、字符串和版主要求只是看上去一致,实际有不可见字符,要检验的话可以套CLEAN,不过如果是要字符串完全一样那就当没分了;
2、不管哪儿重算貌似C列的都会跟着重算,然后字符出现一些偏差,毕竟迭代计算确实不怎么太熟……
3、A、B列变化时,C列也不能直接正确计算,需要先清空C1再重新填入数组=SUM(LEN(C2:C31)),相当于每次改变A、B列要重启一遍迭代。

基本来说是个BUG满满的一次性公式,然后也没有别的思路了,等等看楼上楼下老师的答案了。

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-2 21:33 | 显示全部楼层
本帖最后由 chrong007 于 2015-12-3 18:18 编辑

不知道啥能减到80字符。开启迭代.C1<50时F9刷新一下。
C1=MOD(C1+1,199)
C2=IF(C$1,C2&IF((MID(A2,C$1,1)>=TEXT(B2-2,"吖;!0;A"))*(MID(A2,C$1,1)<=TEXT(B2-2,"座;9;z")),MID(A2,C$1,1),""),"")

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-3 10:23 | 显示全部楼层
本帖最后由 nccuiyehua 于 2015-12-4 16:09 编辑

C1单元格
  1. =IF(C1>60,61,C1+1)
复制代码
C2单元格
  1. =IF(IF(C$1>LEN(A2),3,IF(CODE(MID(A2,C$1,1))>42000,2,INT(CODE(MID(A2,C$1,1))/65)))<>(B2-1),SUBSTITUTE(IF(C$1=1,A2,C2),MID(A2,C$1,1),),IF(C$1=1,A2,C2))
复制代码
精简一下,130个字符,力争能多拿点分。
  1. =SUBSTITUTE(IF(C$1=1,A2,C2),IF(IF(C$1>LEN(A2),,IF(CODE(MID(A2,C$1,1))>42000,3,INT(CODE(MID(A2,C$1,1))/65)+1))=B2,,MID(A2,C$1,1)),)
复制代码
用LOOKUP函数判断,再缩短些长度,117个字符
  1. =SUBSTITUTE(IF(C$1=1,A2,C2),IF(IF(C$1>LEN(A2),4,LOOKUP(CODE(MID(A2,C$1,1)),{48,1;58,2;123,3}))=B2,"",MID(A2,C$1,1)),)
复制代码
思路:
1. 用lookup+CODE(MID(A2,C$1,1))判断字符类别,1为数字,2为字母,3为汉字
2. SUBSTITUTE( C2,MID(A2,C1,1),)来对不符合要求的字符进行替换
3. 利用C1进行循环引用并替换
4. 以上是用减法去除不符合要求的字符,还打算用加法,不断添加符合要求的字符。遇到问题是1不知道停止,每计算一次都重新增加一遍。2强制由0开始时又往往跳过第一个字符。没法得到正确的结果。
我已经完成的公式如下:=IF(C$1=1,"",C2&IF(IF(C$1>LEN(A2),4,LOOKUP(CODE(MID(A2,C$1,1)),{48,1;58,2;123,3}))=B2,MID(A2,C$1,1),""))   ,有兴趣的可以继续讨论研究。
首次参加技术竞赛,请版主老师点评!!



评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-4 14:27 | 显示全部楼层
本帖最后由 swyrlbq 于 2015-12-5 06:47 编辑

感觉要用迭代计算。所以需要操作,以下公式操作如下;(03版)
先设置迭代计算99次,再在C1输入公式;=IF(C1>98,,C1+1)回车后,把迭代计算改为100
然后(为了记录答题思路,贴上过程中的几个公式,以最后公式为答案)

公式一(110字符)
C2=IF(C$1,C2&MID(A2,SMALL(IF(LOOKUP(MID(A2,ROW($1:99),1),{"","0","A","吖";0,1,2,3})=B2,ROW($1:99),99),C$1),1),"")


公式二(97字符)
C2=IF(C$1,C2&MID(A2,SMALL(IF(MATCH(MID(A2,ROW($1:99),1),{"","A","吖"})=B2,ROW($1:99),99),C$1),1),"")
下拉。

公式三(72字符)
C2=IF(C$1,C2&IF(MATCH(MID(A2,C$1,1),{"","A","吖"})=B2,MID(A2,C$1,1),""),"")





评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-12-5 22:36 | 显示全部楼层

辅助c1:
  1. =MOD(1+C$1,100)
复制代码


c2:
  1. =IF(OR(C$1=1,C2=0),A2,IF(AND(MID(A2,(C$1<1)+C$1,1)>=CHOOSE(B2,"0","a","阿"),MID(A2,(C$1<1)+C$1,1)<=CHOOSE(B2,"9","z","々")),C2,SUBSTITUTE(C2,MID(A2,(C$1<1)+C$1,1),)))&""
复制代码

评分

8

查看全部评分

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

本版积分规则

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

GMT+8, 2024-3-29 10:24 , Processed in 0.071042 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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