2016-07-15 94 views
0

这里提取单个细胞的文字是我想要做的事:解析或电子表格中的

与具有类似“收据28.19沃尔玛”或“收据117.58亚马逊”,我会一个单元开始喜欢能够将美元金额提取到不同的单元格。所以一个函数将分别在每个单元格中放置28.19和117.58。

我知道你可以使用MID函数来提取部分文本字符串,如果你知道它从哪里开始以及它有多长,但是这里的问题可能是不同的长度。例如,28.19的长度是5,但117.58的长度是6,所以我不能使用MID总是获得总美元数量,因为所需子字符串的长度并不总是相同的。

如果有人知道解决方案,请回复。此外,如果有解决方案可以在谷歌电子表格中使用,那也是可以接受的。我假设很多功能都是从Excel到谷歌表单相同的。

+0

您仍然可以确定如果您知道文本字符串的长度,即其始终为“收据*。## [存储]”,则数字的长度。您可以通过从单元格字符串的总长度中减去文本字符的总数(如果已知)来计算长度。不知道还有什么要添加在这里。你尝试过什么公式? – nbayly

+0

在这个问题中引用了一个非常整洁的公式 - 不确定它来自哪里http://stackoverflow.com/questions/37721709/extract-nth-occurance-number-from-string/37730872#37730872(没有人喜欢我的VBA努力!),但如前所述,如果前面总是有“收据”,而且之后有空间,则可以大量简化它。 –

+0

请参阅下面的简单公式谷歌床单 –

回答

1

你想要n在单元格中给出的字符串中的两个空白空间之间。所以,像“收据2356.14789亚马逊”这样的字符串,我们必须找到空白的pos。

现在,找到字符串的第n个空间中的位置,我们可以用这些公式

1st Position : =find(" ",a1) 
2nd Position : =find(" ",a1,find(" ",a1)+1) 
3rd Position : =find(" ",a1,find(" ",a1,find(" ",a1)+1)+1) 
........... 
Nth position : =find(" ",a1,find(" ",a1,find(" ",a1,find(" ",a1,......n-1 times find(" ",a1)+1)+1)+1.....n-1 times +1) 

因此,使用上述公式发现第一和第二空白字符串:

我们的价值观B1和C1中的8和19是字符串中空格的位置。现在,我们期望的结果必须是,让字符串是当时的

s with removal of "receipt " & " amazon" 

现在我们可以使用MID函数来获取输出。 MID函数:=MID(text,start_num,num_chars) 从文本字符串的中间返回字符,给定起始位置和长度。因此,我们有起始位置,即第一个空白位置(8),我们必须计算num_chars即长度。

要计算长度,我们有以下的计算来做:

subtract the len of "amazon" from total len of string 
length of substring s2 : =len(a1)- FIND(" ",A1,FIND(" ",A1)+1) which is second blank pos. 

add len of sub string1 and sub string2 
s2 + FIND(" ",A1) 

现在,使用中期功能,我们会得到,

=MID(A1,FIND(" ",A1),F1,(LEN S1+ LEN S2)) 

现在修剪这个值,因为它会被包含在一个空白开始“收据”。

=trim(MID(A1,FIND(" ",A1),F1,(LEN S1+ LEN S2))) 

enter image description here

所以,最终的公式如下:

=TRIM(MID(A1,FIND(" ",A1),LEN(A1)-FIND(" ",A1,FIND(" ",A1)+1)+FIND(" ",A1))) 

第2种方法:

使用与划界选择空间。快捷键ALT-> A-> A-> E,分隔选择空格,然后输入。

enter image description here

输出:

enter image description here

+0

将文本调用到列上。这也很好,因为你有三个(或很多)类别为你快速拆分,然后你可以对它们进行排序,等等。 – BruceWayne

+1

感谢您的详细解答!我知道文章到列的东西,但正在寻找一种方法来做到这一点,自动输入新的值。真棒解释,我发现有很多方法可以得到相同的结果(包括你的答案和其他答案)。无论哪种方式,它都是如何实施这样的公式的学习经验。谢谢! – chen

+0

不客气卡森亨德里克斯 – aspan88

0

请考虑以下事项。看看我是如何一步一步找到答案的。 =MID(A3,SEARCH(" ",A3)+1,SEARCH(" ",MID(A3,SEARCH(" ",A3)+1,LEN(A3)))-1)。如果你想了解更多,请结帐这个免费课程Len(), Search(), Trim()(链接在10天内到期)。

Cruter complex formula writing... step by step

2

如果你能保证格式是[word][space][number][space][word],那么这应该工作:

From here

=TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))), (2-1)*LEN(A1)+1, LEN(A1)))

A1具有 “receipt 28.19 walmart

+0

这是一个伟大的公式!感谢分享! – CRUTER

+0

真的,一个伟大的公式,其格式为[字符串] [空白] [数字] [空白] [字符串]以提取数字部分的所有情况。 – aspan88

0

最简单的方法和这样做的我个人最喜欢的方法是使用正则表达式提取物:

=REGEXEXTRACT ("YOUR TEXT", "\D+(\d+\.?\d+)\D+?") 

这基本上是说你的字符串开始与任何数字的非数字字符\D+后跟一些数字\d+,这可能会或可能不包括与另一位小数,后面可能跟着更多的非数字字符

围绕数字模式括号是什么引导它来提取该值仅

注意这是谷歌表特别是因为你说你还想要一个在那里

enter image description here

如果您需要能够总结你提取的文本你可以把它包装的价值:

=VALUE(REGEXEXTRACT (A1 , "\D+(\d+\.?\d+)\D+?")) 

或获得更大的便捷,如果你有值的整列,你可以输入一个公式,将运行你的正则表达式一路下跌:

=ARRAYFORMULA(IF(LEN(O1:O)>0,VALUE(REGEXEXTRACT (O1:O , "\D+(\d+\.?\d+)\D+?")),)) 

enter image description here

+0

你的公式返回一个字符串。如果OP需要数字值,则可以用各种方式进行转换 - 在双精度前加前缀;以'1 *'或'0 +'为前缀,使用'VALUE'功能等。 –

+0

我修正了这个问题 - thx @RonRosenfeld –

+0

另外,假设第一个数字始终是价格的开始,可以简化为'\ d +(?:\。\ d +)?',或者如果需要,您可以使价格字符串具有必需的两位小数。 –