web-dev-qa-db-ja.com

文字列に文字のみが含まれているかどうかを確認するにはどうすればよいですか?

テキストの文字列を確認し、それが文字で構成されているかどうかを評価できる関数を使用しています。 「General」というモジュールに格納されています。一般モジュールは、パブリック関数と変数を格納するためにのみ存在します。機能コードは以下のとおりです。

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsLetter = True
            Case Else
                IsLetter = False
                Exit For
        End Select
    Next
End Function  

次に、ユーザーフォームのテキストボックスの最初の2文字を評価する2つの「if」ルーチンがあります。最初のルーチンは最初の文字が数字かどうかを尋ね、2番目のルーチンは2番目の文字がアルファベットかどうかを尋ねます。現在、2番目の「if」ルーチンは、IsAlphaがTrueをテストするときに、MsgBoxを生成するのではなく、サブルーチンから私を排出しています。 IsAlpha関数が正しく呼び出されていませんか?

ルーチンが以下にリストされている場合:

Private Sub CmdMap_Click()

    With TxtDxCode
        If IsNumeric(Left(Me.TxtDxCode.Text, 1)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If

        If IsAlpha(Left(Me.TxtDxCode.Text, 2)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If
    End With
7
Isaac Rothstein

代わりに正規表現を使用しないのはなぜですか?その場合、ループは含まれません。

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like WorksheetFunction.Rept("[a-zA-Z]", Len(strValue))
End Function

また、ユーザー定義関数(UDF)を作成するときは、戻り値が実際の関数の名前に割り当てられていることを確認する必要があります。この場合はIsAlpha-IsLetterではなく、値が戻されることはありません。

11
Sam

これをIsAlphaでお試しください

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsAlpha = True
            Case Else
                IsAlpha = False
                Exit For
        End Select
    Next
End Function
3

Left(Me.TxtDxCode.Text, 2)は、文字列の最初の2文字を返します。したがって、Me.TxtDxCode.Textが7ZABCの場合、この式は「7Z」を返します。これにより、IsAlphaテストが失敗します。

2番目の文字だけを調べたいので、代わりにMid $を使用します。

If IsAlpha(Mid$(Me.TxtDxCode.Text, 2, 1)) Then

これは "Z"を返し、IsAlphaテストは成功するはずです。

(Left $、Mid $などの文字列バージョンは、Left、Midなどのバリアントバージョンよりもわずかに高速です- こちら を参照)

0
barrowc