Excel VBA-仅获取单元格中的数值

Excel VBA-仅获取单元格中的数值,excel,vba,if-statement,Excel,Vba,If Statement,我在VBA中有一个IF函数,其中包含一个数学公式:-(单元格(i3,10).Value>30) 我遇到的问题是,第10列中的值都是字母数字。例如,他们都是“1-硬”,“2-中等”,“3-容易” 有没有办法让VBA只看数字,这样当它测试值是否超过30时,它就能工作了 谢谢获取字符串的左侧部分(在破折号之前),修剪它并转换为INT 'item = your cell value CInt(Trim(Left(item, InStr(1, item, "-") - 1))) val功能应满足您的需要

我在VBA中有一个IF函数,其中包含一个数学公式:-
(单元格(i3,10).Value>30)

我遇到的问题是,第10列中的值都是字母数字。例如,他们都是“1-硬”,“2-中等”,“3-容易”

有没有办法让VBA只看数字,这样当它测试值是否超过30时,它就能工作了


谢谢

获取字符串的左侧部分(在破折号之前),修剪它并转换为
INT

'item = your cell value
CInt(Trim(Left(item, InStr(1, item, "-") - 1)))

val
功能应满足您的需要。它返回字符串左侧的数字,直到找到非数字字符为止(如果字符串左侧不包含数字,则为0)

所以只要改变你的假设:

 if val(Cells(i3, 10).Value) > 30 then

可以使用VBA Val函数从字符串中获取前导数字字符

要在工作表上使用此函数,需要在标准VBA模块中创建用户定义函数(UDF)

Function LeadingNumbers(Str As String) As Double
    LeadingNumbers = Val(Str)
End Function

因此,在您的上下文中使用(LeadingNumbers(Cells(i3,10).Value)>30)。

您需要使用Left()和Instr()解析字符串以提取数字。
=1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($9),1)),COUNT(1*MID(A1,ROW($9),1))
用于单元格A1。
Function LeadingNumbers(Str As String) As Double
    LeadingNumbers = Val(Str)
End Function