Excel:从文本中提取具有特定格式的数字

Excel:从文本中提取具有特定格式的数字,excel,excel-formula,Excel,Excel Formula,我需要从包含文本和数字的多个单元格中提取一个特定的数字。我需要扫描的文本大致如下: “Lorem ipsum dolor sit amet 5,是一位杰出的献身者,他是一名临时劳工和职业经理人。但最低成本为10%,由ullamco Laboraris nisi提供,并在商品交易前提供服务。两人死亡的比例为20%,分别为20%和20%。除非圣奥卡塔特无过失10.54%,否则不应因工作原因而受到惩罚。” 我需要提取粗体的值,它在不同文本中有所不同,但始终是一个百分比,小数点后有两位数字。文本中还有其

我需要从包含文本和数字的多个单元格中提取一个特定的数字。我需要扫描的文本大致如下:

“Lorem ipsum dolor sit amet 5,是一位杰出的献身者,他是一名临时劳工和职业经理人。但最低成本为10%,由ullamco Laboraris nisi提供,并在商品交易前提供服务。两人死亡的比例为20%,分别为20%和20%。除非圣奥卡塔特无过失10.54%,否则不应因工作原因而受到惩罚。”


我需要提取粗体的值,它在不同文本中有所不同,但始终是一个百分比,小数点后有两位数字。文本中还有其他数字和百分比。具体来说:我需要一种方法,从文本中仅提取小数点后有两位数字的值。有没有办法用excel函数实现这一点使用普通Excel,我不知道。使用VBA,您可以使用自定义项来执行此操作

此代码将始终获取文本中最后的%。它将获取所有数字。它将以字符串形式返回%value。如果需要将其作为数字,则需要修改自定义项

Public Function EXTRACT_LAST_PERCENT(ByVal vThisCell As Range) As String

If vThisCell.Count <> 1 Then
    EXTRACT_LAST_PERCENT = "This UDF only works with 1 cell"
    Exit Function
End If


Dim STR As String

STR = vThisCell.Value

Dim MyValues As Variant

MyValues = Split(STR, "%")

Dim i As Byte

'% target will be always the last, according to OP
'so it will be in Ubound-1 always
'we split again using blanks as delimiter

STR = MyValues(UBound(MyValues) - 1)

Erase MyValues

MyValues = Split(STR, " ")

'now % target is in Ubound


EXTRACT_LAST_PERCENT = MyValues(UBound(MyValues))

Erase MyValues

End Function
公共函数提取最后百分比(ByVal vThisCell作为范围)作为字符串
如果vThisCell.Count为1,则
EXTRACT\u LAST\u PERCENT=“此自定义项仅适用于1个单元格”
退出功能
如果结束
作为字符串的Dim STR
STR=vThisCell.Value
Dim MyValue作为变量
MyValues=Split(STR,“%”)
作为字节的Dim i
根据OP,目标将始终是最后一个
“所以它总是在Ubound-1中
'我们使用空格作为分隔符再次拆分
STR=MyValues(UBound(MyValues)-1)
删除我的值
MyValues=Split(STR,“”)
'现在%target在Ubound中
提取最后百分比=MyValues(UBound(MyValues))
删除我的值
端函数
这就是我得到的:


希望您可以根据自己的需要进行调整。

文本中是否始终只有小数点后两位数的单个百分比(如提供的示例所示)?使用find()查找“%“符号和前面的空格-中间的字符是数字…@SolarMike,但有多个
%
符号的实例。如果总是只有一个带2位小数的实例,这应该适用于您:
=MID(A3,搜索(“??.??%”,A3),6)
有关在VBA中使用正则表达式查找特定模式的一些重要信息-