【问题标题】:How to extract a decimal number in a string?如何提取字符串中的十进制数?
【发布时间】:2016-06-15 14:58:44
【问题描述】:

我想从string 中提取(或分离)一个十进制数。喜欢:

宽度(6.15)

这里我只想保留十进制数。

Sub first_try()

Dim a, b
a = "width(5.55)"
For i = 1 To Len(a)
    If IsNumeric(Mid(a, i, 1)) Then
        b = b & Mid(a, i, 1)
    End If
Next i

'Debug.Print b

End Sub

但在这种情况下,我只能保留数字(例如我的代码中的 555),而不能保留十进制数字。而且字符串并不总是像宽度(5.55),没有规律可循。所以如果你有一些想法,请给我一些建议。谢谢!

【问题讨论】:

  • “没有规律可循”。 必须有一些规则或其他,否则这个问题无法解决。
  • 你能把Or Mid(a, i, 1) = "." 加到你的if-statement吗?
  • 谢谢大家,link 真的很有帮助。并且“没有规律可循”,因为我正在编写质量测试报告,数字可以在括号内或不带括号,并且在小数点后,数字会随着不同类型的测试而变化。跨度>
  • @MattCremeens 好主意...为什么我没想到!

标签: string excel vba


【解决方案1】:

这是一种可能的方法:

Sub first_try()

Dim a, b
Dim i As Long
a = "width(5.55)"
For i = 1 To Len(a)
    If IsNumeric(Mid(a, i, 1)) Then
        b = Val(Mid(a, i))
        Exit For
    End If
Next i

Debug.Print b

End Sub

鉴于您提供的信息。如果您需要允许负数,这应该是一个简单的更改。

【讨论】:

  • 谢谢!它运作良好。但我有一个问题,我不太明白If IsNumeric(Mid(a, i, 1)) Then。我们检查字符串中的每个数字(我可以这么说吗?),如果它是一个数字,那么我们将字符串的其余部分放入 b 中。所以我认为它只会留下b中的最后一个数字,但实际上不是?你能帮我解释一下吗?
  • 依次逐个检查每个字符。如果字符是数字,则代码对字符串的其余部分使用 Val。 Val 会将所有内容返回到它不识别为数字一部分的第一件事(它会识别逗号和小数点)。此时代码退出循环,不再继续测试。
【解决方案2】:

这是一种获取数字和小数点的方法:

Sub first_try()

Dim a, b
a = "width(5.55)"
For i = 1 To Len(a)
    If IsNumeric(Mid(a, i, 1)) Or Mid(a, i, 1) = "." Then
        b = b & Mid(a, i, 1)
    End If
Next i

Debug.Print b

End Sub

【讨论】:

  • 哈哈,这个方法不错!谢谢!为什么我只是不明白这个想法!
  • 但是如果这个数字真的很大,比如 5,555(即使在我的情况下也是不可能的,但这可能会有一些错误......)并且这个方法会失败。
猜你喜欢
  • 2021-12-01
  • 2011-04-04
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多