|
小菜鸟
各位前辈,有没有一个函数让B2等于50,C2等于21.6,D2等于3;不用人工一个个输入
中菜鸟 9:56:42
B3=LEFT(A3,2)
C3=MID(A3,3,4)
D3=RIGHT(A3,1)
但有缺陷,要数字的位数不变,如果A3变为115*7*11.6,取数就不对了。
其实最简单也靠谱的做法是把整个A列复制到另外一个表,然后数据分列,间隔符号是*,一列分拆为3列,然后拷回去。
高人 10:14:32
以前有弄过类似的函数,但是比较长,记不住。
中菜鸟 10:15:03
最简单的是数据分列
小菜鸟 10:15:25
貌似可行
高人
10:23:12
b3==--MID(SUBSTITUTE($A3,"*",REPT(" ",99)),COLUMN(A3)*99-98,99)
再拖行到C D列
解决
中菜鸟 10:24:18
果然牛,这个够复杂
高人 10:24:41
中菜鸟 10:27:57
有些函数很少用到,学习一下。
小菜鸟 10:39:41
路人甲 10:50:44
牛,
路人乙 10:54:05学习了牛
高人
10:57:50
我向大家学习了
11:14:24
中菜鸟 11:14:24
学习分析
连减是文本转数值
MID是取字符串中间值
REPT是重复制造99个空格
SUBSTITUTE($A3,"*",REPT(" ",99))是将字符串中的*号置换为99个空格变成如“50 21.6 3”这样很长的字符串,这个必要性还没看懂。
然后COLUMN(A3)是确定取数的次序,B列是第一个,就是取到了1,1*99-98,那还是1,也就是从第一个开始取起,连取99个,即“50“后面有99个空格的一个长字符串(总长度是2+99=101位);
然后通过--运算符,转为数字50
嗯,没问题。
接下来是C3=--MID(SUBSTITUTE($A3,"*",REPT(" ",99)),COLUMN(B3)*99-98,99),变化是词序变为2了,2*99-98=100,从字符串的第100个字符开始取数,但不确定第一个要取的数是几位
哦,看懂为什么要加那么多空格了。
取出来的数是“ 21.6 ”
然后又得到了数值21.6
明白了,这么多空格就是因为不确定中间那个数值的字符串的长度,所以就像弄个大的罩子去罩,罩到了很长的一段字符串,然后用--,把空格像水一样筛掉。留下的就是要的“那条小鱼”,我们要的数值。
很巧妙,想出来的人太聪明了!佩服!
路人甲 11:17:16
写程序的人,这个应该是小KS
中菜鸟 11:24:57
这个公式解决了一个通用性,只要代表数字的单段字符串小于99,只要把*号换成其中的任何分隔符,都能适用。
但是,我还是要说一句,哲学中有个“奥康姆剃刀”——由中世纪经院哲学家奥康姆提出。它的基本命题是“如无必要,勿增实体”,即可以用少数几个原理或原则来说明事物的时候,却用了许多的原理或原则,那就是浪费。
解决问题的途径应该尽可能简化,既然数据分列功能可以轻松搞定这个“中间用通用分隔符号的数字字符串”分数问题,何必再去搞这么复杂。浪费脑细胞。
大道至简。
据说爱因斯坦一开始推算出质能转换方程式时,是一个很复杂的算式,用力很多包括广义积分在内的很多高等数学技巧,以及很多限定条件。
然后他又花了很多时间去简化,最后推出“E=MC2”这个小学生都能看懂的公式。
鲁迅也说,文字能减则减,减至不能再减,才能去发表,否则就是在卖弄自己的文学技巧。
|
|