Excel / VBA动态数字和文本分离

时间:2017-05-14 20:27:29

标签: excel vba excel-vba

我从互联网上获得了一个价值,特别是某些加密技术的市值。我从excel中的“获取外部数据”功能中获取这些。这以文本格式加载数据,例如对于1000比特币而不是1000比特,我将获得一个具有1000比特币的单元格。因此,我无法进一步使用该数据。如果我使用右,左,右边的函数,假设这个值可以从1000到1或1000000波动,一旦屏障被击中,右边和左边将产生文本格式。另一方面,我不能将文本用于列分隔符,因为每次刷新表时都会返回其原始状态并删除用户添加的任何列。任何建议动态地推断每个单元格的数字都是受欢迎的。感谢

3 个答案:

答案 0 :(得分:1)

您可以使用the Val function

假设包含您所追求的值的单元格是活动工作表的A1,您可以使用:

Dim numericPart As Double
numericPart = Val(Range("A1").Value)

如果您想要一个Excel公式,并且值和文本部分之间总是有空格,您可以使用:

=VALUE(LEFT(A1,FIND(" ",A1)-1))

答案 1 :(得分:0)

另一个工作表函数,它可以在没有空格将数字与字母分开的情况下工作(只要数字先出现):

=LOOKUP(9E+307,--MID(B9,1,{1,2,3,4,5,6,7,8,9,10}))

如果数字中可能有超过10个位置,只需将数组扩展为常量。

答案 2 :(得分:0)

从互联网获取外部数据时,数据可能包含前导或尾随空格或不可打印的前导或尾随字符。

在这种情况下,最安全的方法是使用正则表达式从字符串中获取数字部分。

将以下UDF(用户定义函数)放在标准模块上,然后在工作表上使用此UDF,如下所示......

假设" 1000 BTC"在A2中,然后像这样尝试UDF ..

=GetNumber(A2)

<强> UDF:

Function GetNumber(rng As Range) As Long
Dim Num As Long
Dim RE As Object, Match As Object, Matches As Object
Set RE = CreateObject("VBScript.RegExp")
With RE
   .Global = False
   .Pattern = "\d+"
End With
If RE.test(rng.Value) Then
   Set Matches = RE.Execute(rng.Value)
   GetNumber = Matches(0)
End If
End Function