gpt4 book ai didi

excel - 如何让 IsNumeric 检查整个字符串/变量而不仅仅是第一个字符?

转载 作者:行者123 更新时间:2023-12-01 13:11:12 24 4
gpt4 key购买 nike

我正在使用 IsNumeric 检查变量的一部分是否为数字。不幸的是,它似乎只检查字符串部分的第一个字符而不是整个位。

它目前接受 Q123 1234567 和 QWER 1QWERTYR(以及其他变体)。虽然我需要前 4 个字符都是字母,而其他字符都是数字。

我不知道我还缺少什么。请尽可能添加额外的评论,我对 vba 的理解仍然低于基本水平。

Dim ConNr As String
Dim Space As String
Dim Four As String
Dim Six As String
Dim One As String
Dim Container As String

ConNr = Me.txtContainer.Value
Space = " "
Four = Left(Me.txtContainer.Value, 4)
Four = UCase(Four)
Six = Mid(Me.txtContainer.Value, 5, 6)
One = Right(Me.txtContainer.Value, 1)

'Check if all 4 are letters
If IsNumeric(Four) = True Then
MsgBox "First 4 need to be letters."
Me.txtContainer.SetFocus
Exit Sub
Else
'MsgBox "Four Letters " + Four

'Check if 6 characters are numbers
If IsNumeric(Six) = False Then
MsgBox "4 Letters followed by 6 numbers."
'MsgBox "These Six " + Six
Me.txtContainer.SetFocus
Exit Sub
Else
'MsgBox "Six Numbers " + Six

'Last number is number
If IsNumeric(One) = False Then
MsgBox "Last character needs to be a number."
Me.txtContainer.SetFocus
Exit Sub
Else
'MsgBox "Last Number " + One
ConNr = Four & Space & Six & Space & One
Container = ConNr
End If
End If
End If

基于JvdV编辑

当我尝试 [A-Za-z][A-Za-z][A-Za-z][A-Za-z] ###### #"输出为空。

我不想强制用户使用正确的格式。 (大写字母、空格。)但 4 个字母/7 个数字是必需的。


Dim ConNr As String: ConNr = Me.txtContainer.Value


If ConNr Like "[A-Za-z][A-Za-z][A-Za-z][A-Za-z]#######" Then ‘Without spaces, else it doesn’t post.
Container = UCase(ConNr)
Else
MsgBox "YOU FAILED."
Me.txtContainer.SetFocus
Exit Sub

End If

‘Output should become ASDF 123456 7. Currently gives me ASDF1234567.

最佳答案

根据我的评论,特此提供一个简单的示例代码来演示 Like 运算符的使用:

Sub Test()

Dim str As String: str = "QWER 1234567"
Dim arr As Variant: arr = Split(str, " ")

If arr(0) Like "[A-Z][A-Z][A-Z][A-Z]" And IsNumeric(arr(1)) Then
Debug.Print str & " is passed!"
End If

End Sub

顺便说一句,如果你想允许大写和小写,你可以使用:[A-Za-z][A-Za-z][A-Za-z][A-Za-z]


编辑

如果您正在寻找 4 个字母字符的模式,然后是一个空格,然后是 6 个数字,您甚至可以做一些更简单的事情:

Sub Test()

Dim str As String: str = "QWER 123456"

If str Like "[A-Z][A-Z][A-Z][A-Z] ######" Then
Debug.Print str & " is passed!"
End If

End Sub

如果您想包含另一个空格/数字,请扩展表达式。你说的是:

"ConNr = Four & Space & Six & Space & One"

所以 [A-Z][A-Z][A-Z][A-Z] ###### # 在这种情况下对你有用。


根据您的评论,您不想对用户强制使用特定格式,只要他们的字符串中有 4 个字母字符和 7 个数字字符即可。以任何形式。所以我想,既然有这么多地方可以放置空格,最好使用 Application.Substitute 来摆脱它们。您的代码可能如下所示:

If Application.Substitute(Me.txtContainer.Value, " ", "") Like "[A-Za-z][A-Za-z][A-Za-z][A-Za-z]#######" Then
Debug.Print str & " is passed!"
End If

如果您不想强制转换为大写字母,但仍想返回它,那么请使用 UCase 函数一次将整个字符串设为大写字母!

Debug.Print UCase(Application.Substitute(Me.txtContainer.Value, " ", ""))

很难掩饰这很像 RegEx 的事实。

关于excel - 如何让 IsNumeric 检查整个字符串/变量而不仅仅是第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com