如何拆分数字和文本字符串从Excel中
很多时候,我从现场和服务器获取混合数据进行分析。该数据通常很脏,列中混有数字和文本。在分析之前进行数据清理时,我将数字和文本放在不同的列中。在本文中,我将告诉您如何实现。
方案:
因此,我们在Exceltip.com上的一位朋友在评论部分提出了这个问题。 “如何使用excel Formula分隔文本之前和文本结尾的数字。例如125EvenueStreet和LoveYou3000等。”要提取文本,我们使用RIGHT,LEFT,MID和其他文本功能。我们只需要知道要提取的文本数即可。在这里,我们将首先进行相同的操作。
当数字在字符串末尾时,从字符串中提取数字和文本对于上面的示例,我已经准备了这张工作表。在单元格A2中,我有字符串。在单元格B2中,我想要文本部分,而在C2中,我想要数字部分。
所以我们只需要知道数字从哪里开始。然后,我们将使用Left等功能。因此,为了获得第一个数字的位置,我们使用以下通用公式:
获取字符串中第一个数字位置的通用公式:
=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},String_Ref&"0123456789")
这将返回第一个数字的位置。
对于上面的示例,可以在任何单元格中编写此公式。
=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A5&"0123456789"))
提取文本部分
它会返回15作为第一个在Text中位于第15位的数字。稍后再解释。
现在,要获取文本,我们只需要从字符串中获取15-1个字符即可。因此,我们将使用`link:/ excel-text-extract-text-from-a-string-in-excel-using-excels-left-and-right-function [LEFT function to extract text。]“
从左
提取文本的公式
=LEFT(A5,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A5&"0123456789"))-1)
在这里,我们只是从MIN(link:/ text-excel-search-function [SEARCH]
(\ {0,1,2,3,4,5,6,7,8,9, },A5&“ 0123456789”))。
提取数字部分
现在获取数字,我们只需要从找到的第一个数字中获取数字字符。因此,我们计算了字符串的总长度,并减去找到的第一个数字的位置,并将其加1。简单。是的,这听起来很复杂,很简单。
从右边
提取数字的公式
=RIGHT(A5,LEN(A5)-MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A5&"0123456789"))+1)
在这里,我们只是使用`link:/ len-functio [LEN function]获得了字符串的总长度,然后减去了第一个找到的数字的位置,然后将其加1。这样就得出了总数。在此处了解有关/// excel-text / extract-text-from-a-string-in-excel-using-excels-left-and-right-function.html [使用Excel的LEFT和RIGHT函数提取文本的信息。]
因此,左右功能部分很简单。棘手的部分是MIN和SEARCH部分,它使我们找到第一个数字的位置。让我们了解一下。
工作原理
我们知道LEFT和RIGHT功能是如何工作的。我们将探索该公式的主要部分,该部分获得找到的第一个数字的位置,即:
MIN(link:/ text-excel-search-function [SEARCH]
(\ {0,1,2,3,4,5,6,7,8,9},String&“ 0123456789”)
SEARCH(’text’,’string’)函数接受两个参数,第一个是文本
在搜索中,第二个要搜索的字符串。
在此处,在文本位置,我们有一个从0到9的数字数组。在字符串位置,我们有一个字符串,该字符串与“ 0123456789“使用&*运算符。为什么?我会告诉你。
-
数组\ {0,1,2,3,4,5,6,7,8,9}中的每个元素都会
-
**如果未找到任何值,将导致错误,因此所有公式均将导致错误。为避免这种情况,我们将文本中的数字“ 0123456789”串联起来,以便总能找到字符串中的每个数字。因此不会造成任何问题。
-
现在,MIN函数从SEARCH函数返回的数组中返回最小值。该最小值将是字符串中的第一个数字。现在使用此NUMBER和LEFT和RIGHT函数,我们可以拆分文本和字符串部分。
让我们以我们的示例为例。在A5中,我们具有包含街道名称和门牌号的字符串。我们需要将它们分隔在不同的单元格中。
首先,让我们看看如何获得字符串中第一个数字的位置。
MIN(SEARCH(\ {0,1,2,3,4,5,6,7,8,9},A5&“ 0123456789”)):这将转换为MIN(SEARCH(\ {0,1,2, 3,4,5,6,7,8,9},“ Monta270123456789 *”)))
现在,如前所述,搜索将在Monta270123456789中搜索数组\ {0,1,2,3,4,5,6,7,8,9}中的每个数字,并以数组形式返回其位置。返回的数组将为\ {8,9,6,11,12,13,14,7,16,17}。怎么样?
将在字符串中搜索0。发现在8位置。因此,我们的第一个元素是8。请注意,我们的原始文本只有7个字符长。得到它。 0不是Monta27的一部分。下一个1将在字符串中搜索,它也不是原始字符串的一部分,我们将其定位为9。接下来的2个将被搜索。由于它是原始字符串的一部分,因此我们得到其索引为6。
同样,每个元素都位于某个位置。
-
现在,此数组以MIN(\ {8,9,6,11,12,13,14,7,16,17})的形式传递给`link:/ statistical-excel-min-function [MIN function]`。 MIN返回6,这是原始文本中第一个数字的位置。
之后的故事很简单。我们使用此数字通过LEFT和RIGHT函数提取文本和数字。
当Number在字符串的开头时,从字符串中提取Number和文本在上面的示例中,Number在字符串的末尾。当数字开头时,我们如何提取数字和文本。
我已经准备了与上述类似的表格。它刚开始有数字。
在这里,我们将使用另一种技术。我们将计算数字的长度(此处为2),并从String的左侧提取该数字的字符。
因此,方法为= LEFT(字符串,数字计数)
要计算字符数,这是公式。
计算数量的通用公式:
在这里,**`link:/ excel-text-formulas-excel-substitute-function [SUBSTITUTE function]`将用“”(空白)替换找到的每个数字。如果找到一个被ti替换的数字,则将新字符串添加到数组,否则将其他明智的原始字符串添加到数组。这样,我们将得到10个字符串的数组。
=SUM(LEN(string)-LEN(SUBSTITUTE(string,{"0","1","2","3","4","5","6","7","8","9"},""))
现在,LEN函数将返回这些字符串数组中的字符长度。
然后,从原始字符串的长度中减去SUBSTITUTE函数返回的每个字符串的长度。这将再次返回一个数组。
现在,SUM将添加所有这些数字。这是字符串中数字的计数。
从字符串
中提取数字部分现在,由于我们知道字符串中数字的长度,因此我们将在LEFT中替换此函数。
由于我们的字符串为A11,因此:
从左
中提取数字的公式
=LEFT(A11,SUM(LEN(A11)-LEN(SUBSTITUTE(A11,{"0","1","2","3","4","5","6","7","8","9"},""))))
从字符串
中提取文本部分因为我们知道数字的数量,所以我们可以从字符串的总长度中减去它,以获得字符串中的数字字母,然后使用right函数从字符串的右边提取该数量的字符。
从右侧提取文本的公式
=RIGHT(A11,LEN(A2)-SUM(LEN(A11)-LEN(SUBSTITUTE(A11,{"0","1","2","3","4","5","6","7","8","9"},""))))
工作原理
这两个公式的主要部分是SUM(LEN(A11)-LEN(SUBSTITUTE(A11,\ {“ 0”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”, “ 7”,“ 8”,“ 9”},“”))))
计算数字的首次出现。只有找到这一点,我们才可以使用LEFT函数拆分文本和数字。因此,让我们了解一下。
-
SUBSTITUTE(A11,\ {“ 0”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”,“ 8”,“ 9”},“ “):
将这些数字替换为空/空白(“”)后,此部分将在A11中返回字符串数组。对于27Monta,它将返回\ {“ 27Monta”,“ 27Monta”,“ 7Monta”,“ 27Monta”,“ 27Monta”,“ 27Monta”,“ 27Monta”,“ 2Monta”,“ 27Monta”,“ 27Monta”}。
LEN(SUBSTITUTE(A11,\ {“ 0”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”,“ 8”,“ 9”},“ “)):
现在,SUBSTITUTE部分由LEN函数包装。此返回长度由SUBSTITUTE函数返回的数组中的文本。结果,我们将得到\ {7,7,6,7,7,7,7,7,6,7,7}。
LEN(A11)-LEN(SUBSTITUTE(A11,\ {“ 0”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”,“ 8”,“ 9“},”“)):
在这里,我们从实际字符串的长度中减去以上部分返回的每个数字。原始文本的长度为7。因此,我们将得到\ {7-7,7-7,7-6,….}。最后,我们将得到\ {0,0,1,0,0,0,0,1,0,0}。
SUM(LEN(A11)-LEN(SUBSTITUTE(A11,\ {“ 0”,“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”,“ 8” ,“ 9”},“”)))):
在这里,我们使用SUM对上述函数返回的数组求和。
这将给出2。这是字符串中数字的数量。
现在,我们可以提取文本和数字并将其拆分为不同的单元格。当number开头和结尾时,此方法都适用于文本类型。您只需要适当地利用LEFT和RIGHT函数即可。
使用SplitNumText函数从字符串中拆分数字和文本
上面的to方法有点复杂,当文本和数字混合在一起时,它们没有用。要拆分文本和数字,请使用此用户定义的功能。
语法:
字符串:要拆分的字符串。
=SplitNumText(string, op)
操作:这是布尔值。传递0或false以获得文本部分。对于数字部分,请传递true或大于0的任何数字。例如,如果字符串在A20中,则
从字符串中提取数字的公式是:
和
从字符串中提取文本的公式是:
=SplitNumText(A20,1)
复制下面的代码在VBA模块中以使上面的公式起作用。
=SplitNumText(A20,0)
这段代码只是检查字符串中的每个字符(是否为数字)。如果是数字,则将其存储在num变量中,否则存储在txt变量中。如果用户为op传递true,则返回num,否则返回txt。
我认为这是从字符串中拆分数字和文本的最佳方法。
Function SplitNumText(str As String, op As Boolean) num = "" txt = "" For i = 1 To Len(str) If IsNumeric(Mid(str, i, 1)) Then num = num & Mid(str, i, 1) Else txt = txt & Mid(str, i, 1) End If Next i If op = True Then SplitNumText = num Else SplitNumText = txt End If End Function
您可以根据需要在此处下载工作簿。
是的,这些是在不同单元格中拆分文本和数字的方法。如果您有任何疑问或更好的解决方案,请在下面的评论部分中告诉我。与男生互动总是很有趣。
单击下面的链接下载工作文件:
`link:/wp-content-uploads-2019-11-Split-Number-and-Text-from-A-Cell.xls [__从一个单元格拆分数字和文本]
相关文章:
链接:/ excel-text-formulas-split-numbers-and-text-from-string-in-excel [在Excel中从字符串中拆分数字和文本]
热门文章:
link:/ vlookup-functions的公式和函数介绍[Excel中的VLOOKUP函数]
链接:/ tips-countif-in-microsoft-excel [Excel 2016中的COUNTIF]`