检查单元格是否填充了 10 位数字

Check if a cell is filled with 10 digit number

提问人:mkarthik 提问时间:7/28/2023 最后编辑:Communitymkarthik 更新时间:11/13/2023 访问量:108

问:

我正在向Excel中的特定单元格添加一个10位数字。

如果为 true,我想运行一个宏。 如果为 false,则为带有文本的 msgbox。

Sub Run_PNR()

If Cells(E, 7).Value = 0 Then
    MsgBox ("Enter Correct PNR Number")
Else
    Shell "explorer.exe " & Range("d25").Text
End If
End Sub
Excel VBA IF-Statement 单元格 为空

评论

1赞 Dominique 7/28/2023
“ABCDEFGHIJ”有十位数字,但它不是数字。“1234567890”有十位数字,是一个数字。但是“0000067890”呢?万一缩写为“67890”?这十位数字(之一)是吗?
0赞 senthilkumar2185 7/28/2023
@dominique在数字之前添加肯定短语0000067890。它没有缩写数字。像'0000067890
1赞 CLR 7/28/2023
您想检查单元格 E7 吗?如果是这样,那不是你做事的方式。用。Range("E7")
1赞 Tim Williams 7/28/2023
Range("E7").Value Like String(10, "#")
0赞 Tim Williams 7/28/2023
@Dominique“ABCDEFGHIJ”有十个字符,但没有数字......

答:

2赞 FunThomas 7/28/2023 #1

使用该函数将单元格内容转换为数字并检查其值:Val

Dim cellVal as Long
cellVal = Val(ActiveSheet.Cells(7, "E").Value)
If cellVal < 1000000000 Or cellVal > 9999999999 Then
    MsgBox ("Enter Correct PNR Number")
Else
    (do whatever needs to be done...)
End If

评论

0赞 Notus_Panda 7/28/2023
不应该是'Cells(7,“E”)'吗?否则,我得到的类型不匹配。
1赞 FunThomas 7/28/2023
@Notus_Panda你是对的。与我的习惯相反,只是来自 OP 的 C&P 代码而不进行检查。
0赞 Sam 7/28/2023
这不能处理0000000001。
0赞 FunThomas 7/28/2023
@Sam:0000000001 不是数字(它要么是字符串,要么是具有特殊格式的数字 1)。但这是主要问题:OP没有说出他们到底拥有哪些数据。
1赞 FunThomas 7/28/2023
"0000000001"显然不是一个数字(你认为引号代表什么?它是一个字符串,占用 10 个字节的内存。如果您在 Excel 中输入 000000001,它会将其转换为数字 1。如果要作为字符串,则需要放置单引号字符或将单元格格式化为文本。在这两种情况下都会返回.000000001VartypevbString
1赞 senthilkumar2185 7/28/2023 #2

此代码用于字母和数字。

Sub Run_PNR()
    If Len(Range("E7").value) <> 10 Then
    MsgBox ("Enter Correct PNR Number")
    Else
    Shell "explorer.exe " & Range("d25").Text
    End If
    End Sub

此代码仅用于数字。

If IsNumeric(ActiveSheet.Range("E7").value) Then
If Len(ActiveSheet.Range("E7").value) <> 10 Then
MsgBox ("Enter Correct PNR Number")
Else
Shell "explorer.exe " & Range("d25").Text
End If
Else
MsgBox ("Enter Number only")
End If
End Sub

评论

1赞 FunThomas 7/28/2023
这也将接受非数字值
0赞 senthilkumar2185 7/28/2023
是的,它接受这一点,将来他们可能也想添加字母数字的帮助。
0赞 CLR 7/28/2023
这将允许输入“3.14159265”。
0赞 senthilkumar2185 7/28/2023
不允许其只允许整数。
0赞 CLR 7/28/2023
3.14159265虽然是数字。我是说你的代码会允许它,不应该允许它。
0赞 taller 7/28/2023 #3

RegExp是验证 10 位数字的选项。

Sub Run_PNR()
    With CreateObject("vbscript.regexp")
        .IgnoreCase = True
        .Global = True
        .Pattern = "\d{10}"
        If .Test(Trim(Cells(7, "E").Value)) Then
            Shell "explorer.exe " & Range("d25").Text
        Else
            MsgBox ("Enter Correct PNR Number")
        End If
    End With
End Sub