如何在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)),"")