如何在excel中提取文本中间的多个数值?
How to extract multiple numerical values in the middle of a text in excel?
我想提取单元格中间的数值并将其放在单独的列中。文本之间通常有两个数字,我希望将它们分开,例如下面的 table 3 。如果只有一个值,它将转到“发件人”列。
我目前正在使用分隔符并用 space 或“-”分隔每个文本。它在一定程度上起作用,除了一些带有数值的列包含文本以及在 table 2 中看到的。示例数据在 Table 1.
中
我尝试使用 LEFT 函数,但我认为我没有正确使用它。有没有办法让它看起来像 Table 3?
谢谢!
Table 1.样本数据
Name
abcd 29.1 42.3 (1PRO)
620001 T abcd 32.6 41 (3ea)
600121 abcd cross 74.0 (Crea)
Table 2.
Name
From
To
abcd 29.1 42.3 (1PRO)
abcd
29.1
42.3
(1PRO)
620001 T abcd 32.6 41 (3ea)
620001
T
abcd
32.6
41
(3ea)
600121 abcd cross 74.0 (Crea)
600121
abcd
cross
74.0
(crea)
Table 3.
Name
From
To
abcd 29.1 42.3 (1PRO)
29.1
42.3
620001 T abcd 32.6 41 (3ea)
32.6
41
600121 abcd cross 74.0 (Crea)
74.0
我总是通过执行以下操作来解决此类问题。
在新模块中使用以下代码创建自定义函数。
如果您以前从未这样做过,请按照此 link ... https://support.microsoft.com/en-us/office/create-custom-functions-in-excel-2f06c10b-3622-40d6-a1b2-b6748ae8231f ... 并打开“创建简单的自定义函数”部分
Public Function SplitString(ByVal strText As String, ByVal strDelimiter As String, ByVal lngIndex As Long) As String
Dim arrSplitString
arrSplitString = Split(strText, strDelimiter)
If UBound(arrSplitString) >= lngIndex Then
SplitString = arrSplitString(lngIndex)
End If
End Function
然后如下所示添加您的公式,注意数组从 0 开始。
瞧!希望对您有所帮助。
在Windows Excel 2016 中,您可以使用FILTERXML
函数和一个xPath
参数,即returns 只有除第一个节点之外的数值。
- 构建XML:
"<t><s>" & SUBSTITUTE($A21," ","</s><s>") & "</s></t>"
xPath
:
"//s[position()>1 and number(.)=number(.)]"
如果你有动态数组,那将是你所需要的。但是因为你不需要,所以你需要包装成一个 INDEX
函数来提取单个元素。
如果最多有两个元素,您可以对“行”条目进行硬编码;如果没有,您将需要使用动态函数来生成行。
下面我展示了动态函数,您将公式“拖动”到右侧的每一列都会递增 1。
=IFERROR(INDEX(FILTERXML("<t><s>" & SUBSTITUTE($A1," ","</s><s>") & "</s></t>","//s[position()>1 and number(.)=number(.)]"),COLUMNS($A:A)),"")
我想提取单元格中间的数值并将其放在单独的列中。文本之间通常有两个数字,我希望将它们分开,例如下面的 table 3 。如果只有一个值,它将转到“发件人”列。
我目前正在使用分隔符并用 space 或“-”分隔每个文本。它在一定程度上起作用,除了一些带有数值的列包含文本以及在 table 2 中看到的。示例数据在 Table 1.
中我尝试使用 LEFT 函数,但我认为我没有正确使用它。有没有办法让它看起来像 Table 3?
谢谢!
Table 1.样本数据
Name |
---|
abcd 29.1 42.3 (1PRO) |
620001 T abcd 32.6 41 (3ea) |
600121 abcd cross 74.0 (Crea) |
Table 2.
Name | From | To | ||||
---|---|---|---|---|---|---|
abcd 29.1 42.3 (1PRO) | abcd | 29.1 | 42.3 | (1PRO) | ||
620001 T abcd 32.6 41 (3ea) | 620001 | T | abcd | 32.6 | 41 | (3ea) |
600121 abcd cross 74.0 (Crea) | 600121 | abcd | cross | 74.0 | (crea) |
Table 3.
Name | From | To |
---|---|---|
abcd 29.1 42.3 (1PRO) | 29.1 | 42.3 |
620001 T abcd 32.6 41 (3ea) | 32.6 | 41 |
600121 abcd cross 74.0 (Crea) | 74.0 |
我总是通过执行以下操作来解决此类问题。
在新模块中使用以下代码创建自定义函数。
如果您以前从未这样做过,请按照此 link ... https://support.microsoft.com/en-us/office/create-custom-functions-in-excel-2f06c10b-3622-40d6-a1b2-b6748ae8231f ... 并打开“创建简单的自定义函数”部分
Public Function SplitString(ByVal strText As String, ByVal strDelimiter As String, ByVal lngIndex As Long) As String
Dim arrSplitString
arrSplitString = Split(strText, strDelimiter)
If UBound(arrSplitString) >= lngIndex Then
SplitString = arrSplitString(lngIndex)
End If
End Function
然后如下所示添加您的公式,注意数组从 0 开始。
瞧!希望对您有所帮助。
在Windows Excel 2016 中,您可以使用FILTERXML
函数和一个xPath
参数,即returns 只有除第一个节点之外的数值。
- 构建XML:
"<t><s>" & SUBSTITUTE($A21," ","</s><s>") & "</s></t>"
xPath
:
"//s[position()>1 and number(.)=number(.)]"
如果你有动态数组,那将是你所需要的。但是因为你不需要,所以你需要包装成一个 INDEX
函数来提取单个元素。
如果最多有两个元素,您可以对“行”条目进行硬编码;如果没有,您将需要使用动态函数来生成行。
下面我展示了动态函数,您将公式“拖动”到右侧的每一列都会递增 1。
=IFERROR(INDEX(FILTERXML("<t><s>" & SUBSTITUTE($A1," ","</s><s>") & "</s></t>","//s[position()>1 and number(.)=number(.)]"),COLUMNS($A:A)),"")