Excel公式求助!!先谢过了!

回复: Excel公式求助!!先谢过了!

chris_cc
 
回复: Excel公式求助!!先谢过了!

多谢多谢!其实现在我打算用公式的原因也在于我觉得其实还是有一点规律可以利用,但年纪大了,逻辑思维混乱,搞不清楚前后的关系。。。

我觉得的规律大概是这样的,

就是Column B肯定是以CLAY或者SAND或者SILT三个词开头的(虽然后面的内容和内容的长度都是不一样的)(其实还有极少数类似上面第四行那种例外,三个词一个都没有,但是我大概看了一下,手动修改的工作量不是很大。。。就决定忽略掉第四行这种可能,先处理1到3行和第5行);

右边都有一个%可以作为MID函数的被减数(即Search("%",A11,1),而之前的内容基本都没有%,也就是说右边那个%是唯一的)。我其实想取到右边第二个空格前面一位,但是由于右边字符数的不确定,我打算先以%为界,取出来大部分内容后再处理空格和%之间的内容;

接下来就是在我的MID函数中,我要用到三个不同的Search()内容,而Mid函数本身就有三个参数,其中两个都是不确定的。。。所以就是大概下面这个样子。。

Mid(A1, Search("CLAY",A1,1),Search("%",A1,1)-3-Search("CLAY",A1,1))
Mid(A1, Search("SAND",A1,1),Search("%",A1,1)-3-Search("SAND",A1,1))
Mid(A1, Search("SILT",A1,1),Search("%",A1,1)-3-Search("SILT",A1,1))

这样三种可能的叠加,用ISERROR函数?我现在混乱的就是ISERROR跟MID的函数是什么逻辑关系?哪个在外面哪个在里面?。。。。。。。。。

烦请指点,谢谢!!:wdb5::wdb5::wdb2:
按照你的思路和要求,我稍微做了修改,但是如你所说第四行信息如果不符合你自己手动即可。现在贴如下公式:=IF(ISNUMBER(FIND("CLAY",A1)),MID(A1,FIND("CLAY",A1,1),FIND("%",A1,1)-3-FIND("CLAY",A1,1)),IF(ISNUMBER(FIND("SAND",A1)),MID(A1,FIND("SAND",A1,1),FIND("%",A1,1)-3-FIND("SAND",A1,1)),IF(ISNUMBER(FIND("SILT",A1)),MID(A1,FIND("SILT",A1,1),FIND("%",A1,1)-3-FIND("SILT",A1,1)),IF(ISNUMBER(FIND("Too",A1))," Too deep to be described","N/A"))))
 
回复: Excel公式求助!!先谢过了!

多谢大侠!

但是就是你最后说的这个问题,我觉得很棘手,要提取字符串的长度不是固定的,我现在定义为从%(基本上只有一个,如果有多,我手动修改工作量不会很大)到左侧三个关键词CLAY,SAND,SILT之间字符串的长度,也就是我上面提到的search()-search(),而这里面又存在一个内嵌的iserror关系,也就是三个关键词不知道哪一个会出现,我现在就是被这种嵌套关系给搞晕了。。。:wdb7:

1) 你的提取字符窜的方法是对的,把他用上即可。
2)Search()-Search()仅仅出现在MID中。而之前, Search已经被检验过了,有ERROR的话,都不会用到MID了,直接就N/A了。
3)三个关键词都被检查了,没有的话,才用N/A。
4)应该不会出现两个或以上关键词同时出现的情况。 :wdb23:
 
回复: Excel公式求助!!先谢过了!

我也分享一下我的过程(这可以不管关键字,只要规律一致):
1)第一步我是把后面的数字去掉,得到前半部分字符串,放到B栏
=MID(A2,1,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))-1))-1)

2)在前半部分字符串找到最后一个数字,从它后面开始的字符串就是所求结果,放到C栏
=MID(B2,LOOKUP(9,--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1),ROW(INDIRECT("1:"&LEN(B2))))+1,999)

由于不太懂Excel公式,于是百度了一下:
先搜索“Excel字符串取最后一个空格”,得到http://www.excelpx.com/thread-288080-1-1.html,看到帖子最后一篇是=MID(A2,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,99)
于是学习了Substitute函数,改造成自己的取倒数第二个空格
再搜索“Excel字符串找最后一个数字”,找到http://club.excelhome.net/thread-606389-1-1.html
这个就可以直接用了。
虽然一知半解,但我总相信靠百度搜索Excel知识,一般还是可以解决问题的。
:)
 
回复: Excel公式求助!!先谢过了!

当然合并成一个公式也可以,就是嫌长:)
我也分享一下我的过程(这可以不管关键字,只要规律一致):
1)第一步我是把后面的数字去掉,得到前半部分字符串,放到B栏
=MID(A2,1,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))-1))-1)

2)在前半部分字符串找到最后一个数字,从它后面开始的字符串就是所求结果,放到C栏
=MID(B2,LOOKUP(9,--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1),ROW(INDIRECT("1:"&LEN(B2))))+1,999)

由于不太懂Excel公式,于是百度了一下:
先搜索“Excel字符串取最后一个空格”,得到http://www.excelpx.com/thread-288080-1-1.html,看到帖子最后一篇是=MID(A2,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,99)
于是学习了Substitute函数,改造成自己的取倒数第二个空格
再搜索“Excel字符串找最后一个数字”,找到http://club.excelhome.net/thread-606389-1-1.html
这个就可以直接用了。
虽然一知半解,但我总相信靠百度搜索Excel知识,一般还是可以解决问题的。
:)
 
回复: Excel公式求助!!先谢过了!

按照你的思路和要求,我稍微做了修改,但是如你所说第四行信息如果不符合你自己手动即可。现在贴如下公式:=IF(ISNUMBER(FIND("CLAY",A1)),MID(A1,FIND("CLAY",A1,1),FIND("%",A1,1)-3-FIND("CLAY",A1,1)),IF(ISNUMBER(FIND("SAND",A1)),MID(A1,FIND("SAND",A1,1),FIND("%",A1,1)-3-FIND("SAND",A1,1)),IF(ISNUMBER(FIND("SILT",A1)),MID(A1,FIND("SILT",A1,1),FIND("%",A1,1)-3-FIND("SILT",A1,1)),IF(ISNUMBER(FIND("Too",A1))," Too deep to be described","N/A"))))

非常感谢!!按照你的思路,我稍微改了一下,发现基本上差不多了,你里面唯一有一点问题的就是-3,因为%前面的字符数量不均等,我稍微改了一下如下,

=IF(ISNUMBER(FIND("CLAY",A12)),MID(A12,FIND("CLAY",A12,1),LEN(A12)-FIND("CLAY",A12,1)+1),IF(ISNUMBER(FIND("SAND",A12)),MID(A12,FIND("SAND",A12,1),LEN(A12)-FIND("SAND",A12,1)+1),IF(ISNUMBER(FIND("SILT",A12)),MID(A12,FIND("SILT",A12,1),LEN(A12)-FIND("SILT",A12,1)+1),IF(ISNUMBER(FIND("Too",A12)),MID(A12,FIND("Too",A12,1),LEN(A12)-FIND("Too",A12,1)+1),"N/A"))))

这样的话,我就把所有关键词及之后的内容取了出来,然后再加两列,分别取出最后两列的内容,

=RIGHT(A12,LEN(A12)-FIND("|",SUBSTITUTE(A12," ","|",LEN(A12)-LEN(SUBSTITUTE(A12," ",""))-1))+1)

=LEFT(I12,LEN(J12)-LEN(L12))

这样三列的内容就都出来了。但是还是基于你的公式为前提,提示了我很多。非常感谢!!:wdb6::wdb17:
 
回复: Excel公式求助!!先谢过了!

1) 你的提取字符窜的方法是对的,把他用上即可。
2)Search()-Search()仅仅出现在MID中。而之前, Search已经被检验过了,有ERROR的话,都不会用到MID了,直接就N/A了。
3)三个关键词都被检查了,没有的话,才用N/A。
4)应该不会出现两个或以上关键词同时出现的情况。 :wdb23:

非常感谢!我开始就是在这点上混淆了,关键词搜索和选择字符串长度的逻辑关系,经过这里面朋友的提示,总算搞清楚了,呵呵,谢谢!
 
回复: Excel公式求助!!先谢过了!

我也分享一下我的过程(这可以不管关键字,只要规律一致):
1)第一步我是把后面的数字去掉,得到前半部分字符串,放到B栏
=MID(A2,1,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))-1))-1)

2)在前半部分字符串找到最后一个数字,从它后面开始的字符串就是所求结果,放到C栏
=MID(B2,LOOKUP(9,--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1),ROW(INDIRECT("1:"&LEN(B2))))+1,999)

由于不太懂Excel公式,于是百度了一下:
先搜索“Excel字符串取最后一个空格”,得到http://www.excelpx.com/thread-288080-1-1.html,看到帖子最后一篇是=MID(A2,FIND("@",SUBSTITUTE(A2," ","@",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))+1,99)
于是学习了Substitute函数,改造成自己的取倒数第二个空格
再搜索“Excel字符串找最后一个数字”,找到http://club.excelhome.net/thread-606389-1-1.html
这个就可以直接用了。
虽然一知半解,但我总相信靠百度搜索Excel知识,一般还是可以解决问题的。
:)

当然合并成一个公式也可以,就是嫌长:)

非常感谢!!我开始觉得这里面最麻烦的就是各个关键词之间的逻辑关系,因为先用筛选分别求解当然可以,但是就是很麻烦,且容易有遗漏。组成一个公式就要首先搞清楚它们之间的逻辑关系。

我也是google出来的一些思路,加上这边你们的一些good idea,才算基本解决了这个问题。:wdb6:

不过还是打算有时间学一下VBA。。。发现这个才是治标治本的办法。。。就是不知道这东西有多难学。。。:wdb5:
 
回复: Excel公式求助!!先谢过了!

想要学,肯定不难,只需决心:)
学了不用,忘得快。
我之前学了一点函数,长期不用,现在都得靠查百度。
之前也学了一点VBA,也是没怎么用,现在基本忘光。如果工作一直和Excel打交道,学习一下提高效率很有好处的。
非常感谢!!我开始觉得这里面最麻烦的就是各个关键词之间的逻辑关系,因为先用筛选分别求解当然可以,但是就是很麻烦,且容易有遗漏。组成一个公式就要首先搞清楚它们之间的逻辑关系。

我也是google出来的一些思路,加上这边你们的一些good idea,才算基本解决了这个问题。:wdb6:

不过还是打算有时间学一下VBA。。。发现这个才是治标治本的办法。。。就是不知道这东西有多难学。。。:wdb5:
 
回复: Excel公式求助!!先谢过了!

写个程序,先把excel导出,处理后倒入,java .net都可以
直接套用excel 公式,很容易误点击破坏公司
 
回复: Excel公式求助!!先谢过了!

写个程序,先把excel导出,处理后倒入,java .net都可以
直接套用excel 公式,很容易误点击破坏公司
如果用vba,可以用宏可以解决的。
将这些
工作簿放到一个文件夹(只有这些Excel文件,且若打开某一文件,数据就能看见——即不用点其他sheet),建一新Excel,也存到该文件夹。仅打开该新Excel,同时按Alt+F11进入宏界面,点菜单的插入,模块,粘贴代码,然后按F5运行即可。
 
回复: Excel公式求助!!先谢过了!

非常感谢!!按照你的思路,我稍微改了一下,发现基本上差不多了,你里面唯一有一点问题的就是-3,因为%前面的字符数量不均等,我稍微改了一下如下,

=IF(ISNUMBER(FIND("CLAY",A12)),MID(A12,FIND("CLAY",A12,1),LEN(A12)-FIND("CLAY",A12,1)+1),IF(ISNUMBER(FIND("SAND",A12)),MID(A12,FIND("SAND",A12,1),LEN(A12)-FIND("SAND",A12,1)+1),IF(ISNUMBER(FIND("SILT",A12)),MID(A12,FIND("SILT",A12,1),LEN(A12)-FIND("SILT",A12,1)+1),IF(ISNUMBER(FIND("Too",A12)),MID(A12,FIND("Too",A12,1),LEN(A12)-FIND("Too",A12,1)+1),"N/A"))))

这样的话,我就把所有关键词及之后的内容取了出来,然后再加两列,分别取出最后两列的内容,

=RIGHT(A12,LEN(A12)-FIND("|",SUBSTITUTE(A12," ","|",LEN(A12)-LEN(SUBSTITUTE(A12," ",""))-1))+1)

=LEFT(I12,LEN(J12)-LEN(L12))

这样三列的内容就都出来了。但是还是基于你的公式为前提,提示了我很多。非常感谢!!:wdb6::wdb17:
能对楼主有帮助就非常开心了。希望今后多切磋,我也是知道的不多,也是现学现用。前段时间我的manager叫我改一个项目的好多excel里面的title block信息,实在不想一个个打开改,就学习用程序做,很是有意思!
 

注册或登录来发表评论

您必须是注册会员才可以发表评论

注册帐号

注册帐号. 太容易了!

登录

已有帐号? 在这里登录.

顶部